@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
@@ -0,0 +1,355 @@
1
+ /** Project data is tab-scoped unless the visitor explicitly remembers it. */
2
+ export const REMEMBER_KEY = 'smrt-planner:remember:v1';
3
+ export const LEGACY_WORKSPACE_KEY = 'smrt-planner:legacy-workspace:v1';
4
+ export const EPHEMERAL_RECOVERY_KEY = 'smrt-planner:ephemeral-recovery:v1';
5
+ const EPHEMERAL_KEYS = new Set([
6
+ 'smrt-planner:conversation:v1',
7
+ 'smrt-planner:conversation-seed:v1',
8
+ 'smrt-planner:host-draft:v1',
9
+ EPHEMERAL_RECOVERY_KEY,
10
+ ]);
11
+ const isProjectKey = (key) => ownsWorkspaceKey(key) && !EPHEMERAL_KEYS.has(key);
12
+ const MIGRATED_KEY = 'smrt-planner:workspace-migrated:v1';
13
+ const EXACT_KEYS = new Set([
14
+ 'smrt-planner:cookbook-doc:v1',
15
+ 'smrt-planner:blueprint:v1',
16
+ 'smrt-planner:cookbook-doc:unreadable',
17
+ 'smrt-planner:cookbook-doc:backup',
18
+ 'smrt-planner:cookbook',
19
+ 'smrt-planner:cookbook-applied',
20
+ 'smrt-planner:sample-context:v1',
21
+ 'smrt-planner:conversation:v1',
22
+ 'smrt-planner:conversation-seed:v1',
23
+ 'smrt-planner:host-draft:v1',
24
+ EPHEMERAL_RECOVERY_KEY,
25
+ ]);
26
+ export const ownsWorkspaceKey = (key) => EXACT_KEYS.has(key) || key.startsWith('smrt-planner:data:v6:');
27
+ function browser(kind) {
28
+ try {
29
+ return globalThis[kind] ?? null;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ function entries(storage) {
36
+ if (!storage)
37
+ return [];
38
+ const result = [];
39
+ for (let i = 0; i < storage.length; i++) {
40
+ const key = storage.key(i);
41
+ if (key && ownsWorkspaceKey(key)) {
42
+ const value = storage.getItem(key);
43
+ if (value !== null)
44
+ result.push([key, value]);
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ /** Storage is injected for deterministic tests and restricted browser contexts. */
50
+ export function createWorkspaceStorage(local, session) {
51
+ let initialized = false;
52
+ const remembering = () => local?.getItem(REMEMBER_KEY) === 'true';
53
+ function initialize() {
54
+ if (initialized)
55
+ return;
56
+ initialized = true;
57
+ if (!local || !session)
58
+ return;
59
+ try {
60
+ // Retire earlier durable chat/draft copies only after preserving exact
61
+ // bytes in this tab. Conflicting old lead ids remain recoverable here.
62
+ const ephemeral = entries(local).filter(([key]) => EPHEMERAL_KEYS.has(key));
63
+ const archiveRaw = local.getItem(LEGACY_WORKSPACE_KEY);
64
+ let archive;
65
+ if (archiveRaw) {
66
+ const parsed = JSON.parse(archiveRaw);
67
+ if (!Array.isArray(parsed) ||
68
+ !parsed.every((v) => Array.isArray(v) &&
69
+ v.length === 2 &&
70
+ typeof v[0] === 'string' &&
71
+ typeof v[1] === 'string'))
72
+ throw new Error('Unreadable legacy archive');
73
+ archive = parsed;
74
+ ephemeral.push(...archive.filter(([key]) => EPHEMERAL_KEYS.has(key)));
75
+ }
76
+ const conflicts = [];
77
+ for (const [key, value] of ephemeral) {
78
+ const current = session.getItem(key);
79
+ if (current === null)
80
+ session.setItem(key, value);
81
+ else if (current !== value)
82
+ conflicts.push([key, value]);
83
+ }
84
+ if (conflicts.length) {
85
+ const previous = session.getItem(EPHEMERAL_RECOVERY_KEY);
86
+ session.setItem(EPHEMERAL_RECOVERY_KEY, JSON.stringify({ previous, values: conflicts }));
87
+ }
88
+ if (archive?.some(([key]) => EPHEMERAL_KEYS.has(key))) {
89
+ const project = archive.filter(([key]) => !EPHEMERAL_KEYS.has(key));
90
+ if (project.length)
91
+ local.setItem(LEGACY_WORKSPACE_KEY, JSON.stringify(project));
92
+ else
93
+ local.removeItem(LEGACY_WORKSPACE_KEY);
94
+ }
95
+ for (const [key] of ephemeral)
96
+ local.removeItem(key);
97
+ }
98
+ catch (cause) {
99
+ initialized = false;
100
+ throw cause;
101
+ }
102
+ if (remembering() || local.getItem(MIGRATED_KEY))
103
+ return;
104
+ const legacy = entries(local).filter(([key]) => isProjectKey(key));
105
+ if (!legacy.length)
106
+ return;
107
+ // Preserve exact raw bytes before retiring old live keys. Never replace an archive.
108
+ if (!local.getItem(LEGACY_WORKSPACE_KEY)) {
109
+ try {
110
+ local.setItem(LEGACY_WORKSPACE_KEY, JSON.stringify(legacy));
111
+ }
112
+ catch (cause) {
113
+ initialized = false;
114
+ throw cause;
115
+ }
116
+ }
117
+ const before = entries(session);
118
+ try {
119
+ for (const [key, value] of legacy) {
120
+ if (session.getItem(key) === null)
121
+ session.setItem(key, value);
122
+ }
123
+ local.setItem(MIGRATED_KEY, 'true');
124
+ }
125
+ catch (cause) {
126
+ for (const [key] of entries(session))
127
+ session.removeItem(key);
128
+ for (const [key, value] of before)
129
+ session.setItem(key, value);
130
+ initialized = false;
131
+ throw cause;
132
+ }
133
+ for (const [key] of legacy)
134
+ local.removeItem(key);
135
+ }
136
+ const target = (key) => {
137
+ initialize();
138
+ return key && EPHEMERAL_KEYS.has(key)
139
+ ? session
140
+ : remembering()
141
+ ? local
142
+ : session;
143
+ };
144
+ const storage = {
145
+ get length() {
146
+ initialize();
147
+ return [
148
+ ...entries(target()).filter(([key]) => isProjectKey(key)),
149
+ ...entries(session).filter(([key]) => EPHEMERAL_KEYS.has(key)),
150
+ ].length;
151
+ },
152
+ key(index) {
153
+ initialize();
154
+ return ([
155
+ ...entries(target()).filter(([key]) => isProjectKey(key)),
156
+ ...entries(session).filter(([key]) => EPHEMERAL_KEYS.has(key)),
157
+ ][index]?.[0] ?? null);
158
+ },
159
+ getItem(key) {
160
+ return ownsWorkspaceKey(key) ? (target(key)?.getItem(key) ?? null) : null;
161
+ },
162
+ setItem(key, value) {
163
+ if (!ownsWorkspaceKey(key))
164
+ throw new Error('Not a planner workspace key');
165
+ const destination = target(key);
166
+ if (!destination)
167
+ throw new Error('Workspace storage unavailable');
168
+ destination.setItem(key, value);
169
+ },
170
+ removeItem(key) {
171
+ if (ownsWorkspaceKey(key))
172
+ target(key)?.removeItem(key);
173
+ },
174
+ clear() {
175
+ initialize();
176
+ for (const store of [local, session])
177
+ for (const [key] of entries(store))
178
+ store?.removeItem(key);
179
+ },
180
+ };
181
+ return {
182
+ storage,
183
+ remembering() {
184
+ try {
185
+ initialize();
186
+ return remembering();
187
+ }
188
+ catch {
189
+ return false;
190
+ }
191
+ },
192
+ recoveryAvailable() {
193
+ try {
194
+ initialize();
195
+ return !!local?.getItem(LEGACY_WORKSPACE_KEY);
196
+ }
197
+ catch {
198
+ return false;
199
+ }
200
+ },
201
+ setRemember(value) {
202
+ try {
203
+ initialize();
204
+ if (!local || !session)
205
+ return false;
206
+ if (remembering() === value) {
207
+ if (!value)
208
+ local.removeItem(LEGACY_WORKSPACE_KEY);
209
+ return true;
210
+ }
211
+ const source = remembering() ? local : session;
212
+ const destination = value ? local : session;
213
+ const data = entries(source).filter(([key]) => isProjectKey(key));
214
+ const before = entries(destination).filter(([key]) => isProjectKey(key));
215
+ try {
216
+ for (const [key] of before)
217
+ destination.removeItem(key);
218
+ for (const [key, raw] of data)
219
+ destination.setItem(key, raw);
220
+ local.setItem(REMEMBER_KEY, String(value));
221
+ }
222
+ catch {
223
+ for (const [key] of entries(destination).filter(([key]) => isProjectKey(key)))
224
+ destination.removeItem(key);
225
+ for (const [key, raw] of before)
226
+ destination.setItem(key, raw);
227
+ return false;
228
+ }
229
+ if (source !== destination)
230
+ for (const [key] of data)
231
+ source.removeItem(key);
232
+ if (!value)
233
+ local.removeItem(LEGACY_WORKSPACE_KEY);
234
+ return true;
235
+ }
236
+ catch {
237
+ return false;
238
+ }
239
+ },
240
+ discardRecovery() {
241
+ try {
242
+ local?.removeItem(LEGACY_WORKSPACE_KEY);
243
+ return true;
244
+ }
245
+ catch {
246
+ return false;
247
+ }
248
+ },
249
+ recover() {
250
+ try {
251
+ initialize();
252
+ const raw = local?.getItem(LEGACY_WORKSPACE_KEY);
253
+ if (!raw)
254
+ return false;
255
+ const data = JSON.parse(raw);
256
+ if (!Array.isArray(data) ||
257
+ !data.every((item) => Array.isArray(item) &&
258
+ item.length === 2 &&
259
+ typeof item[0] === 'string' &&
260
+ isProjectKey(item[0]) &&
261
+ typeof item[1] === 'string'))
262
+ return false;
263
+ const destination = target();
264
+ if (!destination)
265
+ return false;
266
+ const before = entries(destination).filter(([key]) => isProjectKey(key));
267
+ try {
268
+ for (const [key] of before)
269
+ destination.removeItem(key);
270
+ for (const [key, value] of data)
271
+ destination.setItem(key, value);
272
+ }
273
+ catch {
274
+ for (const [key] of entries(destination).filter(([key]) => isProjectKey(key)))
275
+ destination.removeItem(key);
276
+ for (const [key, value] of before)
277
+ destination.setItem(key, value);
278
+ return false;
279
+ }
280
+ return true;
281
+ }
282
+ catch {
283
+ return false;
284
+ }
285
+ },
286
+ reset() {
287
+ // Snapshot before any mutation, including metadata; failed clears restore
288
+ // exact raw project state and never reach the in-memory reset coordinator.
289
+ const snapshots = [];
290
+ const wasInitialized = initialized;
291
+ try {
292
+ for (const store of [local, session]) {
293
+ if (!store)
294
+ continue;
295
+ const values = entries(store);
296
+ if (store === local) {
297
+ for (const key of [
298
+ LEGACY_WORKSPACE_KEY,
299
+ REMEMBER_KEY,
300
+ MIGRATED_KEY,
301
+ ]) {
302
+ const value = store.getItem(key);
303
+ if (value !== null)
304
+ values.push([key, value]);
305
+ }
306
+ }
307
+ snapshots.push({ store, values });
308
+ }
309
+ // Write fallible metadata first; reset must not resurrect legacy work.
310
+ local?.setItem(MIGRATED_KEY, 'true');
311
+ for (const { store, values } of snapshots) {
312
+ for (const [key] of values)
313
+ if (key !== MIGRATED_KEY)
314
+ store.removeItem(key);
315
+ }
316
+ initialized = true;
317
+ return true;
318
+ }
319
+ catch {
320
+ for (const { store, values } of snapshots) {
321
+ try {
322
+ for (const [key, value] of values)
323
+ store.setItem(key, value);
324
+ if (store === local &&
325
+ !values.some(([key]) => key === MIGRATED_KEY))
326
+ store.removeItem(MIGRATED_KEY);
327
+ }
328
+ catch {
329
+ /* Storage may have become entirely unavailable. */
330
+ }
331
+ }
332
+ initialized = wasInitialized;
333
+ return false;
334
+ }
335
+ },
336
+ };
337
+ }
338
+ let active;
339
+ export function workspaceStorageManager() {
340
+ if (!active)
341
+ active = createWorkspaceStorage(browser('localStorage'), browser('sessionStorage'));
342
+ return active;
343
+ }
344
+ export function workspaceStorage() {
345
+ return workspaceStorageManager().storage;
346
+ }
347
+ export function rememberPlan() {
348
+ return workspaceStorageManager().remembering();
349
+ }
350
+ export function setRememberPlan(value) {
351
+ return workspaceStorageManager().setRemember(value);
352
+ }
353
+ export function resetWorkspaceStorage() {
354
+ return workspaceStorageManager().reset();
355
+ }
@@ -0,0 +1,19 @@
1
+ import type { BrowserAssistantTransport } from '../assistant/transport.ts';
2
+ import type { DataSource } from '../data/source.ts';
3
+ import type { PlannerController } from './commands/index.ts';
4
+ export declare const PROJECT_PERSISTENCE_CONTEXT: unique symbol;
5
+ export declare const workspacePersistence: {
6
+ readonly remembering: boolean;
7
+ readonly recoveryAvailable: boolean;
8
+ setRemember(value: boolean): boolean;
9
+ recover(): boolean;
10
+ discardRecovery(): boolean;
11
+ };
12
+ /** Called only after the visitor confirms; the host guards irreversible requests. */
13
+ export declare function resetWorkspace(options: {
14
+ controller: PlannerController;
15
+ dataSource: DataSource;
16
+ nativeAssistant?: BrowserAssistantTransport;
17
+ onreset?: () => void;
18
+ }): boolean;
19
+ //# sourceMappingURL=workspace.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/planner/workspace.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAI3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQ7D,eAAO,MAAM,2BAA2B,eAEvC,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;uBASZ,OAAO;;;CAe3B,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,GAAG,OAAO,CAgBV"}
@@ -0,0 +1,52 @@
1
+ import { cookbookStore } from "../cookbook/store.svelte.js";
2
+ import { setSamplePack } from "../data/packs.js";
3
+ import { clearSampleContext } from "../data/sample-context.js";
4
+ import { libraryState } from "../library/state.svelte.js";
5
+ import { rememberPlan, resetWorkspaceStorage, setRememberPlan, workspaceStorageManager, } from "./workspace-storage.js";
6
+ export const PROJECT_PERSISTENCE_CONTEXT = Symbol('planner-project-persistence-owner');
7
+ let revision = $state(0);
8
+ export const workspacePersistence = {
9
+ get remembering() {
10
+ void revision;
11
+ return rememberPlan();
12
+ },
13
+ get recoveryAvailable() {
14
+ void revision;
15
+ return workspaceStorageManager().recoveryAvailable();
16
+ },
17
+ setRemember(value) {
18
+ const ok = setRememberPlan(value);
19
+ revision++;
20
+ return ok;
21
+ },
22
+ recover() {
23
+ const ok = workspaceStorageManager().recover();
24
+ revision++;
25
+ return ok;
26
+ },
27
+ discardRecovery() {
28
+ const ok = workspaceStorageManager().discardRecovery();
29
+ revision++;
30
+ return ok;
31
+ },
32
+ };
33
+ /** Called only after the visitor confirms; the host guards irreversible requests. */
34
+ export function resetWorkspace(options) {
35
+ if (!resetWorkspaceStorage())
36
+ return false;
37
+ try {
38
+ options.nativeAssistant?.reset();
39
+ cookbookStore.reset({ preserveTheme: true });
40
+ libraryState.active = null;
41
+ libraryState.appliedWork = null;
42
+ clearSampleContext();
43
+ setSamplePack(null);
44
+ options.dataSource.reset?.();
45
+ options.controller.resetWorkspace?.();
46
+ }
47
+ finally {
48
+ revision++;
49
+ options.onreset?.();
50
+ }
51
+ return true;
52
+ }
@@ -1,3 +1,3 @@
1
1
  /** The released smrt line the planner is built against (the `smrt` CLI version its commands name). */
2
- export declare const SMRT_VERSION = "0.57.12";
2
+ export declare const SMRT_VERSION = "0.57.13";
3
3
  //# sourceMappingURL=smrt-version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Generated by scripts/write-smrt-version.ts from the installed
2
2
  // @happyvertical/smrt-core; do not edit. `pnpm version:smrt` refreshes it.
3
3
  /** The released smrt line the planner is built against (the `smrt` CLI version its commands name). */
4
- export const SMRT_VERSION = '0.57.12';
4
+ export const SMRT_VERSION = '0.57.13';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-planner",
3
- "version": "0.57.12",
3
+ "version": "0.57.13",
4
4
  "type": "module",
5
5
  "description": "The smrt planner as a mountable Svelte component with a typed command set and plan snapshot.",
6
6
  "license": "MIT",
@@ -43,13 +43,13 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@happyvertical/ai": "^0.105.5",
46
- "@happyvertical/smrt-assets": "0.57.12",
47
- "@happyvertical/smrt-chat": "0.57.12",
48
- "@happyvertical/smrt-commerce": "0.57.12",
49
- "@happyvertical/smrt-core": "0.57.12",
50
- "@happyvertical/smrt-reports": "0.57.12",
51
- "@happyvertical/smrt-svelte": "0.57.12",
52
- "@happyvertical/smrt-ui": "0.57.12",
46
+ "@happyvertical/smrt-assets": "0.57.13",
47
+ "@happyvertical/smrt-chat": "0.57.13",
48
+ "@happyvertical/smrt-commerce": "0.57.13",
49
+ "@happyvertical/smrt-core": "0.57.13",
50
+ "@happyvertical/smrt-reports": "0.57.13",
51
+ "@happyvertical/smrt-svelte": "0.57.13",
52
+ "@happyvertical/smrt-ui": "0.57.13",
53
53
  "@happyvertical/speech": "^0.105.5",
54
54
  "@huggingface/transformers": "^4.3.0",
55
55
  "@mlc-ai/web-llm": "^0.2.85"
@@ -64,52 +64,52 @@
64
64
  }
65
65
  },
66
66
  "devDependencies": {
67
- "@happyvertical/smrt-ads": "0.57.12",
68
- "@happyvertical/smrt-affiliates": "0.57.12",
69
- "@happyvertical/smrt-agents": "0.57.12",
70
- "@happyvertical/smrt-analytics": "0.57.12",
71
- "@happyvertical/smrt-approvals": "0.57.12",
72
- "@happyvertical/smrt-comments": "0.57.12",
73
- "@happyvertical/smrt-content": "0.57.12",
74
- "@happyvertical/smrt-education": "0.57.12",
75
- "@happyvertical/smrt-events": "0.57.12",
76
- "@happyvertical/smrt-expenses": "0.57.12",
77
- "@happyvertical/smrt-facts": "0.57.12",
78
- "@happyvertical/smrt-features": "0.57.12",
79
- "@happyvertical/smrt-fields": "0.57.12",
80
- "@happyvertical/smrt-gnode": "0.57.12",
81
- "@happyvertical/smrt-human-resources": "0.57.12",
82
- "@happyvertical/smrt-images": "0.57.12",
83
- "@happyvertical/smrt-ingestion": "0.57.12",
84
- "@happyvertical/smrt-inventory": "0.57.12",
85
- "@happyvertical/smrt-jobs": "0.57.12",
86
- "@happyvertical/smrt-languages": "0.57.12",
87
- "@happyvertical/smrt-ledgers": "0.57.12",
88
- "@happyvertical/smrt-manufacturing": "0.57.12",
89
- "@happyvertical/smrt-marketing": "0.57.12",
90
- "@happyvertical/smrt-messages": "0.57.12",
91
- "@happyvertical/smrt-personas": "0.57.12",
92
- "@happyvertical/smrt-places": "0.57.12",
93
- "@happyvertical/smrt-playbooks": "0.57.12",
94
- "@happyvertical/smrt-preferences": "0.57.12",
95
- "@happyvertical/smrt-products": "0.57.12",
96
- "@happyvertical/smrt-profiles": "0.57.12",
97
- "@happyvertical/smrt-projects": "0.57.12",
98
- "@happyvertical/smrt-prompts": "0.57.12",
99
- "@happyvertical/smrt-properties": "0.57.12",
100
- "@happyvertical/smrt-sales": "0.57.12",
101
- "@happyvertical/smrt-secrets": "0.57.12",
102
- "@happyvertical/smrt-sites": "0.57.12",
103
- "@happyvertical/smrt-social": "0.57.12",
104
- "@happyvertical/smrt-subscriptions": "0.57.12",
105
- "@happyvertical/smrt-support": "0.57.12",
106
- "@happyvertical/smrt-tags": "0.57.12",
107
- "@happyvertical/smrt-tenancy": "0.57.12",
108
- "@happyvertical/smrt-timesheets": "0.57.12",
109
- "@happyvertical/smrt-users": "0.57.12",
110
- "@happyvertical/smrt-video": "0.57.12",
111
- "@happyvertical/smrt-voice": "0.57.12",
112
- "@happyvertical/smrt-webhooks": "0.57.12",
67
+ "@happyvertical/smrt-ads": "0.57.13",
68
+ "@happyvertical/smrt-affiliates": "0.57.13",
69
+ "@happyvertical/smrt-agents": "0.57.13",
70
+ "@happyvertical/smrt-analytics": "0.57.13",
71
+ "@happyvertical/smrt-approvals": "0.57.13",
72
+ "@happyvertical/smrt-comments": "0.57.13",
73
+ "@happyvertical/smrt-content": "0.57.13",
74
+ "@happyvertical/smrt-education": "0.57.13",
75
+ "@happyvertical/smrt-events": "0.57.13",
76
+ "@happyvertical/smrt-expenses": "0.57.13",
77
+ "@happyvertical/smrt-facts": "0.57.13",
78
+ "@happyvertical/smrt-features": "0.57.13",
79
+ "@happyvertical/smrt-fields": "0.57.13",
80
+ "@happyvertical/smrt-gnode": "0.57.13",
81
+ "@happyvertical/smrt-human-resources": "0.57.13",
82
+ "@happyvertical/smrt-images": "0.57.13",
83
+ "@happyvertical/smrt-ingestion": "0.57.13",
84
+ "@happyvertical/smrt-inventory": "0.57.13",
85
+ "@happyvertical/smrt-jobs": "0.57.13",
86
+ "@happyvertical/smrt-languages": "0.57.13",
87
+ "@happyvertical/smrt-ledgers": "0.57.13",
88
+ "@happyvertical/smrt-manufacturing": "0.57.13",
89
+ "@happyvertical/smrt-marketing": "0.57.13",
90
+ "@happyvertical/smrt-messages": "0.57.13",
91
+ "@happyvertical/smrt-personas": "0.57.13",
92
+ "@happyvertical/smrt-places": "0.57.13",
93
+ "@happyvertical/smrt-playbooks": "0.57.13",
94
+ "@happyvertical/smrt-preferences": "0.57.13",
95
+ "@happyvertical/smrt-products": "0.57.13",
96
+ "@happyvertical/smrt-profiles": "0.57.13",
97
+ "@happyvertical/smrt-projects": "0.57.13",
98
+ "@happyvertical/smrt-prompts": "0.57.13",
99
+ "@happyvertical/smrt-properties": "0.57.13",
100
+ "@happyvertical/smrt-sales": "0.57.13",
101
+ "@happyvertical/smrt-secrets": "0.57.13",
102
+ "@happyvertical/smrt-sites": "0.57.13",
103
+ "@happyvertical/smrt-social": "0.57.13",
104
+ "@happyvertical/smrt-subscriptions": "0.57.13",
105
+ "@happyvertical/smrt-support": "0.57.13",
106
+ "@happyvertical/smrt-tags": "0.57.13",
107
+ "@happyvertical/smrt-tenancy": "0.57.13",
108
+ "@happyvertical/smrt-timesheets": "0.57.13",
109
+ "@happyvertical/smrt-users": "0.57.13",
110
+ "@happyvertical/smrt-video": "0.57.13",
111
+ "@happyvertical/smrt-voice": "0.57.13",
112
+ "@happyvertical/smrt-webhooks": "0.57.13",
113
113
  "@sveltejs/adapter-static": "^3.0.10",
114
114
  "@sveltejs/kit": "2.70.3",
115
115
  "@sveltejs/package": "^3.0.0",
@@ -1 +0,0 @@
1
- @layer smrt.reset,smrt.structure;@layer smrt.theme{.settings.svelte-1adyoey{gap:var(--smrt-spacing-4);grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));align-items:end;display:grid}.field.svelte-1adyoey{gap:var(--smrt-spacing-1);display:grid}.percent.svelte-1adyoey{align-items:flex-end;gap:var(--smrt-spacing-2);display:flex}.percent.svelte-1adyoey .smrt-number{flex:1}.percent-sign.svelte-1adyoey{padding-bottom:var(--smrt-spacing-2);color:var(--smrt-color-on-surface-variant)}.switch.svelte-1adyoey small:where(.svelte-1adyoey),.meta.svelte-1adyoey{color:var(--smrt-color-on-surface-variant)}.tax-codes.svelte-1adyoey{gap:var(--smrt-spacing-2);margin-top:var(--smrt-spacing-4);display:grid}.tax-codes.svelte-1adyoey h3:where(.svelte-1adyoey),.tax-codes.svelte-1adyoey p:where(.svelte-1adyoey){margin:0}.tax-codes.svelte-1adyoey ul:where(.svelte-1adyoey){gap:var(--smrt-spacing-1) var(--smrt-spacing-4);grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));margin:0;padding:0;list-style:none;display:grid}.tax-codes.svelte-1adyoey li:where(.svelte-1adyoey){display:grid}.tax-codes.svelte-1adyoey .rates:where(.svelte-1adyoey){color:var(--smrt-color-on-surface-variant);font-size:.875rem}.cookbooks.svelte-mzas8k{gap:var(--smrt-spacing-4);display:grid}h2.svelte-mzas8k,h3.svelte-mzas8k,h4.svelte-mzas8k,p.svelte-mzas8k{margin:0}h3.svelte-mzas8k,h4.svelte-mzas8k{font:var(--smrt-typography-title-medium-font);letter-spacing:var(--smrt-typography-title-medium-tracking)}.meta.svelte-mzas8k,.summary.svelte-mzas8k{color:var(--smrt-color-on-surface-variant)}.grid.svelte-mzas8k{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));margin:0;padding:0;list-style:none;display:grid}.card.svelte-mzas8k{gap:var(--smrt-spacing-2);width:100%;height:100%;padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-lg,.75rem);background:var(--smrt-surface-panel);color:inherit;font:inherit;text-align:start;cursor:pointer;justify-items:start;display:grid;position:relative}.card.svelte-mzas8k:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.icon.svelte-mzas8k{color:var(--smrt-color-primary);flex:none}.heading.svelte-mzas8k{align-items:center;gap:var(--smrt-spacing-2);min-inline-size:0;padding-inline-end:4rem;display:flex}.name.svelte-mzas8k{font-weight:var(--smrt-typography-weight-semibold)}.badge.svelte-mzas8k{top:var(--smrt-spacing-3);right:var(--smrt-spacing-3);padding:0 var(--smrt-spacing-2);border-radius:var(--smrt-radius-full);background:var(--smrt-color-primary);color:var(--smrt-color-on-primary);font-size:.75rem;position:absolute}.preview.svelte-mzas8k{gap:var(--smrt-spacing-4);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-lg,.75rem);display:grid}.block.svelte-mzas8k{gap:var(--smrt-spacing-2);display:grid}.chips.svelte-mzas8k,.menu.svelte-mzas8k ul:where(.svelte-mzas8k){margin:0;padding:0;list-style:none}.chips.svelte-mzas8k{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.chips.svelte-mzas8k li:where(.svelte-mzas8k){padding:0 var(--smrt-spacing-3);border-radius:var(--smrt-radius-full);background:var(--smrt-color-surface-container)}.menu.svelte-mzas8k{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));display:grid}.menu.svelte-mzas8k ul:where(.svelte-mzas8k){gap:var(--smrt-spacing-1);margin-top:var(--smrt-spacing-1);display:grid}.actions.svelte-mzas8k{align-items:center;gap:var(--smrt-spacing-3);flex-wrap:wrap;display:flex}.back.svelte-mzas8k{justify-self:start;margin-inline-start:calc(-1 * var(--smrt-spacing-2))}.preview.svelte-mzas8k h2:where(.svelte-mzas8k):focus{outline:none}.preview.svelte-mzas8k h2:where(.svelte-mzas8k):focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}[data-smrt-view-transition] .swap.svelte-mzas8k{view-transition-name:planner-cookbooks}::view-transition-group(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}::view-transition-old(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}::view-transition-new(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}.export.svelte-17nkvtk{gap:var(--smrt-spacing-5);min-inline-size:0;display:grid}h2.svelte-17nkvtk,p.svelte-17nkvtk,dl.svelte-17nkvtk,dd.svelte-17nkvtk,pre.svelte-17nkvtk{margin:0}h2.svelte-17nkvtk{font:var(--smrt-typography-title-medium-font)}.block.svelte-17nkvtk{gap:var(--smrt-spacing-3);min-inline-size:0;display:grid}.meta.svelte-17nkvtk,.notice.svelte-17nkvtk,.quiet.svelte-17nkvtk{color:var(--smrt-color-on-surface-variant)}.notice.svelte-17nkvtk:empty{display:none}.summary.svelte-17nkvtk{gap:var(--smrt-spacing-2) var(--smrt-spacing-4);grid-template-columns:max-content minmax(0,1fr);align-items:baseline;display:grid}dt.svelte-17nkvtk{font-weight:var(--smrt-typography-weight-semibold);white-space:nowrap}.chips.svelte-17nkvtk{gap:var(--smrt-spacing-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.actions.svelte-17nkvtk{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.export.svelte-17nkvtk .prompt{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);white-space:pre-wrap;overflow-wrap:anywhere;resize:none;max-block-size:20rem;overflow:auto}code.svelte-17nkvtk{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);overflow-wrap:anywhere}.command.svelte-17nkvtk{align-items:center;gap:var(--smrt-spacing-2) var(--smrt-spacing-3);flex-wrap:wrap;display:flex}.command.svelte-17nkvtk code:where(.svelte-17nkvtk){min-inline-size:0;padding:var(--smrt-spacing-2) var(--smrt-spacing-3);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken);flex:16rem}.json.svelte-17nkvtk{max-block-size:20rem;padding:var(--smrt-spacing-3);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken);font-family:var(--smrt-font-family-mono,ui-monospace, monospace);font-size:var(--smrt-typography-body-small-size);white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto}.replace.svelte-17nkvtk{border-block-start:var(--smrt-hairline);padding-block-start:var(--smrt-spacing-4)}@media (width<=30rem){.summary.svelte-17nkvtk{grid-template-columns:minmax(0,1fr)}.actions.svelte-17nkvtk,.command.svelte-17nkvtk{flex-direction:column;align-items:stretch}.actions.svelte-17nkvtk>[data-smrt-component=Button],.command.svelte-17nkvtk>[data-smrt-component=Button]{inline-size:100%}}@media (forced-colors:active){.command.svelte-17nkvtk code:where(.svelte-17nkvtk),.json.svelte-17nkvtk{border-color:canvastext}}h3.svelte-1tvhds4,h4.svelte-1tvhds4,p.svelte-1tvhds4{margin:0}.card.svelte-1tvhds4{align-content:start;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);display:grid}.card.selected.svelte-1tvhds4{border-color:var(--smrt-color-primary)}.head.svelte-1tvhds4{justify-content:space-between;align-items:center;gap:var(--smrt-spacing-2);display:flex}h3.svelte-1tvhds4{font:var(--smrt-typography-title-medium-font);letter-spacing:var(--smrt-typography-title-medium-tracking)}h4.svelte-1tvhds4{color:var(--smrt-color-on-surface-variant);font:var(--smrt-typography-label-medium-font);letter-spacing:var(--smrt-typography-label-medium-tracking);font-weight:var(--smrt-typography-weight-semibold);text-transform:uppercase}.meta.svelte-1tvhds4{color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-body-small-size)}.plain.svelte-1tvhds4{gap:var(--smrt-spacing-1);font-size:var(--smrt-typography-body-medium-size);margin:0;padding:0;list-style:none;display:grid}.kind.svelte-1tvhds4{padding:0 var(--smrt-spacing-2);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-label-small-size);margin-inline-end:var(--smrt-spacing-1)}.reasons.svelte-1tvhds4{margin-block-end:var(--smrt-spacing-2)}.foot.svelte-1tvhds4{gap:var(--smrt-spacing-1);margin-top:var(--smrt-spacing-2);display:grid}code.svelte-1tvhds4{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);font-size:.85em}.where.svelte-1tvhds4{margin-inline-start:.35em}.summary.svelte-1tvhds4{font-size:var(--smrt-typography-body-medium-size)}@media (forced-colors:active){.card.selected.svelte-1tvhds4{border-color:highlight;outline:.125rem solid highlight}}.features.svelte-7kphei{gap:var(--smrt-spacing-3);display:grid}h2.svelte-7kphei,p.svelte-7kphei{margin:0}.meta.svelte-7kphei,.notice.svelte-7kphei,.empty.svelte-7kphei,.count.svelte-7kphei{color:var(--smrt-color-on-surface-variant)}.count.svelte-7kphei{font-size:var(--smrt-typography-body-medium-size);font-weight:400}.notice.svelte-7kphei:empty{display:none}.chips.svelte-7kphei{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.rows.svelte-7kphei{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);margin:0;padding:0;list-style:none;display:grid;overflow:hidden}.rows.svelte-7kphei li:where(.svelte-7kphei){align-items:center;gap:var(--smrt-spacing-3);padding:var(--smrt-spacing-3) var(--smrt-spacing-4);display:flex}.rows.svelte-7kphei li:where(.svelte-7kphei)+li:where(.svelte-7kphei){border-top:var(--smrt-hairline)}.rows.svelte-7kphei li.selected:where(.svelte-7kphei){background:color-mix(in srgb, currentColor calc(var(--smrt-state-selected) * 100%), transparent)}.includes.svelte-7kphei{color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-body-small-size)}.icon.svelte-7kphei{color:var(--smrt-color-on-surface-variant);display:inline-flex}.text.svelte-7kphei{flex:1;min-width:0;display:grid}.bar.svelte-7kphei{justify-content:space-between;align-items:center;gap:var(--smrt-spacing-3);display:flex}.name.svelte-7kphei{align-items:baseline;gap:var(--smrt-spacing-2);display:flex}.tag.svelte-7kphei{padding:0 var(--smrt-spacing-2);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-label-small-size)}.text.svelte-7kphei a:where(.svelte-7kphei){width:fit-content;color:var(--smrt-color-on-surface);font-weight:500}.text.svelte-7kphei .meta:where(.svelte-7kphei){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (forced-colors:active){.rows.svelte-7kphei li.selected:where(.svelte-7kphei){outline-offset:-.125rem;outline:.125rem solid highlight}}.features.svelte-q9yl1j{gap:var(--smrt-spacing-3);display:grid}h2.svelte-q9yl1j,p.svelte-q9yl1j{margin:0}section.svelte-q9yl1j{gap:var(--smrt-spacing-2);display:grid}.meta.svelte-q9yl1j,.count.svelte-q9yl1j{color:var(--smrt-color-on-surface-variant)}.count.svelte-q9yl1j{font-size:var(--smrt-typography-body-medium-size)}.notice.svelte-q9yl1j:empty{display:none}.chips.svelte-q9yl1j{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.cards.svelte-q9yl1j{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(19rem,1fr));margin:0;padding:0;list-style:none;display:grid}h2.svelte-1d5gge1,p.svelte-1d5gge1{margin:0}.meta.svelte-1d5gge1,.description.svelte-1d5gge1,.notice.svelte-1d5gge1{color:var(--smrt-color-on-surface-variant)}.notice.svelte-1d5gge1:empty{display:none}.cards.svelte-1d5gge1{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));margin:0;padding:0;list-style:none;display:grid}.cards.svelte-1d5gge1 li:where(.svelte-1d5gge1){align-content:start;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);display:grid}.cards.svelte-1d5gge1 li.selected:where(.svelte-1d5gge1){border-color:var(--smrt-color-primary)}.sub.svelte-1d5gge1{gap:var(--smrt-spacing-1);display:grid}@media (forced-colors:active){.cards.svelte-1d5gge1 li.selected:where(.svelte-1d5gge1){border-color:highlight;outline:.125rem solid highlight}}.pane.svelte-d580bl{gap:var(--smrt-spacing-4);display:grid}.meta.svelte-d580bl{color:var(--smrt-color-on-surface-variant);margin:0}.theme.svelte-18m8le4{gap:1.25rem;max-inline-size:72rem;display:grid}.cards.svelte-18m8le4{grid-template-columns:repeat(auto-fill,minmax(min(10rem,100%),1fr));gap:.75rem;display:grid}.choice.svelte-18m8le4{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-panel);min-block-size:8.5rem;color:var(--smrt-color-on-surface);text-align:start;cursor:pointer;transition:border-color var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease), background var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease), transform var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease);align-content:start;gap:.8rem;padding:.85rem;display:grid}.choice.svelte-18m8le4:hover{border-color:var(--smrt-color-primary);background:var(--smrt-surface-raised);transform:translateY(-2px)}.choice.selected.svelte-18m8le4{border:2px solid var(--smrt-color-primary);background:var(--smrt-color-primary-container);color:var(--smrt-color-on-primary-container);padding:calc(.85rem - 1px)}.choice.svelte-18m8le4:focus-visible,.advanced.svelte-18m8le4:focus-visible,.wheel.svelte-18m8le4:focus-within,select.svelte-18m8le4:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.choice-name.svelte-18m8le4{align-items:center;gap:.55rem;font-size:1rem;font-weight:700;line-height:1.2;display:inline-flex}.choice-icon.svelte-18m8le4{block-size:1.5rem;inline-size:1.5rem;color:var(--smrt-color-primary);flex:none;place-items:center;font-size:1.35rem;display:inline-grid}.preview.svelte-18m8le4{border:1px solid color-mix(in srgb, var(--smrt-planner-preview-ink) 20%, transparent);background:var(--smrt-planner-preview-bg);border-radius:.4rem;block-size:4.5rem;inline-size:100%;display:flex;overflow:hidden}.preview-sidebar.svelte-18m8le4{background:var(--smrt-planner-preview-primary);align-content:start;gap:.35rem;inline-size:23%;padding:.5rem .3rem;display:grid}.preview-sidebar.svelte-18m8le4 span:where(.svelte-18m8le4){background:var(--smrt-planner-preview-surface);opacity:.8;border-radius:1rem;block-size:.22rem}.preview-main.svelte-18m8le4{flex:1;align-content:start;gap:.4rem;padding:.6rem;display:grid}.preview-title.svelte-18m8le4{background:var(--smrt-planner-preview-ink);opacity:.7;border-radius:1rem;block-size:.32rem;inline-size:55%}.preview-body.svelte-18m8le4{background:var(--smrt-planner-preview-surface);border-radius:.2rem;gap:.25rem;padding:.35rem;display:grid}.preview-body.svelte-18m8le4 span:where(.svelte-18m8le4){background:var(--smrt-planner-preview-primary);opacity:.7;border-radius:1rem;block-size:.2rem}.preview-body.svelte-18m8le4 span:where(.svelte-18m8le4):last-child{opacity:.35;inline-size:70%}.scheme.svelte-18m8le4{min-block-size:8.5rem}.choice-hint.svelte-18m8le4{color:var(--smrt-color-on-surface-variant);font-size:.85rem}.brand.svelte-18m8le4,.shape.svelte-18m8le4{flex-wrap:wrap;align-items:end;gap:1rem;display:flex}.shape.svelte-18m8le4 .field:where(.svelte-18m8le4){min-inline-size:min(10rem,100%)}.field.svelte-18m8le4{gap:.4rem;display:grid}.pick.svelte-18m8le4{align-items:center;gap:.65rem;display:flex}.wheel.svelte-18m8le4{block-size:3rem;inline-size:3rem;box-shadow:0 0 0 1px var(--smrt-hairline-color);cursor:pointer;background:conic-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red);border-radius:50%;flex:none;place-items:center;display:inline-grid;position:relative}.wheel.svelte-18m8le4:after{content:"";background:var(--smrt-planner-picked-color);block-size:1.7rem;inline-size:1.7rem;box-shadow:var(--smrt-elevation-1);pointer-events:none;border:2px solid #fff;border-radius:50%}.wheel.svelte-18m8le4 input:where(.svelte-18m8le4){opacity:0;cursor:pointer;block-size:100%;inline-size:100%;position:absolute;inset:0}.font-field.svelte-18m8le4{min-inline-size:min(14rem,100%)}select.svelte-18m8le4{border:var(--smrt-control-border);border-radius:var(--smrt-radius-medium,.5rem);background:var(--smrt-surface-control);min-block-size:3rem;color:var(--smrt-color-on-surface);font:inherit;cursor:pointer;padding:.6rem 2rem .6rem .8rem}.error.svelte-18m8le4{color:var(--smrt-color-error);margin:0}.advanced.svelte-18m8le4{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-panel);color:var(--smrt-color-on-surface);align-items:center;gap:.8rem;padding:1rem;text-decoration:none;display:flex}.advanced.svelte-18m8le4:hover{border-color:var(--smrt-color-primary)}.advanced-icon.svelte-18m8le4{background:var(--smrt-color-primary-container);block-size:2.8rem;inline-size:2.8rem;color:var(--smrt-color-on-primary-container);border-radius:.65rem;flex:none;place-items:center;font:700 1rem ui-monospace,monospace;display:grid}.advanced.svelte-18m8le4 strong:where(.svelte-18m8le4),.advanced.svelte-18m8le4 small:where(.svelte-18m8le4){display:block}.advanced.svelte-18m8le4 small:where(.svelte-18m8le4){color:var(--smrt-color-on-surface-variant);margin-top:.15rem}.arrow.svelte-18m8le4{margin-inline-start:auto;font-size:1.3rem}@media (forced-colors:active){.choice.selected.svelte-18m8le4{outline-offset:.125rem;border-color:highlight;outline:.125rem solid highlight}.preview.svelte-18m8le4,.wheel.svelte-18m8le4{forced-color-adjust:none}}.planner.svelte-zuxcuo .tab-panel{padding-top:var(--smrt-spacing-4)}[data-smrt-view-transition] .planner.svelte-zuxcuo .tabs-nav,[data-smrt-view-transition] .planner.svelte-zuxcuo .tabs-links{view-transition-name:planner-tabs}.planner.svelte-zuxcuo .smrt-tabs__nav{scroll-snap-type:x proximity;overscroll-behavior-x:contain}.planner.svelte-zuxcuo .smrt-tabs__tab-button{scroll-snap-align:start}@property --smrt-planner-controls-tabs-fade{syntax:"<length>";inherits:false;initial-value:0}@supports (animation-timeline:scroll()){.planner.svelte-zuxcuo .smrt-tabs__nav{-webkit-mask-image:linear-gradient(to right, black calc(100% - var(--smrt-planner-controls-tabs-fade)), transparent);mask-image:linear-gradient(to right, black calc(100% - var(--smrt-planner-controls-tabs-fade)), transparent);animation:linear both svelte-zuxcuo-planner-tabs-fade;animation-timeline:scroll(self inline)}@keyframes svelte-zuxcuo-planner-tabs-fade{0%{--smrt-planner-controls-tabs-fade:3rem}to{--smrt-planner-controls-tabs-fade:0rem}}}.pane.svelte-zuxcuo{gap:var(--smrt-spacing-3);display:grid}.pane[hidden].svelte-zuxcuo{display:none}.meta.svelte-zuxcuo{color:var(--smrt-color-on-surface-variant);margin:0}main.svelte-1uha8ag{width:min(100%,72rem);padding:var(--smrt-spacing-6);margin-inline:auto}.first-run.svelte-1uha8ag{gap:var(--smrt-spacing-4);display:grid}.first-run.svelte-1uha8ag h1:where(.svelte-1uha8ag),.first-run.svelte-1uha8ag p:where(.svelte-1uha8ag){margin:0}.actions.svelte-1uha8ag{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}}