@happyvertical/smrt-planner 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. package/README.md +81 -8
  2. package/app/404.html +42 -49
  3. package/app/_app/immutable/assets/0.BvXq1Svw.css +1 -0
  4. package/app/_app/immutable/assets/10.CdYxvH4G.css +1 -0
  5. package/app/_app/immutable/assets/11.nOT5Z4Fv.css +1 -0
  6. package/app/_app/immutable/assets/12.F7A7zP4J.css +1 -0
  7. package/app/_app/immutable/assets/13.JoySu8W5.css +1 -0
  8. package/app/_app/immutable/assets/14.nsp62-4b.css +1 -0
  9. package/app/_app/immutable/assets/2.CbPiqdz5.css +1 -0
  10. package/app/_app/immutable/assets/3.D518dbB5.css +1 -0
  11. package/app/_app/immutable/assets/4.B3vt1gMJ.css +1 -0
  12. package/app/_app/immutable/assets/AiSetup.4fXjMpTZ.css +1 -0
  13. package/app/_app/immutable/assets/AppShell.DKPbJFmw.css +1 -0
  14. package/app/_app/immutable/assets/ConnectTools.DTleL8YA.css +1 -0
  15. package/app/_app/immutable/assets/FieldMapForm.C8SZ3t4N.css +1 -0
  16. package/app/_app/immutable/assets/ModelPage.DzDhJQz3.css +1 -0
  17. package/app/_app/immutable/assets/SectionActions.BE1CPmxk.css +1 -0
  18. package/app/_app/immutable/assets/SectionIcons.BGFcFuOf.css +1 -0
  19. package/app/_app/immutable/assets/SegmentedControl.T_hJQXHk.css +1 -0
  20. package/app/_app/immutable/assets/app.BS7nbUi0.css +1 -0
  21. package/app/_app/immutable/assets/currency-metadata.CJIy0Dzm.css +1 -0
  22. package/app/_app/immutable/assets/data.DQcbQG_b.css +1 -0
  23. package/app/_app/immutable/assets/feedback.FjY5wqsa.css +1 -0
  24. package/app/_app/immutable/assets/forms.DA06CFM9.css +1 -0
  25. package/app/_app/immutable/assets/labels.Dny6zd23.css +1 -0
  26. package/app/_app/immutable/assets/percent.CBivq97O.css +1 -0
  27. package/app/_app/immutable/assets/state.C9Put0ur.css +1 -0
  28. package/app/_app/immutable/assets/webmcp-ui-context.CC5pQLNE.css +1 -0
  29. package/app/_app/immutable/assets/workspace.Dtoe2fRU.css +1 -0
  30. package/app/_app/immutable/chunks/3ouNUakh.js +1 -0
  31. package/app/_app/immutable/chunks/B3FAegW4.js +4 -0
  32. package/app/_app/immutable/chunks/B8iReL-r.js +1 -0
  33. package/app/_app/immutable/chunks/BCmdRE3j.js +4 -0
  34. package/app/_app/immutable/chunks/BV3NwM01.js +1 -0
  35. package/app/_app/immutable/chunks/BVicq_6F.js +1 -0
  36. package/app/_app/immutable/chunks/Ba1g71Sq.js +1 -0
  37. package/app/_app/immutable/chunks/BdjvgMW6.js +1 -0
  38. package/app/_app/immutable/chunks/BiO_bqNH.js +2 -0
  39. package/app/_app/immutable/chunks/{DyGfbRG-.js → BrorvU4B.js} +1 -1
  40. package/app/_app/immutable/chunks/By-QJdbA.js +980 -0
  41. package/app/_app/immutable/chunks/{CyUMm_Wp.js → BzITuwgY.js} +1 -1
  42. package/app/_app/immutable/chunks/BzMfoxBk.js +1 -0
  43. package/app/_app/immutable/chunks/C-AoRalq.js +1 -0
  44. package/app/_app/immutable/chunks/CGKL_Nlh.js +1 -0
  45. package/app/_app/immutable/chunks/CNj-_B0j.js +1 -0
  46. package/app/_app/immutable/chunks/CU8cbxOZ.js +1 -0
  47. package/app/_app/immutable/chunks/CZGhPAoL.js +2 -0
  48. package/app/_app/immutable/chunks/CaEdOwVf.js +1 -0
  49. package/app/_app/immutable/chunks/Cas1hq-y.js +1 -0
  50. package/app/_app/immutable/chunks/CfOMUCNN.js +1 -0
  51. package/app/_app/immutable/chunks/Cm0VMWZu.js +1 -0
  52. package/app/_app/immutable/chunks/CsmXMAyE.js +1 -0
  53. package/app/_app/immutable/chunks/{BWPhGFHl.js → D0FW0z6R.js} +1 -1
  54. package/app/_app/immutable/chunks/D3nyL-ZK.js +1 -0
  55. package/app/_app/immutable/chunks/DEe2Vsu9.js +1 -0
  56. package/app/_app/immutable/chunks/DTs3DOB0.js +10 -0
  57. package/app/_app/immutable/chunks/Dm6R8q7G.js +1 -0
  58. package/app/_app/immutable/chunks/Dreozana.js +1 -0
  59. package/app/_app/immutable/chunks/Dx8H44Wq.js +2 -0
  60. package/app/_app/immutable/chunks/DxR35SQx.js +24 -0
  61. package/app/_app/immutable/chunks/EcFojPiU.js +11 -0
  62. package/app/_app/immutable/chunks/JBS2nHGN.js +1 -0
  63. package/app/_app/immutable/chunks/TjbilXEg.js +1 -0
  64. package/app/_app/immutable/chunks/ZLqixH7j.js +9 -0
  65. package/app/_app/immutable/chunks/auwiz8v4.js +1 -0
  66. package/app/_app/immutable/chunks/dbZ3U29n.js +1 -0
  67. package/app/_app/immutable/chunks/{D333l2GL.js → gHjidpzw.js} +2 -2
  68. package/app/_app/immutable/chunks/vNEnXNLV.js +3 -0
  69. package/app/_app/immutable/entry/app.vuScBcN4.js +2 -0
  70. package/app/_app/immutable/entry/start.C_vMied2.js +1 -0
  71. package/app/_app/immutable/nodes/0.BeNJfVow.js +9 -0
  72. package/app/_app/immutable/nodes/1.huiLmf4w.js +1 -0
  73. package/app/_app/immutable/nodes/10.B3buyRS-.js +3 -0
  74. package/app/_app/immutable/nodes/11.FNeDQehr.js +1 -0
  75. package/app/_app/immutable/nodes/12.umrKgKLQ.js +4 -0
  76. package/app/_app/immutable/nodes/13.DFr7i0IY.js +1 -0
  77. package/app/_app/immutable/nodes/14.BNgJ8cEq.js +1 -0
  78. package/app/_app/immutable/nodes/2.B3v0JtfB.js +24 -0
  79. package/app/_app/immutable/nodes/3.FLW3AkwU.js +1 -0
  80. package/app/_app/immutable/nodes/4.50B7EkB9.js +1 -0
  81. package/app/_app/immutable/nodes/5.Din7W_Et.js +1 -0
  82. package/app/_app/immutable/nodes/6.7dOUE7nr.js +1 -0
  83. package/app/_app/immutable/nodes/7.C4XsW0qI.js +1 -0
  84. package/app/_app/immutable/nodes/8.D_MREd8V.js +1 -0
  85. package/app/_app/immutable/nodes/9.cn87hhI-.js +1 -0
  86. package/app/_app/version.json +1 -1
  87. package/app/advanced-styles/index.html +84 -0
  88. package/app/ai/index.html +60 -52
  89. package/app/blueprint/index.html +46 -53
  90. package/app/cookbook/index.html +46 -53
  91. package/app/index.html +92 -64
  92. package/app/m/ads/AdDeliveryTier/index.html +52 -59
  93. package/app/m/ads/AdEvent/index.html +52 -59
  94. package/app/m/ads/AdFormat/index.html +52 -59
  95. package/app/m/ads/AdGroup/index.html +52 -59
  96. package/app/m/ads/AdVariation/index.html +52 -59
  97. package/app/m/analytics/AnalyticsDataStream/index.html +52 -59
  98. package/app/m/analytics/AnalyticsEvent/index.html +52 -59
  99. package/app/m/analytics/AnalyticsProperty/index.html +52 -59
  100. package/app/m/analytics/AnalyticsReport/index.html +52 -59
  101. package/app/m/approvals/ApprovalEvent/index.html +52 -59
  102. package/app/m/approvals/ApprovalPolicy/index.html +52 -59
  103. package/app/m/approvals/ApprovalRequest/index.html +52 -59
  104. package/app/m/assets/Asset/attachments/index.html +91 -0
  105. package/app/m/assets/Asset/index.html +52 -59
  106. package/app/m/assets/AssetAssociation/index.html +53 -60
  107. package/app/m/assets/AssetMetafield/index.html +52 -59
  108. package/app/m/assets/AssetStatus/index.html +52 -59
  109. package/app/m/assets/AssetType/index.html +52 -59
  110. package/app/m/assets/Folder/index.html +52 -59
  111. package/app/m/chat/AgentSession/index.html +52 -59
  112. package/app/m/chat/ChatMessage/index.html +53 -60
  113. package/app/m/chat/ChatParticipant/index.html +53 -60
  114. package/app/m/chat/ChatReaction/index.html +52 -59
  115. package/app/m/chat/ChatRoom/index.html +52 -59
  116. package/app/m/chat/ChatThread/index.html +53 -60
  117. package/app/m/chat/VoiceGatewayTurn/index.html +52 -59
  118. package/app/m/chat/VoiceSession/index.html +52 -59
  119. package/app/m/commerce/Agreement/index.html +52 -59
  120. package/app/m/commerce/Cart/index.html +52 -59
  121. package/app/m/commerce/Contract/index.html +52 -59
  122. package/app/m/commerce/ContractLineItem/index.html +53 -60
  123. package/app/m/commerce/Customer/index.html +52 -59
  124. package/app/m/commerce/DocumentTax/index.html +89 -0
  125. package/app/m/commerce/Estimate/index.html +52 -59
  126. package/app/m/commerce/Fulfillment/index.html +52 -59
  127. package/app/m/commerce/FulfillmentLineItem/index.html +53 -60
  128. package/app/m/commerce/Invoice/index.html +52 -59
  129. package/app/m/commerce/InvoiceLineItem/index.html +53 -60
  130. package/app/m/commerce/Lease/index.html +52 -59
  131. package/app/m/commerce/LicenseSale/index.html +52 -59
  132. package/app/m/commerce/Order/index.html +52 -59
  133. package/app/m/commerce/Payment/index.html +52 -59
  134. package/app/m/commerce/PaymentAllocation/index.html +53 -60
  135. package/app/m/commerce/PaymentInstrument/index.html +52 -59
  136. package/app/m/commerce/PaymentIntent/index.html +52 -59
  137. package/app/m/commerce/Payout/index.html +52 -59
  138. package/app/m/commerce/ProductionOrder/index.html +52 -59
  139. package/app/m/commerce/PurchaseContract/index.html +89 -0
  140. package/app/m/commerce/PurchaseOrder/index.html +52 -59
  141. package/app/m/commerce/SalesContract/index.html +89 -0
  142. package/app/m/commerce/SupplierQuote/index.html +89 -0
  143. package/app/m/commerce/TaxCode/index.html +89 -0
  144. package/app/m/commerce/TaxComponent/index.html +89 -0
  145. package/app/m/commerce/TaxSettings/index.html +89 -0
  146. package/app/m/commerce/TaxSummaryReport/index.html +89 -0
  147. package/app/m/commerce/Vendor/index.html +52 -59
  148. package/app/m/commerce/WholesaleOrder/index.html +52 -59
  149. package/app/m/content/Content/index.html +52 -59
  150. package/app/m/content/ContentContribution/index.html +52 -59
  151. package/app/m/content/ContentContributionAttachment/index.html +52 -59
  152. package/app/m/content/ContentContributionRevision/index.html +52 -59
  153. package/app/m/content/ContentContributionType/index.html +52 -59
  154. package/app/m/content/ContentContributor/index.html +52 -59
  155. package/app/m/content/ContentCorrection/index.html +52 -59
  156. package/app/m/content/ContentFeedSource/index.html +52 -59
  157. package/app/m/content/ContentGovernanceAssignment/index.html +52 -59
  158. package/app/m/content/ContentGovernancePolicy/index.html +52 -59
  159. package/app/m/content/ContentGovernanceProfile/index.html +52 -59
  160. package/app/m/content/ContentReference/index.html +52 -59
  161. package/app/m/content/ContentReview/index.html +52 -59
  162. package/app/m/content/ContentVersion/index.html +52 -59
  163. package/app/m/events/Event/index.html +52 -59
  164. package/app/m/events/EventParticipant/index.html +53 -60
  165. package/app/m/events/EventSeries/index.html +52 -59
  166. package/app/m/events/EventType/index.html +52 -59
  167. package/app/m/expenses/Expense/index.html +89 -0
  168. package/app/m/facts/Fact/index.html +52 -59
  169. package/app/m/facts/FactContent/index.html +52 -59
  170. package/app/m/facts/FactEvidence/index.html +52 -59
  171. package/app/m/facts/FactSource/index.html +52 -59
  172. package/app/m/facts/FactSubject/index.html +52 -59
  173. package/app/m/facts/FactTag/index.html +52 -59
  174. package/app/m/fields/FieldPolicy/index.html +52 -59
  175. package/app/m/fields/FieldPolicySuggestion/index.html +52 -59
  176. package/app/m/fields/FieldUsageCounter/index.html +52 -59
  177. package/app/m/images/Image/index.html +52 -59
  178. package/app/m/inventory/InventoryLocation/index.html +52 -59
  179. package/app/m/inventory/StockLevel/index.html +52 -59
  180. package/app/m/inventory/StockMovement/index.html +52 -59
  181. package/app/m/ledgers/Account/index.html +52 -59
  182. package/app/m/ledgers/Journal/index.html +52 -59
  183. package/app/m/ledgers/JournalEntry/index.html +53 -60
  184. package/app/m/manufacturing/Assembly/index.html +52 -59
  185. package/app/m/manufacturing/BillOfMaterials/index.html +52 -59
  186. package/app/m/manufacturing/BomLine/index.html +52 -59
  187. package/app/m/manufacturing/Operation/index.html +52 -59
  188. package/app/m/manufacturing/ProductionRun/index.html +52 -59
  189. package/app/m/manufacturing/ProductionRunCompletion/index.html +52 -59
  190. package/app/m/manufacturing/RoutingStep/index.html +52 -59
  191. package/app/m/marketing/Campaign/index.html +52 -59
  192. package/app/m/marketing/CampaignChannel/index.html +52 -59
  193. package/app/m/marketing/CampaignMetricSnapshot/index.html +52 -59
  194. package/app/m/messages/Account/index.html +52 -59
  195. package/app/m/messages/Attachment/index.html +52 -59
  196. package/app/m/messages/Blacklist/index.html +52 -59
  197. package/app/m/messages/Email/failed-sends/index.html +54 -59
  198. package/app/m/messages/Email/index.html +52 -59
  199. package/app/m/messages/Email/mailbox/index.html +54 -59
  200. package/app/m/messages/EmailAccount/index.html +52 -59
  201. package/app/m/messages/EmailAttachment/index.html +89 -0
  202. package/app/m/messages/EmailFolder/index.html +52 -59
  203. package/app/m/messages/Message/index.html +52 -59
  204. package/app/m/messages/MessagingEndpoint/index.html +52 -59
  205. package/app/m/messages/PersonaMessageRoute/index.html +52 -59
  206. package/app/m/messages/SlackAccount/index.html +52 -59
  207. package/app/m/messages/SlackMessage/index.html +52 -59
  208. package/app/m/messages/TelegramAccount/index.html +52 -59
  209. package/app/m/messages/Tweet/index.html +52 -59
  210. package/app/m/messages/TwitterAccount/index.html +52 -59
  211. package/app/m/messages/Whitelist/index.html +52 -59
  212. package/app/m/messages/ZulipAccount/index.html +52 -59
  213. package/app/m/places/Place/index.html +52 -59
  214. package/app/m/places/PlaceType/index.html +52 -59
  215. package/app/m/products/Category/index.html +52 -59
  216. package/app/m/products/Material/index.html +52 -59
  217. package/app/m/products/Product/index.html +52 -59
  218. package/app/m/products/Product/ingredients/index.html +54 -59
  219. package/app/m/products/ProductVariant/index.html +53 -60
  220. package/app/m/products/Sku/index.html +53 -60
  221. package/app/m/profiles/ApiKey/index.html +52 -59
  222. package/app/m/profiles/Bot/index.html +52 -59
  223. package/app/m/profiles/MagicLinkToken/index.html +52 -59
  224. package/app/m/profiles/NostrIdentity/index.html +52 -59
  225. package/app/m/profiles/OidcIdentity/index.html +52 -59
  226. package/app/m/profiles/Organization/index.html +52 -59
  227. package/app/m/profiles/Person/index.html +52 -59
  228. package/app/m/profiles/Profile/index.html +52 -59
  229. package/app/m/profiles/ProfileMetadata/index.html +52 -59
  230. package/app/m/profiles/ProfileMetafield/index.html +52 -59
  231. package/app/m/profiles/ProfileRelationship/index.html +52 -59
  232. package/app/m/profiles/ProfileRelationshipTerm/index.html +52 -59
  233. package/app/m/profiles/ProfileRelationshipType/index.html +52 -59
  234. package/app/m/profiles/ProfileType/index.html +52 -59
  235. package/app/m/projects/Comment/index.html +53 -60
  236. package/app/m/projects/Issue/index.html +52 -59
  237. package/app/m/projects/Label/index.html +52 -59
  238. package/app/m/projects/Project/index.html +52 -59
  239. package/app/m/projects/ProjectIntegration/index.html +52 -59
  240. package/app/m/projects/PullRequest/index.html +52 -59
  241. package/app/m/projects/Repository/index.html +52 -59
  242. package/app/m/properties/Property/index.html +52 -59
  243. package/app/m/properties/Zone/index.html +52 -59
  244. package/app/m/reports/RuntimeReport/index.html +52 -59
  245. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +52 -59
  246. package/app/m/reports/SmrtReportLock/index.html +52 -59
  247. package/app/m/reports/SmrtReportRefreshTask/index.html +52 -59
  248. package/app/m/reports/SmrtReportRun/index.html +52 -59
  249. package/app/m/reports/SmrtReportSchedule/index.html +52 -59
  250. package/app/m/reports/SmrtReportWatermark/index.html +52 -59
  251. package/app/m/sales/AttributionException/index.html +52 -59
  252. package/app/m/sales/AttributionPolicy/index.html +52 -59
  253. package/app/m/sales/Commission/index.html +52 -59
  254. package/app/m/sales/CommissionAdjustment/index.html +52 -59
  255. package/app/m/sales/CommissionPayout/index.html +52 -59
  256. package/app/m/sales/CommissionPlan/index.html +52 -59
  257. package/app/m/sales/Earner/index.html +52 -59
  258. package/app/m/sales/EarnerSourceAttribution/index.html +52 -59
  259. package/app/m/sales/EarningEvent/index.html +52 -59
  260. package/app/m/sales/ExecutedAgreement/index.html +52 -59
  261. package/app/m/sales/Lead/index.html +52 -59
  262. package/app/m/sales/Opportunity/index.html +52 -59
  263. package/app/m/sales/OpportunityConversion/index.html +52 -59
  264. package/app/m/sales/PipelineDefinition/index.html +52 -59
  265. package/app/m/sales/PipelineStage/index.html +53 -60
  266. package/app/m/sales/Referral/index.html +52 -59
  267. package/app/m/sales/ReferralAgreement/index.html +52 -59
  268. package/app/m/sales/ReferralLink/index.html +52 -59
  269. package/app/m/sales/ReferralProgram/index.html +52 -59
  270. package/app/m/sales/ReferralTermSnapshot/index.html +52 -59
  271. package/app/m/sales/ReferralTouch/index.html +52 -59
  272. package/app/m/sales/Referrer/index.html +52 -59
  273. package/app/m/sales/SalesActivity/index.html +52 -59
  274. package/app/m/sales/SalesRepresentative/index.html +52 -59
  275. package/app/m/sites/Site/index.html +52 -59
  276. package/app/m/sites/SiteAgentBinding/index.html +52 -59
  277. package/app/m/social/OAuthState/index.html +52 -59
  278. package/app/m/social/SocialAccount/index.html +52 -59
  279. package/app/m/social/SocialPost/index.html +52 -59
  280. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +52 -59
  281. package/app/m/subscriptions/BillingAdjustment/index.html +52 -59
  282. package/app/m/subscriptions/ClientCharge/index.html +52 -59
  283. package/app/m/subscriptions/CreditGrant/index.html +52 -59
  284. package/app/m/subscriptions/PricingRule/index.html +52 -59
  285. package/app/m/subscriptions/RetailCharge/index.html +52 -59
  286. package/app/m/subscriptions/SpendingPolicy/index.html +52 -59
  287. package/app/m/subscriptions/SubscriptionPlan/index.html +52 -59
  288. package/app/m/subscriptions/TenantSubscription/index.html +52 -59
  289. package/app/m/subscriptions/TenantUsageMetric/index.html +52 -59
  290. package/app/m/support/ServiceTimeEntry/index.html +52 -59
  291. package/app/m/support/SupportAiRun/index.html +52 -59
  292. package/app/m/support/SupportAvailability/index.html +52 -59
  293. package/app/m/support/SupportCase/index.html +52 -59
  294. package/app/m/support/SupportCaseEvent/index.html +52 -59
  295. package/app/m/support/SupportChannelBinding/index.html +52 -59
  296. package/app/m/support/SupportCharge/index.html +52 -59
  297. package/app/m/support/SupportCompensation/index.html +52 -59
  298. package/app/m/support/SupportCompensationPlan/index.html +52 -59
  299. package/app/m/support/SupportEscalation/index.html +52 -59
  300. package/app/m/support/SupportInteraction/index.html +52 -59
  301. package/app/m/support/SupportPlan/index.html +52 -59
  302. package/app/m/support/SupportPolicy/index.html +52 -59
  303. package/app/m/support/SupportQualification/index.html +52 -59
  304. package/app/m/support/SupportServiceTarget/index.html +52 -59
  305. package/app/m/support/SupportSpecialist/index.html +52 -59
  306. package/app/m/support/SupportWorkLink/index.html +52 -59
  307. package/app/m/tags/Tag/index.html +52 -59
  308. package/app/m/tags/TagAlias/index.html +52 -59
  309. package/app/m/timesheets/AttendanceBreak/index.html +52 -59
  310. package/app/m/timesheets/AttendancePunch/index.html +52 -59
  311. package/app/m/timesheets/AttendanceSegment/index.html +89 -0
  312. package/app/m/timesheets/ServiceChargeSnapshot/index.html +52 -59
  313. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +52 -59
  314. package/app/m/timesheets/ServiceTimeEntry/index.html +52 -59
  315. package/app/m/users/Group/index.html +52 -59
  316. package/app/m/users/GroupMember/index.html +52 -59
  317. package/app/m/users/GroupRole/index.html +52 -59
  318. package/app/m/users/Membership/index.html +53 -60
  319. package/app/m/users/MembershipOverride/index.html +52 -59
  320. package/app/m/users/Permission/index.html +52 -59
  321. package/app/m/users/Role/index.html +52 -59
  322. package/app/m/users/RolePermission/index.html +52 -59
  323. package/app/m/users/Session/index.html +52 -59
  324. package/app/m/users/Tenant/index.html +52 -59
  325. package/app/m/users/TenantIntegration/index.html +52 -59
  326. package/app/m/users/TenantPermissionOverride/index.html +52 -59
  327. package/app/m/users/User/index.html +52 -59
  328. package/app/m/video/Character/index.html +52 -59
  329. package/app/m/video/CharacterAsset/index.html +52 -59
  330. package/app/m/video/CompositeJob/index.html +52 -59
  331. package/app/m/video/Performer/index.html +52 -59
  332. package/app/m/video/PerformerAsset/index.html +52 -59
  333. package/app/m/video/Scene/index.html +52 -59
  334. package/app/m/video/SceneAsset/index.html +52 -59
  335. package/app/m/video/VideoComposition/index.html +52 -59
  336. package/app/m/video/VideoCompositionAsset/index.html +52 -59
  337. package/app/m/video/VideoSequence/index.html +52 -59
  338. package/app/m/video/VideoSequenceAsset/index.html +52 -59
  339. package/app/m/video/VideoShot/index.html +52 -59
  340. package/app/m/video/VideoShotAsset/index.html +52 -59
  341. package/app/m/video/VideoShotCharacter/index.html +52 -59
  342. package/app/m/video/VideoWorkflow/index.html +52 -59
  343. package/app/m/voice/VoiceOutput/index.html +52 -59
  344. package/app/m/voice/VoiceProfile/index.html +52 -59
  345. package/app/m/voice/VoiceSample/index.html +52 -59
  346. package/app/packages/ads/index.html +50 -57
  347. package/app/packages/analytics/index.html +50 -57
  348. package/app/packages/approvals/index.html +50 -57
  349. package/app/packages/assets/index.html +50 -57
  350. package/app/packages/chat/index.html +50 -57
  351. package/app/packages/comments/index.html +50 -57
  352. package/app/packages/commerce/index.html +50 -57
  353. package/app/packages/content/index.html +50 -57
  354. package/app/packages/events/index.html +50 -57
  355. package/app/packages/expenses/index.html +50 -57
  356. package/app/packages/facts/index.html +50 -57
  357. package/app/packages/fields/index.html +50 -57
  358. package/app/packages/human-resources/index.html +50 -57
  359. package/app/packages/images/index.html +50 -57
  360. package/app/packages/index.html +49 -55
  361. package/app/packages/ingestion/index.html +85 -0
  362. package/app/packages/inventory/index.html +50 -57
  363. package/app/packages/ledgers/index.html +50 -57
  364. package/app/packages/manufacturing/index.html +50 -57
  365. package/app/packages/marketing/index.html +50 -57
  366. package/app/packages/messages/index.html +50 -57
  367. package/app/packages/places/index.html +50 -57
  368. package/app/packages/preferences/index.html +50 -57
  369. package/app/packages/products/index.html +50 -57
  370. package/app/packages/profiles/index.html +50 -57
  371. package/app/packages/projects/index.html +50 -57
  372. package/app/packages/properties/index.html +50 -57
  373. package/app/packages/reports/index.html +50 -57
  374. package/app/packages/sales/index.html +50 -57
  375. package/app/packages/sites/index.html +50 -57
  376. package/app/packages/social/index.html +50 -57
  377. package/app/packages/subscriptions/index.html +50 -57
  378. package/app/packages/support/index.html +50 -57
  379. package/app/packages/tags/index.html +50 -57
  380. package/app/packages/timesheets/index.html +50 -57
  381. package/app/packages/users/index.html +50 -57
  382. package/app/packages/video/index.html +50 -57
  383. package/app/packages/voice/index.html +50 -57
  384. package/app/packages/webhooks/index.html +85 -0
  385. package/app/recipes/account-access/help/index.html +52 -57
  386. package/app/recipes/account-access/index.html +57 -59
  387. package/app/recipes/activity/help/index.html +52 -57
  388. package/app/recipes/activity/index.html +57 -59
  389. package/app/recipes/agreements/help/index.html +52 -57
  390. package/app/recipes/agreements/index.html +57 -59
  391. package/app/recipes/analytics.reports/help/index.html +52 -57
  392. package/app/recipes/analytics.reports/index.html +57 -59
  393. package/app/recipes/assets/help/index.html +52 -57
  394. package/app/recipes/assets/index.html +57 -59
  395. package/app/recipes/billing/help/index.html +52 -57
  396. package/app/recipes/billing/index.html +57 -59
  397. package/app/recipes/chat.assistant/help/index.html +52 -57
  398. package/app/recipes/chat.assistant/index.html +57 -59
  399. package/app/recipes/comments/help/index.html +52 -57
  400. package/app/recipes/comments/index.html +57 -59
  401. package/app/recipes/commerce.customers/help/index.html +52 -57
  402. package/app/recipes/commerce.customers/index.html +57 -59
  403. package/app/recipes/commerce.estimates/help/index.html +52 -57
  404. package/app/recipes/commerce.estimates/index.html +57 -59
  405. package/app/recipes/commerce.purchases/help/index.html +52 -57
  406. package/app/recipes/commerce.purchases/index.html +57 -59
  407. package/app/recipes/commerce.sales/help/index.html +52 -57
  408. package/app/recipes/commerce.sales/index.html +57 -59
  409. package/app/recipes/commerce.vendors/help/index.html +52 -57
  410. package/app/recipes/commerce.vendors/index.html +57 -59
  411. package/app/recipes/commerce.wholesale/help/index.html +52 -57
  412. package/app/recipes/commerce.wholesale/index.html +57 -59
  413. package/app/recipes/events.calendar/help/index.html +52 -57
  414. package/app/recipes/events.calendar/index.html +57 -59
  415. package/app/recipes/expenses.tracking/help/index.html +88 -0
  416. package/app/recipes/expenses.tracking/index.html +92 -0
  417. package/app/recipes/fields.form-customization/help/index.html +52 -57
  418. package/app/recipes/fields.form-customization/index.html +57 -59
  419. package/app/recipes/ingestion/help/index.html +88 -0
  420. package/app/recipes/ingestion/index.html +93 -0
  421. package/app/recipes/integrations/help/index.html +88 -0
  422. package/app/recipes/integrations/index.html +92 -0
  423. package/app/recipes/inventory.stock/help/index.html +52 -57
  424. package/app/recipes/inventory.stock/index.html +57 -59
  425. package/app/recipes/ledgers.bookkeeping/help/index.html +52 -57
  426. package/app/recipes/ledgers.bookkeeping/index.html +57 -59
  427. package/app/recipes/messages/help/index.html +52 -57
  428. package/app/recipes/messages/index.html +57 -59
  429. package/app/recipes/products/help/index.html +52 -57
  430. package/app/recipes/products/index.html +57 -59
  431. package/app/recipes/projects.tracker/help/index.html +52 -57
  432. package/app/recipes/projects.tracker/index.html +57 -59
  433. package/app/recipes/reports.materialized/help/index.html +52 -57
  434. package/app/recipes/reports.materialized/index.html +57 -59
  435. package/app/recipes/reports.runtime/help/index.html +88 -0
  436. package/app/recipes/reports.runtime/index.html +92 -0
  437. package/app/recipes/sales.pipeline/help/index.html +52 -57
  438. package/app/recipes/sales.pipeline/index.html +57 -59
  439. package/app/recipes/tags.taxonomy/help/index.html +52 -57
  440. package/app/recipes/tags.taxonomy/index.html +57 -59
  441. package/app/recipes/team-collaboration/help/index.html +52 -57
  442. package/app/recipes/team-collaboration/index.html +57 -59
  443. package/app/recipes/timesheets.time-entries/help/index.html +88 -0
  444. package/app/recipes/timesheets.time-entries/index.html +92 -0
  445. package/app/s/custom-accounts/index.html +82 -0
  446. package/app/s/custom-appointments/index.html +82 -0
  447. package/app/s/custom-billing/index.html +47 -54
  448. package/app/s/custom-buying/index.html +47 -54
  449. package/app/s/custom-checkout/index.html +82 -0
  450. package/app/s/custom-classes/index.html +47 -54
  451. package/app/s/custom-clients/index.html +82 -0
  452. package/app/s/custom-events/index.html +82 -0
  453. package/app/s/custom-fleet/index.html +82 -0
  454. package/app/s/custom-giving/index.html +82 -0
  455. package/app/s/custom-jobs/index.html +47 -54
  456. package/app/s/custom-kitchen/index.html +47 -54
  457. package/app/s/custom-material/index.html +47 -54
  458. package/app/s/custom-meetings/index.html +82 -0
  459. package/app/s/custom-members/index.html +47 -54
  460. package/app/s/custom-parts/index.html +47 -54
  461. package/app/s/custom-rentals/index.html +82 -0
  462. package/app/s/custom-roastery/index.html +82 -0
  463. package/app/s/custom-schedule/index.html +47 -54
  464. package/app/s/custom-shelf/index.html +82 -0
  465. package/app/s/custom-shop/index.html +47 -54
  466. package/app/s/custom-wholesale/index.html +47 -54
  467. package/app/s/custom-work/index.html +82 -0
  468. package/app/s/custom-yard/index.html +82 -0
  469. package/app/s/section-access-control/index.html +47 -54
  470. package/app/s/section-account-security/index.html +47 -54
  471. package/app/s/section-accounting/index.html +47 -54
  472. package/app/s/section-activity/index.html +47 -54
  473. package/app/s/section-agreements/index.html +47 -54
  474. package/app/s/section-analytics/index.html +47 -54
  475. package/app/s/section-assets/index.html +47 -54
  476. package/app/s/section-billing/index.html +47 -54
  477. package/app/s/section-calendar/index.html +47 -54
  478. package/app/s/section-catalog/index.html +47 -54
  479. package/app/s/section-chat.assistant/index.html +47 -54
  480. package/app/s/section-comments/index.html +47 -54
  481. package/app/s/section-fields.form-customization/index.html +47 -54
  482. package/app/s/section-ingestion/index.html +82 -0
  483. package/app/s/section-integrations/index.html +82 -0
  484. package/app/s/section-messages/index.html +47 -54
  485. package/app/s/section-more/index.html +47 -54
  486. package/app/s/section-operations/index.html +47 -54
  487. package/app/s/section-projects/index.html +47 -54
  488. package/app/s/section-purchasing/index.html +47 -54
  489. package/app/s/section-reports.materialized/index.html +47 -54
  490. package/app/s/section-reports.runtime/index.html +82 -0
  491. package/app/s/section-sales/index.html +47 -54
  492. package/app/s/section-taxonomy/index.html +47 -54
  493. package/app/s/section-team/index.html +47 -54
  494. package/app/s/section-work/index.html +82 -0
  495. package/dist/ai/state.svelte.d.ts +22 -4
  496. package/dist/ai/state.svelte.js +78 -15
  497. package/dist/ai/status.js +8 -0
  498. package/dist/assistant/change.d.ts +14 -3
  499. package/dist/assistant/change.js +26 -3
  500. package/dist/assistant/engine.js +5 -1
  501. package/dist/assistant/prompt.js +7 -3
  502. package/dist/assistant/session.svelte.d.ts +1 -0
  503. package/dist/assistant/session.svelte.js +22 -4
  504. package/dist/catalog/catalog.json +11244 -14189
  505. package/dist/catalog/generate/exclusions.d.ts +8 -0
  506. package/dist/catalog/generate/exclusions.js +29 -0
  507. package/dist/catalog/generate/extract.js +29 -8
  508. package/dist/catalog/types.d.ts +7 -0
  509. package/dist/components/AdvancedStyles.svelte +138 -0
  510. package/dist/components/AdvancedStyles.svelte.d.ts +6 -0
  511. package/dist/components/AiModelsPage.svelte +40 -0
  512. package/dist/components/AiModelsPage.svelte.d.ts +7 -0
  513. package/dist/components/AiSetup.svelte +40 -8
  514. package/dist/components/AiStatusIcons.svelte +8 -5
  515. package/dist/components/AppSettings.svelte +105 -1
  516. package/dist/components/BrowserAssistant.svelte +25 -22
  517. package/dist/components/BrowserAssistant.svelte.d.ts +2 -0
  518. package/dist/components/ChildRecords.svelte +61 -14
  519. package/dist/components/ChildRecords.svelte.d.ts +1 -0
  520. package/dist/components/ConnectTools.svelte +5 -2
  521. package/dist/components/CookbooksPanel.svelte +56 -33
  522. package/dist/components/CopyButton.svelte +65 -0
  523. package/dist/components/CopyButton.svelte.d.ts +24 -0
  524. package/dist/components/ExportPanel.svelte +292 -57
  525. package/dist/components/ExportPanel.svelte.d.ts +10 -1
  526. package/dist/components/FeatureCard.svelte +21 -10
  527. package/dist/components/FeaturesPanel.svelte +4 -1
  528. package/dist/components/FieldInput.svelte +6 -3
  529. package/dist/components/FieldMapForm.svelte +6 -10
  530. package/dist/components/FieldMapForm.svelte.d.ts +1 -0
  531. package/dist/components/FormWorkspace.svelte +80 -9
  532. package/dist/components/FormWorkspace.svelte.d.ts +1 -0
  533. package/dist/components/HeaderIconLink.svelte +86 -0
  534. package/dist/components/HeaderIconLink.svelte.d.ts +14 -0
  535. package/dist/components/HelpView.svelte +3 -0
  536. package/dist/components/ModelOptions.svelte +13 -2
  537. package/dist/components/ModelPage.svelte +33 -5
  538. package/dist/components/ModelPage.svelte.d.ts +4 -0
  539. package/dist/components/ModelWorkspace.svelte +148 -50
  540. package/dist/components/ModelWorkspace.svelte.d.ts +4 -0
  541. package/dist/components/PackagePage.svelte +96 -0
  542. package/dist/components/PackagePage.svelte.d.ts +9 -0
  543. package/dist/components/ProductMedia.svelte +95 -0
  544. package/dist/components/ProductMedia.svelte.d.ts +10 -0
  545. package/dist/components/RecipeCards.svelte +13 -1
  546. package/dist/components/RecipeHelp.svelte +3 -0
  547. package/dist/components/RecipeOptions.svelte +13 -1
  548. package/dist/components/RecordFeatures.svelte +22 -8
  549. package/dist/components/RecordView.svelte +354 -0
  550. package/dist/components/RecordView.svelte.d.ts +14 -0
  551. package/dist/components/RelationField.svelte +5 -2
  552. package/dist/components/SectionActions.svelte +8 -5
  553. package/dist/components/SectionHeading.svelte +63 -0
  554. package/dist/components/SectionHeading.svelte.d.ts +11 -0
  555. package/dist/components/SectionIcons.svelte +15 -3
  556. package/dist/components/SectionOverview.svelte +33 -3
  557. package/dist/components/SectionOverview.svelte.d.ts +4 -0
  558. package/dist/components/SectionPage.svelte +25 -165
  559. package/dist/components/SectionView.svelte +172 -0
  560. package/dist/components/SectionView.svelte.d.ts +18 -0
  561. package/dist/components/SettingsPanel.svelte +3 -9
  562. package/dist/components/SettingsPanel.svelte.d.ts +1 -5
  563. package/dist/components/ThemeBridge.svelte +80 -4
  564. package/dist/components/ThemeBridge.svelte.d.ts +5 -1
  565. package/dist/components/ThemeSection.svelte +208 -117
  566. package/dist/components/ThemeSection.svelte.d.ts +3 -7
  567. package/dist/components/VariantGridForm.svelte +9 -13
  568. package/dist/components/VariantGridForm.svelte.d.ts +1 -0
  569. package/dist/components/VoiceTyping.svelte +3 -0
  570. package/dist/cookbook/describe.d.ts +29 -0
  571. package/dist/cookbook/describe.js +164 -0
  572. package/dist/cookbook/file.d.ts +6 -0
  573. package/dist/cookbook/file.js +18 -4
  574. package/dist/cookbook/prompt.d.ts +49 -0
  575. package/dist/cookbook/prompt.js +100 -0
  576. package/dist/cookbook/store.svelte.d.ts +13 -0
  577. package/dist/cookbook/store.svelte.js +36 -8
  578. package/dist/core/app.d.ts +33 -8
  579. package/dist/core/app.js +112 -8
  580. package/dist/core/prompt.js +10 -1
  581. package/dist/core/reply.d.ts +6 -1
  582. package/dist/data/children.d.ts +50 -6
  583. package/dist/data/children.js +146 -16
  584. package/dist/data/derived.d.ts +37 -29
  585. package/dist/data/derived.js +49 -30
  586. package/dist/data/display.d.ts +21 -8
  587. package/dist/data/display.js +74 -11
  588. package/dist/data/fakes.d.ts +48 -9
  589. package/dist/data/fakes.js +146 -22
  590. package/dist/data/labels.d.ts +7 -2
  591. package/dist/data/labels.js +12 -2
  592. package/dist/data/list-sort.d.ts +8 -0
  593. package/dist/data/list-sort.js +45 -0
  594. package/dist/data/money.d.ts +227 -0
  595. package/dist/data/money.js +413 -0
  596. package/dist/data/packs.d.ts +13 -0
  597. package/dist/data/packs.js +1224 -0
  598. package/dist/data/planner-source.js +123 -3
  599. package/dist/data/source.d.ts +13 -2
  600. package/dist/data/source.js +274 -40
  601. package/dist/features/palette.d.ts +2 -0
  602. package/dist/features/palette.js +1 -1
  603. package/dist/forms/stock.d.ts +1 -1
  604. package/dist/forms/stock.js +3 -1
  605. package/dist/index.d.ts +8 -3
  606. package/dist/index.js +6 -1
  607. package/dist/inference/byo.svelte.d.ts +8 -4
  608. package/dist/inference/byo.svelte.js +36 -8
  609. package/dist/inference/config.d.ts +12 -5
  610. package/dist/inference/config.js +96 -40
  611. package/dist/inference/openai.js +5 -0
  612. package/dist/kitchen/LiveKitchenBridge.svelte +73 -0
  613. package/dist/kitchen/LiveKitchenBridge.svelte.d.ts +8 -0
  614. package/dist/kitchen/client.js +10 -4
  615. package/dist/kitchen/live.d.ts +7 -0
  616. package/dist/kitchen/live.js +51 -0
  617. package/dist/library/icons.js +34 -0
  618. package/dist/library/library.json +1546 -15
  619. package/dist/library/pending.json +5 -0
  620. package/dist/library/types.d.ts +4 -0
  621. package/dist/motion/tokens.d.ts +6 -0
  622. package/dist/motion/tokens.js +32 -0
  623. package/dist/motion/view-transition.d.ts +13 -0
  624. package/dist/motion/view-transition.js +17 -0
  625. package/dist/overviews/definitions.d.ts +41 -2
  626. package/dist/overviews/definitions.js +111 -4
  627. package/dist/overviews/models.d.ts +10 -0
  628. package/dist/overviews/models.js +19 -0
  629. package/dist/overviews/registry.d.ts +92 -5
  630. package/dist/overviews/registry.js +468 -58
  631. package/dist/overviews/validate.js +2 -2
  632. package/dist/planner/Planner.svelte +374 -166
  633. package/dist/planner/PlannerControls.svelte +255 -0
  634. package/dist/planner/PlannerControls.svelte.d.ts +17 -0
  635. package/dist/planner/PlannerLifecycle.svelte +73 -0
  636. package/dist/planner/PlannerLifecycle.svelte.d.ts +9 -0
  637. package/dist/planner/app.svelte.d.ts +12 -2
  638. package/dist/planner/app.svelte.js +13 -3
  639. package/dist/planner/assistant.js +21 -3
  640. package/dist/planner/commands/adapter.js +9 -2
  641. package/dist/planner/commands/types.d.ts +1 -1
  642. package/dist/planner/commands/types.js +1 -0
  643. package/dist/planner/header-icons.d.ts +12 -0
  644. package/dist/planner/header-icons.js +12 -0
  645. package/dist/planner/host/HostPlanner.svelte +70 -0
  646. package/dist/planner/host/HostPlanner.svelte.d.ts +17 -0
  647. package/dist/planner/host/session.svelte.d.ts +28 -0
  648. package/dist/planner/host/session.svelte.js +186 -0
  649. package/dist/planner/routes.d.ts +49 -0
  650. package/dist/planner/routes.js +64 -0
  651. package/dist/planner/shell.d.ts +40 -0
  652. package/dist/planner/shell.js +56 -0
  653. package/dist/planner/tab.svelte.d.ts +6 -3
  654. package/dist/planner/tab.svelte.js +11 -4
  655. package/dist/planner/title.d.ts +15 -0
  656. package/dist/planner/title.js +21 -0
  657. package/dist/planner/title.svelte.d.ts +6 -0
  658. package/dist/planner/title.svelte.js +11 -0
  659. package/dist/planner/types.d.ts +39 -7
  660. package/dist/products/media.d.ts +20 -0
  661. package/dist/products/media.js +65 -0
  662. package/dist/recipes/help/descriptions.json +1 -3
  663. package/dist/recipes/index.d.ts +2 -0
  664. package/dist/recipes/index.js +6 -0
  665. package/dist/recipes/plumbing.d.ts +35 -1
  666. package/dist/recipes/plumbing.js +74 -0
  667. package/dist/screens/definition.d.ts +35 -0
  668. package/dist/screens/definition.js +132 -0
  669. package/dist/screens/relations.d.ts +17 -0
  670. package/dist/screens/relations.js +98 -0
  671. package/dist/screens/totals.d.ts +37 -0
  672. package/dist/screens/totals.js +65 -0
  673. package/dist/sections/info.d.ts +1 -1
  674. package/dist/sections/info.js +2 -2
  675. package/dist/settings/app-settings.d.ts +17 -1
  676. package/dist/settings/app-settings.js +40 -3
  677. package/dist/smrt-version.d.ts +2 -0
  678. package/dist/smrt-version.js +4 -0
  679. package/dist/styles/planner-forms.css +53 -0
  680. package/dist/styles/planner-lists.css +43 -0
  681. package/dist/theme/css-highlight.d.ts +6 -0
  682. package/dist/theme/css-highlight.js +34 -0
  683. package/dist/theme/custom-css.svelte.d.ts +34 -0
  684. package/dist/theme/custom-css.svelte.js +246 -0
  685. package/dist/theme/runtime.js +25 -5
  686. package/dist/theme/theme.d.ts +26 -3
  687. package/dist/theme/theme.js +70 -2
  688. package/dist/upstream/overlay.d.ts +14 -5
  689. package/dist/upstream/overlay.js +20 -2
  690. package/package.json +13 -6
  691. package/app/_app/immutable/assets/0.B5zXkXe_.css +0 -1
  692. package/app/_app/immutable/assets/10.hpcnxvK1.css +0 -1
  693. package/app/_app/immutable/assets/11.D7zoXfVV.css +0 -1
  694. package/app/_app/immutable/assets/12.CPobm1ED.css +0 -1
  695. package/app/_app/immutable/assets/2.CyaWdRdI.css +0 -1
  696. package/app/_app/immutable/assets/3.BlPQOes8.css +0 -1
  697. package/app/_app/immutable/assets/8.2gQeKBp_.css +0 -1
  698. package/app/_app/immutable/assets/9.HOPT4xtg.css +0 -1
  699. package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +0 -1
  700. package/app/_app/immutable/assets/Button.DkP0qkG9.css +0 -1
  701. package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +0 -1
  702. package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +0 -1
  703. package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +0 -1
  704. package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +0 -1
  705. package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +0 -1
  706. package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +0 -1
  707. package/app/_app/immutable/assets/dist.C5nHBk_O.css +0 -1
  708. package/app/_app/immutable/assets/feedback.BVKAwFck.css +0 -1
  709. package/app/_app/immutable/assets/forms.BChZ2RWM.css +0 -1
  710. package/app/_app/immutable/assets/percent.LH0z-ozZ.css +0 -1
  711. package/app/_app/immutable/assets/store.CGDwHkkF.css +0 -1
  712. package/app/_app/immutable/assets/ui.B1A1Zl2p.css +0 -1
  713. package/app/_app/immutable/assets/workspace.BIMkuZDb.css +0 -1
  714. package/app/_app/immutable/chunks/1okeBSoq.js +0 -1
  715. package/app/_app/immutable/chunks/B32EWqI8.js +0 -9
  716. package/app/_app/immutable/chunks/B4Kevpe0.js +0 -1
  717. package/app/_app/immutable/chunks/BKwRT_1p.js +0 -1
  718. package/app/_app/immutable/chunks/BS4h9ES-.js +0 -1
  719. package/app/_app/immutable/chunks/BYde9M_U.js +0 -1
  720. package/app/_app/immutable/chunks/CMhpRMKg.js +0 -1
  721. package/app/_app/immutable/chunks/CPRHZZeW.js +0 -1
  722. package/app/_app/immutable/chunks/CRQ1Pmzr.js +0 -1
  723. package/app/_app/immutable/chunks/CV-2zt0K.js +0 -2
  724. package/app/_app/immutable/chunks/CWtfVMDz.js +0 -1
  725. package/app/_app/immutable/chunks/Chyo8rdT.js +0 -3
  726. package/app/_app/immutable/chunks/CmmuWmp6.js +0 -2
  727. package/app/_app/immutable/chunks/CrFNLK0f.js +0 -1
  728. package/app/_app/immutable/chunks/CygC84VT.js +0 -2
  729. package/app/_app/immutable/chunks/D0VgZnk1.js +0 -1
  730. package/app/_app/immutable/chunks/DD7gpKb2.js +0 -1
  731. package/app/_app/immutable/chunks/DJtH-lRi.js +0 -3
  732. package/app/_app/immutable/chunks/DNRgqfTx.js +0 -1
  733. package/app/_app/immutable/chunks/DVRKjN-E.js +0 -1
  734. package/app/_app/immutable/chunks/D_J_XtJy.js +0 -846
  735. package/app/_app/immutable/chunks/Dp9GVO-9.js +0 -1
  736. package/app/_app/immutable/chunks/DqcD-WtP.js +0 -1
  737. package/app/_app/immutable/chunks/OJ_lLTHH.js +0 -1
  738. package/app/_app/immutable/chunks/QukgIHDX.js +0 -1
  739. package/app/_app/immutable/chunks/WxSPP8QW.js +0 -4
  740. package/app/_app/immutable/chunks/leQCwW2d.js +0 -1
  741. package/app/_app/immutable/chunks/p6bgzXiY.js +0 -1
  742. package/app/_app/immutable/chunks/ufuM4XBq.js +0 -33
  743. package/app/_app/immutable/entry/app.D5JJain6.js +0 -2
  744. package/app/_app/immutable/entry/start.CH9DJLgI.js +0 -1
  745. package/app/_app/immutable/nodes/0.CL1MxOva.js +0 -10
  746. package/app/_app/immutable/nodes/1.BO731RRg.js +0 -1
  747. package/app/_app/immutable/nodes/10.1nQxyH9H.js +0 -4
  748. package/app/_app/immutable/nodes/11.Cw0JnQF3.js +0 -1
  749. package/app/_app/immutable/nodes/12.BmZyLHbM.js +0 -1
  750. package/app/_app/immutable/nodes/2.BEw046av.js +0 -17
  751. package/app/_app/immutable/nodes/3.DvwpTAQA.js +0 -1
  752. package/app/_app/immutable/nodes/4.qrT4bnmS.js +0 -1
  753. package/app/_app/immutable/nodes/5.DDLa2uhV.js +0 -1
  754. package/app/_app/immutable/nodes/6.DN0QTY6z.js +0 -1
  755. package/app/_app/immutable/nodes/7.C_8N82Wq.js +0 -1
  756. package/app/_app/immutable/nodes/8.D2Mszsua.js +0 -3
  757. package/app/_app/immutable/nodes/9.CLYsywul.js +0 -1
  758. package/app/m/content/Contents/index.html +0 -96
  759. package/app/m/preferences/UiPreferenceRecord/index.html +0 -96
  760. package/app/m/users/AccessRequest/index.html +0 -96
  761. package/app/m/users/ResourceGrant/index.html +0 -96
  762. package/app/m/users/UsersCliAuthRequest/index.html +0 -96
  763. package/app/m/users/UsersMagicLinkToken/index.html +0 -96
@@ -0,0 +1,82 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <link href="../../_app/immutable/entry/start.C_vMied2.js" rel="modulepreload">
7
+ <link href="../../_app/immutable/chunks/D3nyL-ZK.js" rel="modulepreload">
8
+ <link href="../../_app/immutable/chunks/vNEnXNLV.js" rel="modulepreload">
9
+ <link href="../../_app/immutable/chunks/Dd_uD5pT.js" rel="modulepreload">
10
+ <link href="../../_app/immutable/chunks/Dt-HX3Vu.js" rel="modulepreload">
11
+ <link href="../../_app/immutable/entry/app.vuScBcN4.js" rel="modulepreload">
12
+ <link href="../../_app/immutable/chunks/uBIymjUX.js" rel="modulepreload">
13
+ <link href="../../_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
14
+ <link href="../../_app/immutable/nodes/0.BeNJfVow.js" rel="modulepreload">
15
+ <link href="../../_app/immutable/chunks/Dreozana.js" rel="modulepreload">
16
+ <link href="../../_app/immutable/chunks/D0FW0z6R.js" rel="modulepreload">
17
+ <link href="../../_app/immutable/chunks/By-QJdbA.js" rel="modulepreload">
18
+ <link href="../../_app/immutable/chunks/C-AoRalq.js" rel="modulepreload">
19
+ <link href="../../_app/immutable/chunks/B3FAegW4.js" rel="modulepreload">
20
+ <link href="../../_app/immutable/chunks/BVicq_6F.js" rel="modulepreload">
21
+ <link href="../../_app/immutable/chunks/CNj-_B0j.js" rel="modulepreload">
22
+ <link href="../../_app/immutable/chunks/Cm0VMWZu.js" rel="modulepreload">
23
+ <link href="../../_app/immutable/chunks/BzMfoxBk.js" rel="modulepreload">
24
+ <link href="../../_app/immutable/chunks/CZGhPAoL.js" rel="modulepreload">
25
+ <link href="../../_app/immutable/chunks/BYcBM-fh.js" rel="modulepreload">
26
+ <link href="../../_app/immutable/chunks/TjbilXEg.js" rel="modulepreload">
27
+ <link href="../../_app/immutable/chunks/CGKL_Nlh.js" rel="modulepreload">
28
+ <link href="../../_app/immutable/chunks/dbZ3U29n.js" rel="modulepreload">
29
+ <link href="../../_app/immutable/chunks/BrorvU4B.js" rel="modulepreload">
30
+ <link href="../../_app/immutable/chunks/BV3NwM01.js" rel="modulepreload">
31
+ <link href="../../_app/immutable/chunks/Ba1g71Sq.js" rel="modulepreload">
32
+ <link href="../../_app/immutable/chunks/JBS2nHGN.js" rel="modulepreload">
33
+ <link href="../../_app/immutable/chunks/CsmXMAyE.js" rel="modulepreload">
34
+ <link href="../../_app/immutable/chunks/auwiz8v4.js" rel="modulepreload">
35
+ <link href="../../_app/immutable/chunks/CU8cbxOZ.js" rel="modulepreload">
36
+ <link href="../../_app/immutable/chunks/B8iReL-r.js" rel="modulepreload">
37
+ <link href="../../_app/immutable/chunks/BiO_bqNH.js" rel="modulepreload">
38
+ <link href="../../_app/immutable/chunks/CgAkqYsL.js" rel="modulepreload">
39
+ <link href="../../_app/immutable/nodes/14.BNgJ8cEq.js" rel="modulepreload">
40
+ <link href="../../_app/immutable/chunks/D71UrO5c.js" rel="modulepreload">
41
+ <!--e4gtxy--><!----><style id="smrt-cascade-layers">@layer smrt.reset, smrt.structure, smrt.theme;</style><!----><!----><!--sp05yg--><!----><title>Planner · smrt planner</title>
42
+ <link href="../../_app/immutable/assets/feedback.FjY5wqsa.css" rel="stylesheet">
43
+ <link href="../../_app/immutable/assets/currency-metadata.CJIy0Dzm.css" rel="stylesheet">
44
+ <link href="../../_app/immutable/assets/app.BS7nbUi0.css" rel="stylesheet">
45
+ <link href="../../_app/immutable/assets/SegmentedControl.T_hJQXHk.css" rel="stylesheet">
46
+ <link href="../../_app/immutable/assets/webmcp-ui-context.CC5pQLNE.css" rel="stylesheet">
47
+ <link href="../../_app/immutable/assets/data.DQcbQG_b.css" rel="stylesheet">
48
+ <link href="../../_app/immutable/assets/forms.DA06CFM9.css" rel="stylesheet">
49
+ <link href="../../_app/immutable/assets/AppShell.DKPbJFmw.css" rel="stylesheet">
50
+ <link href="../../_app/immutable/assets/workspace.Dtoe2fRU.css" rel="stylesheet">
51
+ <link href="../../_app/immutable/assets/SectionIcons.BGFcFuOf.css" rel="stylesheet">
52
+ <link href="../../_app/immutable/assets/SectionActions.BE1CPmxk.css" rel="stylesheet">
53
+ <link href="../../_app/immutable/assets/0.BvXq1Svw.css" rel="stylesheet">
54
+ <link href="../../_app/immutable/assets/14.nsp62-4b.css" rel="stylesheet">
55
+ </head>
56
+ <body data-sveltekit-preload-data="hover">
57
+ <div style="display: contents"><!--[--><!--[0--><!--[--><!--[-1--><!--]--> <div class="shell-host svelte-12qhfyh"><!--[-1--><!--]--> <!----> <div class="smrt-theme-root svelte-e4gtxy" data-theme="smrt" data-color-scheme="light" data-contrast="standard" data-smrt-component="ThemeProvider"><!--[-1--><div class="smrt-admin-shell svelte-t0v968" data-top-state="collapsed" data-left-state="expanded" data-right-state="collapsed" data-bottom-state="hidden" data-viewport="desktop" data-bottom-bar="none" style="--smrt-admin-shell-left-track: 16rem; --smrt-admin-shell-right-track: 0rem; --smrt-admin-shell-top-track: 3.5rem; --smrt-admin-shell-bottom-track: 0rem; --smrt-admin-shell-left-collapsed: 4.25rem; --smrt-admin-shell-right-collapsed: 0rem; --smrt-admin-shell-left-expanded: 16rem; --smrt-admin-shell-right-expanded: 20rem; --smrt-admin-shell-top-expanded: 18rem; --smrt-admin-shell-bottom-expanded: 18rem; --smrt-admin-shell-bottom-track: 0rem; --smrt-admin-shell-right-track: 0rem; --smrt-admin-shell-header-track: 0rem; --smrt-admin-shell-phone-bar-track: 0rem; --smrt-shell-floating-reserve-inline: 0px; --smrt-shell-floating-reserve-block: 0px; --smrt-shell-floating-reserve-main: 0px" data-smrt-component="AdminShell"><!--[-1--><!--]--> <!--[-1--><!--]--><!----> <!--[0--><header id="smrt-admin-shell-top-panel" class="smrt-admin-shell__edge smrt-admin-shell__edge--top svelte-t0v968" data-state="collapsed" data-presentation="overlay" style="--smrt-admin-shell-edge-columns: 0px minmax(0, 1fr) 0px;"><!--[-1--><!--]--> <div class="smrt-admin-shell__band smrt-admin-shell__band--top svelte-t0v968" style="--smrt-admin-shell-band-column: 2;"><!--[-1--><!--[-1--><!--]--> <!--[-1--><!--]--><!--]--> <!--[0--><div class="smrt-admin-shell__tenant-opener svelte-t0v968"><button type="button" class="smrt-admin-shell__chrome-button svelte-t0v968" data-smrt-part="trigger" aria-label="Menu" title="Menu" aria-expanded="true" aria-controls="smrt-admin-shell-left-panel"><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true" focusable="false"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"></path></svg></button><!----></div><!--]--> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--header-start svelte-t0v968" data-slot="header.start"><!--[--><!--[--><!--[1--><!--[0--><a class="smrt-admin-shell__brand smrt-admin-shell__brand-link svelte-rxwpms" href="../../" aria-label="Planner"><!--[-1--><!--[0--><img class="smrt-admin-shell__logo svelte-rxwpms" src="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20128%20128'%20role='img'%3e%3cdefs%3e%3clinearGradient%20id='flame'%20x1='26'%20y1='16'%20x2='101'%20y2='112'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23f05b2b'/%3e%3cstop%20offset='1'%20stop-color='%23c9381e'/%3e%3c/linearGradient%3e%3clinearGradient%20id='heat'%20x1='51'%20y1='49'%20x2='72'%20y2='111'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23ffd33d'/%3e%3cstop%20offset='1'%20stop-color='%23f2a817'/%3e%3c/linearGradient%3e%3c/defs%3e%3cpath%20fill='url(%23flame)'%20d='M64%205c-3%2018-15%2026-13%2043-9-5-13-13-13-22C20%2043%2015%2062%2022%2082c7%2022%2023%2037%2042%2041%2022-4%2039-21%2043-43%203-17-3-32-18-45%202%2011%200%2018-6%2025C84%2036%2075%2019%2064%205Z'%20/%3e%3cpath%20fill='url(%23heat)'%20d='M64%2045c-2%2015-14%2022-13%2038-5-4-8-9-9-15-7%2010-8%2020-4%2030%205%2012%2014%2020%2026%2023%2013-3%2023-12%2027-25%203-11%200-20-8-29%200%207-2%2012-6%2016%201-16-5-27-13-38Z'%20/%3e%3c!--%20The%20glasses%20render%20as%20two%20stacked%20stroke%20groups:%20a%20pale%20warm%20casing%20under%20a%20dark%20warm-charcoal%20stroke.%20The%20casing%20keeps%20the%20dark%20strokes%20legible%20where%20they%20leave%20the%20flame%20body%20(temple%20tips,%20lower%20rims)%20on%20dark%20backgrounds,%20and%20reads%20as%20a%20rim%20light%20against%20the%20flame%20on%20light%20ones.%20--%3e%3cg%20fill='none'%20stroke='%23ffe3ae'%20stroke-opacity='0.85'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20stroke-width='14'%20d='M7%2063c12-4%2027-5%2043-1M78%2062c16-4%2031-3%2043%201'/%3e%3crect%20x='12'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='14'/%3e%3crect%20x='70'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='14'/%3e%3cpath%20stroke-width='13'%20d='M57%2066c5-4%209-4%2014%200'/%3e%3c/g%3e%3cg%20fill='none'%20stroke='%2333221b'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20stroke-width='8'%20d='M7%2063c12-4%2027-5%2043-1M78%2062c16-4%2031-3%2043%201'/%3e%3crect%20x='12'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='8'/%3e%3crect%20x='70'%20y='58'%20width='46'%20height='35'%20rx='13'%20stroke-width='8'/%3e%3cpath%20stroke-width='7'%20d='M57%2066c5-4%209-4%2014%200'/%3e%3c/g%3e%3c/svg%3e" alt=""/><!--]--> <!--[-1--><div class="smrt-admin-shell__brand-text svelte-rxwpms wordmark"><strong class="svelte-rxwpms">Planner</strong><!--[-1--><!--]--></div><!--]--><!--]--><!----></a><!--]--><!----><!--]--><!--[1--><span class="smrt-layout-toggle svelte-veyjiz" data-testid="layout-edit-toggle"><button type="button" class="smrt-shell-icon-button svelte-14vbk8m" aria-label="Edit layout" title="Edit layout" aria-pressed="false" data-smrt-component="ShellIconButton"><!--[1--><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true" focusable="false"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a1 1 0 0 0 0-1.41l-2.34-2.34a1 1 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"></path></svg><!--]--></button><!----></span><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--header-center svelte-t0v968" data-slot="header.center"><!--[--><!--[--><!--[1--><!--[0--><!--[-1--><button type="button" aria-busy="false" class="smrt-button__root smrt-button__ghost smrt-button__sm smrt-command-palette-trigger svelte-mp1nah" aria-label="Search" aria-haspopup="dialog" aria-expanded="false" aria-keyshortcuts="Control+K Meta+K" data-smrt-component="Button"><!--[-1--><!--]--> <span class="smrt-button__content svelte-mp1nah" data-smrt-part="label"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <!--[0--><span class="smrt-command-palette-trigger__label svelte-uygfuo">Search</span> <!--[0--><kbd class="smrt-command-palette-trigger__hint svelte-uygfuo">Ctrl+K</kbd><!--]--><!--]--><!----></span></button><!--]--><!--]--> <!--$s1--><dialog class="modal modal--md modal--center svelte-lxsqox" aria-label="Search" data-smrt-component="Modal"><div class="modal__container svelte-lxsqox"><!--[-1--><!--]--> <div class="modal__body svelte-lxsqox" data-smrt-part="body"><!--[0--><div class="smrt-command-palette svelte-1rrp2qc"><div class="smrt-command-palette__field svelte-1rrp2qc"><svg class="smrt-command-palette__search-icon svelte-1rrp2qc" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input type="text" value="" placeholder="Search or run a command" aria-label="Search" class="smrt-input__root smrt-command-palette__input svelte-yn4wbg" role="combobox" aria-expanded="false" aria-controls="smrt-palette-list-s1" aria-autocomplete="list" autocomplete="off" autocapitalize="off" spellcheck="false" enterkeyhint="go" data-smrt-component="Input"/><!----></div> <div class="smrt-command-palette__list svelte-1rrp2qc" id="smrt-palette-list-s1" role="listbox" aria-label="Results" aria-busy="false"><!--[--><!--]--></div> <!--[0--><p class="smrt-command-palette__empty svelte-1rrp2qc"></p><!--]--> <div class="smrt-command-palette__hints svelte-1rrp2qc" aria-hidden="true"><span><kbd class="svelte-1rrp2qc">↑</kbd><kbd class="svelte-1rrp2qc">↓</kbd> to move</span> <span><kbd class="svelte-1rrp2qc">↵</kbd> to select</span> <span><kbd class="svelte-1rrp2qc">Esc</kbd> to close</span></div> <div class="smrt-command-palette__live svelte-1rrp2qc" role="status" aria-live="polite"></div></div><!----><!--]--></div> <!--[-1--><!--]--></div></dialog><!----><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----> <!--[-1--><!--]--> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--header-end svelte-t0v968" data-slot="header.end"><!--[--><!--[--><!--[1--><a class="header-link svelte-d0fjw8" href="../../" aria-label="Plan the app" title="Plan the app" style="--planner-transition-name: planner-customize;"><svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M4 9.5a3.5 3.5 0 1 1 7 0a3.5 3.5 0 1 1-7 0zM13 9.5a3.5 3.5 0 1 1 7 0a3.5 3.5 0 1 1-7 0zM8 7a4 4 0 1 1 8 0a4 4 0 1 1-8 0zM6 9.5h12V15H6zM7 16.5h10a1 1 0 0 1 1 1V19a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-1.5a1 1 0 0 1 1-1z"></path></svg><!----></a><!----><!--]--><!--[1--><a class="header-link svelte-d0fjw8" href="../../?tab=export" aria-label="Export the app" title="Export the app" style="--planner-transition-name: planner-export;"><svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M11 3h2v9l4-4 1.5 1.5L12 16l-6.5-6.5L7 8l4 4V3zM3 18h18v3H3v-3z"></path></svg><!----></a><!----><!--]--><!--[0--><!--[0--><div class="smrt-dock-toggles svelte-1bderho" data-testid="dock-toggles"><!--[--><!--[0--><a class="smrt-dock-toggles__button svelte-1bderho" href="../../ai/" data-dock-tool="assistant" aria-label="Set up the assistant" title="Set up the assistant"><!--[0--><svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 11.5a8.5 8.5 0 0 1-12.4 7.5L3 20.5l1.6-5A8.5 8.5 0 1 1 21 11.5z"></path></svg><!--]--><!----></a><!--]--><!--]--></div><!--]--><!--]--><!--[1--><span class="smrt-app-shell-color-scheme svelte-veyjiz"><div class="smrt-color-scheme-toggle switch svelte-nk1tr9" data-smrt-component="ColorSchemeToggle"><!--[0--><button class="smrt-color-scheme-toggle__switch svelte-nk1tr9" type="button" aria-label="Toggle color scheme" title="Light"><!--[-1--><span class="smrt-color-scheme-toggle__icon svelte-nk1tr9">☀️</span><!--]--> <!--[0--><span class="smrt-color-scheme-toggle__label svelte-nk1tr9">Light</span><!--]--></button><!--]--></div><!----></span><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----> <!--[-1--><!--]--> <!--[-1--><!--]--><!----></div> <!--[-1--><!--]--> <!--[-1--><!--]--></header><!--]--> <!--[-1--><!--]--><!----> <!--[0--><aside id="smrt-admin-shell-left-panel" class="smrt-admin-shell__edge smrt-admin-shell__edge--left svelte-t0v968" data-state="expanded" data-presentation="push" aria-label="Left sidebar"><!--[-1--><!--]--><!----> <div class="smrt-admin-shell__rail svelte-t0v968"><!--[-1--><!--]--><!----> <!--[-1--><!--]--> <!--[0--><div class="smrt-admin-shell__tenant-stack svelte-t0v968"><!--[-1--><!--]--><!----> <div class="smrt-admin-shell__tenant-content svelte-t0v968"><!--[0--><!--[-1--><!--]--><!----><!--]--></div> <!--[0--><!--[0--><!--[-1--><button type="button" aria-busy="false" class="smrt-button__root smrt-button__ghost smrt-button__sm smrt-admin-shell__edge-toggle smrt-admin-shell__edge-toggle--left svelte-mp1nah" aria-label="Collapse sidebar" title="Collapse sidebar" aria-expanded="true" aria-controls="smrt-admin-shell-left-panel" data-smrt-component="Button"><!--[-1--><!--]--> <span class="smrt-button__content svelte-mp1nah" data-smrt-part="label"><svg class="smrt-admin-shell__edge-toggle-chevron" viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true" focusable="false"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path></svg><!--[-1--><!--]--><!----><!----></span></button><!--]--><!--]--><!--]--> <!--[-1--><!--]--> <!--[1--><div class="smrt-admin-shell__slot smrt-admin-shell__slot--leftSidebar-footer svelte-t0v968" data-slot="leftSidebar.footer"><!--[--><!--[--><!--[1--><div class="ai-status svelte-nioco2" role="group" aria-label="AI models"><!--[--><a href="../../ai/" class="cap svelte-nioco2" data-state="available" aria-label="Think: not set up" title="Think: not set up"><svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M11 4.2C10.4 3 8.6 2.8 7.6 3.8C6.2 3.6 5 4.8 5.2 6.1C3.8 6.6 3.3 8.2 4.1 9.3C3 10.2 3 11.9 4 12.8C3.6 14.2 4.4 15.6 5.8 15.9C6.2 17.3 7.6 18.2 9 17.9C9.7 19.2 11 19.6 11 19.6ZM13 4.2 C13.6 3 15.4 2.8 16.4 3.8 C17.8 3.6 19 4.8 18.8 6.1 C20.2 6.6 20.7 8.2 19.9 9.3 C21 10.2 21 11.9 20 12.8 C20.4 14.2 19.6 15.6 18.2 15.9 C17.8 17.3 16.4 18.2 15 17.9 C14.3 19.2 13 19.6 13 19.6 ZM10.2 7.4C8.6 7.8 7.5 7 7 6.2L7.7 5.8C8.2 6.5 9 6.8 10 6.5ZM10.3 11C8.4 11.6 6.6 10.8 5.9 9.6L6.6 9.2C7.2 10.2 8.6 10.7 10.1 10.2ZM10.2 15C8.5 15.6 6.8 15 6 13.9L6.7 13.5C7.4 14.3 8.6 14.6 10 14.2ZM13.8 7.4 C15.4 7.8 16.5 7 17 6.2 L16.3 5.8 C15.8 6.5 15 6.8 14 6.5 ZM13.7 11 C15.6 11.6 17.4 10.8 18.1 9.6 L17.4 9.2 C16.8 10.2 15.4 10.7 13.9 10.2 ZM13.8 15 C15.5 15.6 17.2 15 18 13.9 L17.3 13.5 C16.6 14.3 15.4 14.6 14 14.2 Z"></path></svg><!----></a><a href="../../ai/" class="cap svelte-nioco2" data-state="available" aria-label="Hear: not set up" title="Hear: not set up"><svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M17 20c-.29 0-.56-.06-.76-.15-.71-.37-1.21-.88-1.71-2.38-.51-1.56-1.47-2.29-2.39-3-.79-.61-1.61-1.24-2.32-2.53C9.29 10.98 9 9.93 9 9c0-2.8 2.2-5 5-5s5 2.2 5 5h2c0-3.93-3.07-7-7-7S7 5.07 7 9c0 1.26.38 2.65 1.07 3.9.91 1.65 1.98 2.48 2.85 3.15.81.62 1.39 1.07 1.71 2.05.6 1.82 1.37 2.84 2.73 3.55.51.23 1.07.35 1.64.35 2.21 0 4-1.79 4-4h-2c0 1.1-.9 2-2 2zM7.64 2.64L6.22 1.22C4.23 3.21 3 5.96 3 9s1.23 5.79 3.22 7.78l1.41-1.41C6.01 13.74 5 11.49 5 9s1.01-4.74 2.64-6.36zM11.5 9c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5-2.5 1.12-2.5 2.5z"></path></svg><!----></a><a href="../../ai/" class="cap svelte-nioco2" data-state="available" aria-label="Speak: not switched on" title="Speak: not switched on"><svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-smrt-component="Icon" class="svelte-1vidiye"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"></path></svg><!----></a><!--]--></div><!----><!--]--><!--[1--><!--$s2--><div class="smrt-workspace-account-menu svelte-1xvol4w" title="You" data-smrt-component="WorkspaceAccountMenu"><button type="button" class="smrt-workspace-account-menu__trigger svelte-1xvol4w" data-smrt-part="trigger" aria-haspopup="menu" aria-expanded="false" disabled=""><span class="smrt-workspace-account-menu__open svelte-1xvol4w">Open account menu</span> <span class="avatar sm svelte-1itig4m" aria-hidden="true" data-smrt-component="Avatar"><!--[-1--><span class="avatar__initials svelte-1itig4m" role="img" aria-label="You">YO</span><!--]--> <!--[-1--><!--]--></span><!----> <span class="smrt-workspace-account-menu__identity svelte-1xvol4w"><span class="smrt-workspace-account-menu__summary svelte-1xvol4w">You</span> <!--[-1--><!--]--></span> <span class="smrt-workspace-account-menu__indicator svelte-1xvol4w" aria-hidden="true">•••</span></button> <!--[-1--><!--]--></div><!----><!--]--><!--]--><!----><!--]--></div><!--]--><!----></div><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--></div></aside><!--]--> <main id="smrt-admin-shell-main" class="smrt-admin-shell__main svelte-t0v968"><div class="smrt-layout-live svelte-veyjiz" role="status" aria-live="polite"></div> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[0--><!--[0--><!----><!--]--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!----> <span hidden="" data-smrt-planner-anchor=""></span><!----> <!--[--><!--[-1--><!--]--><!--]--><!----><!----><!----></main> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--><!----> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--><!----> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--> <!--[-1--><!--]--></div><!--]--><!----></div><!----><!----><!----></div><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
58
+
59
+ <script>
60
+ {
61
+ __sveltekit_1uquhsn = {
62
+ base: new URL("../..", location).pathname.slice(0, -1)
63
+ };
64
+
65
+ const element = document.currentScript.parentElement;
66
+
67
+ Promise.all([
68
+ import("../../_app/immutable/entry/start.C_vMied2.js"),
69
+ import("../../_app/immutable/entry/app.vuScBcN4.js")
70
+ ]).then(([kit, app]) => {
71
+ kit.start(app, element, {
72
+ node_ids: [0, 14],
73
+ data: [null,null],
74
+ form: null,
75
+ error: null
76
+ });
77
+ });
78
+ }
79
+ </script>
80
+ </div>
81
+ </body>
82
+ </html>
@@ -1,7 +1,8 @@
1
1
  import { AssistantSession, type SessionOptions } from '../assistant/session.svelte.ts';
2
+ import type { ChatModel } from '../assistant/transport.ts';
2
3
  import { type VoiceOptions, VoiceSession } from '../assistant/voice.svelte.ts';
3
4
  import { ByoModel } from '../inference/byo.svelte.ts';
4
- import { type ConfigResult, type InferenceConfig } from '../inference/config.ts';
5
+ import { type ConfigResult, type InferenceConfig, type InferenceMode } from '../inference/config.ts';
5
6
  import { type CapabilitySummary } from './status.ts';
6
7
  /** UI choices that are not part of the cookbook. */
7
8
  export interface AiPrefs {
@@ -59,7 +60,9 @@ export declare class AiState {
59
60
  speaking: boolean;
60
61
  /** Where the model runs, from `planner.config.json` or the `inference` prop. */
61
62
  inference: InferenceConfig;
62
- /** Set when the config was unusable and `browser` is used instead. */
63
+ /** Modes this policy exposes. Manual is always available for a multi-mode policy. */
64
+ availableModes: InferenceMode[];
65
+ /** Set when the config was unusable and inference fails closed to manual. */
63
66
  notice: string;
64
67
  /** The visitor's own endpoint (byo mode only). */
65
68
  byo: ByoModel | null;
@@ -84,10 +87,25 @@ export declare class AiState {
84
87
  /**
85
88
  * Apply the inference config. `host` is ready at once (nothing to download);
86
89
  * `byo` is ready once the visitor has connected an endpoint on the AI page;
87
- * `browser` is today's WebLLM. An unusable config arrives as `browser` with
88
- * a `notice`.
90
+ * `browser` is today's WebLLM. An unusable config arrives as `manual` with a
91
+ * `notice`.
89
92
  */
90
93
  configure(result: ConfigResult): void;
94
+ /**
95
+ * A host's own model (a mounted `Planner`'s `inference.chat`): the host
96
+ * chose and loaded it, so nothing is downloaded and no mode is offered. A
97
+ * function is read on every turn, so a model that loads later still answers.
98
+ */
99
+ useChat(chat: ChatModel | (() => ChatModel | null), label: string): void;
100
+ /**
101
+ * The assistant can answer now: a loaded browser model, the host's server,
102
+ * or a connected endpoint of the visitor's own. Until then the header icon
103
+ * leads to the AI models page instead of an empty chat.
104
+ */
105
+ get assistantReady(): boolean;
106
+ /** Change providers only after a visitor selects one from the configured policy. */
107
+ selectInference(mode: InferenceMode): void;
108
+ private applyMode;
91
109
  private syncByo;
92
110
  private decideFirstRun;
93
111
  /** Before hydration every capability reads as not set up, as on the server. */
@@ -63,7 +63,9 @@ export class AiState {
63
63
  speaking = $state(false);
64
64
  /** Where the model runs, from `planner.config.json` or the `inference` prop. */
65
65
  inference = $state(DEFAULT_INFERENCE);
66
- /** Set when the config was unusable and `browser` is used instead. */
66
+ /** Modes this policy exposes. Manual is always available for a multi-mode policy. */
67
+ availableModes = $state(['browser']);
68
+ /** Set when the config was unusable and inference fails closed to manual. */
67
69
  notice = $state('');
68
70
  /** The visitor's own endpoint (byo mode only). */
69
71
  byo = $state(null);
@@ -119,36 +121,93 @@ export class AiState {
119
121
  /**
120
122
  * Apply the inference config. `host` is ready at once (nothing to download);
121
123
  * `byo` is ready once the visitor has connected an endpoint on the AI page;
122
- * `browser` is today's WebLLM. An unusable config arrives as `browser` with
123
- * a `notice`.
124
+ * `browser` is today's WebLLM. An unusable config arrives as `manual` with a
125
+ * `notice`.
124
126
  */
125
127
  configure(result) {
126
128
  const { config, notice } = result;
127
129
  this.pendingConfig = false;
128
130
  this.inference = config;
129
131
  this.notice = notice ?? '';
130
- this.session.setMode(config.mode);
132
+ const configured = [config.mode, ...(config.alternatives ?? [])];
133
+ this.availableModes = [
134
+ ...configured,
135
+ ...(config.alternatives?.length && !configured.includes('manual')
136
+ ? ['manual']
137
+ : []),
138
+ ];
139
+ this.byo = configured.includes('byo')
140
+ ? new ByoModel({
141
+ storage: this.options.storage,
142
+ credentialPersistence: config.credentialPersistence,
143
+ presets: config.byo?.presets,
144
+ fetch: this.options.fetch,
145
+ onChange: () => this.syncByo(),
146
+ })
147
+ : null;
148
+ this.applyMode(config.mode);
149
+ if (this.hydrated)
150
+ this.decideFirstRun();
151
+ }
152
+ /**
153
+ * A host's own model (a mounted `Planner`'s `inference.chat`): the host
154
+ * chose and loaded it, so nothing is downloaded and no mode is offered. A
155
+ * function is read on every turn, so a model that loads later still answers.
156
+ */
157
+ useChat(chat, label) {
158
+ this.pendingConfig = false;
159
+ this.inference = { mode: 'host' };
160
+ this.notice = '';
161
+ this.availableModes = ['host'];
131
162
  this.byo = null;
132
- if (config.mode === 'host' && config.host) {
163
+ this.session.setMode('host');
164
+ const read = () => (typeof chat === 'function' ? chat() : chat);
165
+ this.session.useRemote({
166
+ message: (text, options) => {
167
+ const model = read();
168
+ if (!model) {
169
+ throw new Error('The host has not connected a model yet.');
170
+ }
171
+ return model.message(text, options);
172
+ },
173
+ }, label);
174
+ if (this.hydrated)
175
+ this.decideFirstRun();
176
+ }
177
+ /**
178
+ * The assistant can answer now: a loaded browser model, the host's server,
179
+ * or a connected endpoint of the visitor's own. Until then the header icon
180
+ * leads to the AI models page instead of an empty chat.
181
+ */
182
+ get assistantReady() {
183
+ return this.hydrated && this.session.status === 'ready';
184
+ }
185
+ /** Change providers only after a visitor selects one from the configured policy. */
186
+ selectInference(mode) {
187
+ if (!this.availableModes.includes(mode) || mode === this.inference.mode) {
188
+ return;
189
+ }
190
+ this.inference = { ...this.inference, mode };
191
+ this.notice = '';
192
+ this.applyMode(mode);
193
+ }
194
+ applyMode(mode) {
195
+ this.session.setMode(mode);
196
+ if (mode === 'host' && this.inference.host) {
133
197
  const { controller, store, settings, theme } = this.options.session;
134
198
  const plan = controller ?? createSliceController({ store, settings, theme });
135
199
  this.session.useRemote(createHostChat({
136
- endpoint: config.host.endpoint,
200
+ endpoint: this.inference.host.endpoint,
137
201
  snapshot: () => plan.snapshot(),
138
202
  fetch: this.options.fetch,
139
203
  }), 'Server');
140
204
  }
141
- else if (config.mode === 'byo') {
142
- this.byo = new ByoModel({
143
- storage: this.options.storage,
144
- presets: config.byo?.presets,
145
- fetch: this.options.fetch,
146
- onChange: () => this.syncByo(),
147
- });
205
+ else if (mode === 'byo') {
148
206
  this.syncByo();
149
207
  }
150
- if (this.hydrated)
151
- this.decideFirstRun();
208
+ else if (mode === 'manual') {
209
+ this.session.useRemote(null, '');
210
+ }
152
211
  }
153
212
  syncByo() {
154
213
  const byo = this.byo;
@@ -160,6 +219,7 @@ export class AiState {
160
219
  // A host's server needs nothing set up, so the form has nothing to ask for.
161
220
  this.firstRun =
162
221
  this.inference.mode !== 'host' &&
222
+ this.inference.mode !== 'manual' &&
163
223
  needsFirstRunSetup({
164
224
  thinkDownloaded: this.session.prefs.consented.length > 0 ||
165
225
  this.session.status === 'ready',
@@ -194,6 +254,9 @@ export class AiState {
194
254
  }
195
255
  /** One sentence on where what the visitor types goes, for the AI page. */
196
256
  get privacyNote() {
257
+ if (this.inference.mode === 'manual') {
258
+ return 'Inference is off. Planning, validation and export still work without a model.';
259
+ }
197
260
  if (this.inference.mode === 'host') {
198
261
  return "Your messages and a short summary of your plan go to this site's server. Voice typing and reading aloud stay on this device.";
199
262
  }
package/dist/ai/status.js CHANGED
@@ -7,6 +7,14 @@ export function deriveCapabilities(input) {
7
7
  }
8
8
  function thinkSummary(t) {
9
9
  const base = { id: 'think', name: 'Think' };
10
+ if (t.mode === 'manual') {
11
+ return {
12
+ ...base,
13
+ state: 'off',
14
+ label: 'Think: inference off',
15
+ where: 'Off',
16
+ };
17
+ }
10
18
  if (t.mode === 'host') {
11
19
  return {
12
20
  ...base,
@@ -7,16 +7,24 @@ export interface SettingsPatch {
7
7
  /** Percent, 0 to 100. */
8
8
  taxRate?: number;
9
9
  paymentTerms?: string;
10
+ /** New documents' prices include tax. */
11
+ pricesIncludeTax?: boolean;
12
+ /** Tax rounds per line or once per document. */
13
+ taxRounding?: 'line' | 'document';
10
14
  }
11
15
  /**
12
16
  * A look as the model states it: a preset, or a brand colour (hex), and
13
- * optionally light or dark. Tokens only; there is no way to ask for CSS.
17
+ * optionally light or dark, corner radius, density and contrast. Tokens only;
18
+ * there is no way to ask for CSS. The names are `set_theme`'s.
14
19
  */
15
20
  export interface ThemePatch {
16
21
  preset?: string;
17
22
  /** `#rrggbb`. */
18
23
  primary?: string;
19
24
  colorScheme?: ColorSchemeSetting;
25
+ borderRadius?: ThemeSetting['borderRadius'];
26
+ density?: ThemeSetting['density'];
27
+ contrast?: ThemeSetting['contrast'];
20
28
  }
21
29
  /** Longest payment terms the assistant will write. */
22
30
  export declare const MAX_TERMS_LENGTH = 40;
@@ -79,9 +87,12 @@ export interface AppliedChange {
79
87
  export declare function buildResponseSchema(recipes: readonly Pick<Recipe, 'id'>[], cookbooks?: readonly {
80
88
  id: string;
81
89
  }[], withSettings?: boolean, withTheme?: boolean): Record<string, unknown>;
82
- /** Keep only valid settings: circulating currency, tax 0-100, short terms. */
90
+ /**
91
+ * Keep only valid settings: circulating currency, tax 0-100, short terms, a
92
+ * yes/no on prices including tax and line or document rounding.
93
+ */
83
94
  export declare function parseSettings(value: unknown): SettingsPatch;
84
- /** Keep only a known preset, a hex colour and light or dark. */
95
+ /** Keep only a known preset, a hex colour, light or dark and known radius, density and contrast values. */
85
96
  export declare function parseThemePatch(value: unknown): ThemePatch;
86
97
  /** Remove Qwen3-style thinking, including a block cut off before it closed. */
87
98
  export declare function stripThinking(raw: string): string;
@@ -1,5 +1,5 @@
1
1
  import { CURRENCY_CODES } from "../settings/currencies.js";
2
- import { normalizeHex, THEME_PRESETS, } from "../theme/theme.js";
2
+ import { BORDER_RADII, CONTRASTS, DENSITIES, normalizeHex, THEME_PRESETS, } from "../theme/theme.js";
3
3
  /** Longest payment terms the assistant will write. */
4
4
  export const MAX_TERMS_LENGTH = 40;
5
5
  /** Longest reply the schema allows; bounds a model that starts to loop. */
@@ -30,6 +30,8 @@ export function buildResponseSchema(recipes, cookbooks = [], withSettings = fals
30
30
  currency: { type: 'string', pattern: '^[A-Z]{3}$' },
31
31
  taxRate: { type: 'number', minimum: 0, maximum: 100 },
32
32
  paymentTerms: { type: 'string', maxLength: MAX_TERMS_LENGTH },
33
+ pricesIncludeTax: { type: 'boolean' },
34
+ taxRounding: { enum: ['line', 'document'] },
33
35
  },
34
36
  additionalProperties: false,
35
37
  };
@@ -41,6 +43,9 @@ export function buildResponseSchema(recipes, cookbooks = [], withSettings = fals
41
43
  preset: { enum: [...THEME_PRESETS] },
42
44
  primary: { type: 'string', pattern: '^#[0-9a-fA-F]{6}$' },
43
45
  colorScheme: { enum: ['light', 'dark'] },
46
+ borderRadius: { enum: [...BORDER_RADII] },
47
+ density: { enum: [...DENSITIES] },
48
+ contrast: { enum: [...CONTRASTS] },
44
49
  },
45
50
  additionalProperties: false,
46
51
  };
@@ -52,7 +57,10 @@ export function buildResponseSchema(recipes, cookbooks = [], withSettings = fals
52
57
  additionalProperties: false,
53
58
  };
54
59
  }
55
- /** Keep only valid settings: circulating currency, tax 0-100, short terms. */
60
+ /**
61
+ * Keep only valid settings: circulating currency, tax 0-100, short terms, a
62
+ * yes/no on prices including tax and line or document rounding.
63
+ */
56
64
  export function parseSettings(value) {
57
65
  const out = {};
58
66
  if (!value || typeof value !== 'object' || Array.isArray(value))
@@ -78,9 +86,15 @@ export function parseSettings(value) {
78
86
  if (terms && terms.length <= MAX_TERMS_LENGTH)
79
87
  out.paymentTerms = terms;
80
88
  }
89
+ if (typeof object.pricesIncludeTax === 'boolean') {
90
+ out.pricesIncludeTax = object.pricesIncludeTax;
91
+ }
92
+ if (object.taxRounding === 'line' || object.taxRounding === 'document') {
93
+ out.taxRounding = object.taxRounding;
94
+ }
81
95
  return out;
82
96
  }
83
- /** Keep only a known preset, a hex colour and light or dark. */
97
+ /** Keep only a known preset, a hex colour, light or dark and known radius, density and contrast values. */
84
98
  export function parseThemePatch(value) {
85
99
  const out = {};
86
100
  if (!value || typeof value !== 'object' || Array.isArray(value))
@@ -98,6 +112,15 @@ export function parseThemePatch(value) {
98
112
  object.colorScheme === 'system') {
99
113
  out.colorScheme = object.colorScheme;
100
114
  }
115
+ if (BORDER_RADII.includes(object.borderRadius)) {
116
+ out.borderRadius = object.borderRadius;
117
+ }
118
+ if (DENSITIES.includes(object.density)) {
119
+ out.density = object.density;
120
+ }
121
+ if (CONTRASTS.includes(object.contrast)) {
122
+ out.contrast = object.contrast;
123
+ }
101
124
  return out;
102
125
  }
103
126
  /** Remove Qwen3-style thinking, including a block cut off before it closed. */
@@ -1,6 +1,10 @@
1
1
  /** The real host: a module worker running WebLLM. */
2
2
  export const browserHost = {
3
- createWorker: () => new Worker(new URL('./llm.worker.ts', import.meta.url), { type: 'module' }),
3
+ createWorker: () =>
4
+ // Extensionless on purpose: Vite resolves it to `.ts` here and to the
5
+ // `.js` svelte-package emits in `dist/`, so a host bundling the package
6
+ // finds the worker (`./llm.worker.ts` broke the host's build).
7
+ new Worker(new URL('./llm.worker', import.meta.url), { type: 'module' }),
4
8
  createEngine: async (worker, modelId, onProgress) => {
5
9
  const { CreateWebWorkerMLCEngine } = await import('@mlc-ai/web-llm');
6
10
  return CreateWebWorkerMLCEngine(worker, modelId, {
@@ -104,10 +104,10 @@ export function buildSystemPrompt(recipes, current, cookbooks = [], settings, ma
104
104
  out.push('"cookbook": id only if their business clearly fits, else null.');
105
105
  }
106
106
  if (settings) {
107
- out.push('"settings": only what they state: currency (ISO), taxRate (percent), paymentTerms; else omit, and do not mention them otherwise.');
107
+ out.push('"settings": only what they state: currency (ISO), taxRate (percent), paymentTerms, pricesIncludeTax (true when their prices include tax), taxRounding (line|document); else omit, and do not mention them otherwise.');
108
108
  }
109
109
  if (themeInfo) {
110
- out.push('"theme": only if they ask for a look: {"preset": material|glass|studio|smrt|happyvertical} or {"primary": "#rrggbb"}, optional "colorScheme": light|dark; else omit.');
110
+ out.push('"theme": only if they ask for a look: {"preset": material|glass|studio|smrt|happyvertical} or {"primary": "#rrggbb"}, optional "colorScheme": light|dark, "borderRadius": none|sm|md|lg|xl|full, "density": comfortable|touch, "contrast": auto|standard|more; else omit.');
111
111
  }
112
112
  const shown = examples(new Set(recipes.map((r) => r.id)), new Set(cookbooks.map((c) => c.id)), Boolean(settings), Boolean(themeInfo));
113
113
  if (shown.length)
@@ -154,7 +154,11 @@ export function buildSystemPrompt(recipes, current, cookbooks = [], settings, ma
154
154
  const terms = settings.paymentTerms
155
155
  ? `, terms ${settings.paymentTerms}`
156
156
  : '';
157
- out.push(`Settings: currency ${settings.currency}, tax ${formatTaxPercent(settings.taxRate)}${terms}.`);
157
+ const pricing = settings.pricesIncludeTax
158
+ ? ', prices include tax'
159
+ : ', prices exclude tax';
160
+ const rounding = settings.taxRounding === 'document' ? ', tax rounded per document' : '';
161
+ out.push(`Settings: currency ${settings.currency}, tax ${formatTaxPercent(settings.taxRate)}${terms}${pricing}${rounding}.`);
158
162
  }
159
163
  if (themeInfo) {
160
164
  out.push(`Theme: ${describeTheme(themeInfo.current)}.`);
@@ -52,6 +52,7 @@ export declare class AssistantSession {
52
52
  private loaded;
53
53
  private chat;
54
54
  private abort;
55
+ private loadGeneration;
55
56
  private readonly options;
56
57
  constructor(options: SessionOptions);
57
58
  /**
@@ -40,6 +40,7 @@ export class AssistantSession {
40
40
  loaded = null;
41
41
  chat = null;
42
42
  abort = null;
43
+ loadGeneration = 0;
43
44
  options;
44
45
  constructor(options) {
45
46
  this.options = options;
@@ -65,7 +66,9 @@ export class AssistantSession {
65
66
  ? 'Connect your model on the AI page first, then I can help. The cards on the Planner page work without one.'
66
67
  : this.mode === 'host'
67
68
  ? 'The assistant is not available right now. The cards on the Planner page work without it.'
68
- : 'Download a model first, then I can help. The cards on the Planner page work without one.',
69
+ : this.mode === 'manual'
70
+ ? 'Inference is off. The cards on the Planner page work without it.'
71
+ : 'Download a model first, then I can help. The cards on the Planner page work without one.',
69
72
  onReply: (text) => options.onReply?.(text),
70
73
  });
71
74
  }
@@ -74,14 +77,18 @@ export class AssistantSession {
74
77
  * download; the chat is set with `useRemote`.
75
78
  */
76
79
  setMode(mode) {
80
+ if (mode !== this.mode)
81
+ this.unload();
77
82
  this.mode = mode;
78
83
  if (mode !== 'browser') {
79
- this.unload();
80
84
  this.status = 'idle';
81
85
  }
82
86
  else if (!(this.options.webgpu ?? isWebGPUAvailable)()) {
83
87
  this.status = 'unsupported';
84
88
  }
89
+ else {
90
+ this.status = 'idle';
91
+ }
85
92
  }
86
93
  /** The remote chat model, or null when none is connected (byo, before setup). */
87
94
  useRemote(chat, label) {
@@ -112,11 +119,16 @@ export class AssistantSession {
112
119
  this.error = '';
113
120
  this.progress = { progress: 0, text: 'Starting' };
114
121
  const abort = new AbortController();
122
+ const generation = ++this.loadGeneration;
115
123
  this.abort = abort;
116
124
  try {
117
125
  const loaded = await loadModel(modelId, (report) => {
118
126
  this.progress = report;
119
127
  }, abort.signal, this.options.host ?? browserHost);
128
+ if (generation !== this.loadGeneration || this.mode !== 'browser') {
129
+ loaded.dispose();
130
+ return;
131
+ }
120
132
  this.loaded = loaded;
121
133
  // Consent is recorded only once the download completed: a cancelled or
122
134
  // failed attempt must show the size and memory warning again.
@@ -133,6 +145,8 @@ export class AssistantSession {
133
145
  this.status = 'ready';
134
146
  }
135
147
  catch (error) {
148
+ if (generation !== this.loadGeneration)
149
+ return;
136
150
  if (abort.signal.aborted) {
137
151
  this.status = 'idle';
138
152
  }
@@ -142,7 +156,8 @@ export class AssistantSession {
142
156
  }
143
157
  }
144
158
  finally {
145
- this.abort = null;
159
+ if (generation === this.loadGeneration)
160
+ this.abort = null;
146
161
  }
147
162
  }
148
163
  /** Stop a download in progress. */
@@ -152,7 +167,10 @@ export class AssistantSession {
152
167
  /** Free the model, for example to choose another. */
153
168
  unload() {
154
169
  // A load in progress is aborted too, which terminates its worker.
155
- this.abort?.abort();
170
+ this.loadGeneration += 1;
171
+ const abort = this.abort;
172
+ this.abort = null;
173
+ abort?.abort();
156
174
  this.transport.abort();
157
175
  this.loaded?.dispose();
158
176
  this.loaded = null;