@happyvertical/smrt-planner 0.0.0-stage → 0.0.2

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 (815) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -2
  3. package/app/404.html +80 -0
  4. package/app/_app/immutable/assets/0.B5zXkXe_.css +1 -0
  5. package/app/_app/immutable/assets/10.hpcnxvK1.css +1 -0
  6. package/app/_app/immutable/assets/11.D7zoXfVV.css +1 -0
  7. package/app/_app/immutable/assets/12.CPobm1ED.css +1 -0
  8. package/app/_app/immutable/assets/2.CyaWdRdI.css +1 -0
  9. package/app/_app/immutable/assets/3.BlPQOes8.css +1 -0
  10. package/app/_app/immutable/assets/8.2gQeKBp_.css +1 -0
  11. package/app/_app/immutable/assets/9.HOPT4xtg.css +1 -0
  12. package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +1 -0
  13. package/app/_app/immutable/assets/Button.DkP0qkG9.css +1 -0
  14. package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +1 -0
  15. package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +1 -0
  16. package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +1 -0
  17. package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +1 -0
  18. package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +1 -0
  19. package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +1 -0
  20. package/app/_app/immutable/assets/dist.C5nHBk_O.css +1 -0
  21. package/app/_app/immutable/assets/feedback.BVKAwFck.css +1 -0
  22. package/app/_app/immutable/assets/forms.BChZ2RWM.css +1 -0
  23. package/app/_app/immutable/assets/inter-latin-ext.B_-bZUTo.woff2 +0 -0
  24. package/app/_app/immutable/assets/inter-latin.8kRkwJBP.woff2 +0 -0
  25. package/app/_app/immutable/assets/jetbrains-mono-latin-ext.Bnd2h4Br.woff2 +0 -0
  26. package/app/_app/immutable/assets/jetbrains-mono-latin.Db4Uuiha.woff2 +0 -0
  27. package/app/_app/immutable/assets/ort-wasm-simd-threaded.asyncify.CxOG5pUO.wasm +0 -0
  28. package/app/_app/immutable/assets/percent.LH0z-ozZ.css +1 -0
  29. package/app/_app/immutable/assets/space-grotesk-latin-ext.wJGaI8U0.woff2 +0 -0
  30. package/app/_app/immutable/assets/space-grotesk-latin.DPT1xrvW.woff2 +0 -0
  31. package/app/_app/immutable/assets/store.CGDwHkkF.css +1 -0
  32. package/app/_app/immutable/assets/ui.B1A1Zl2p.css +1 -0
  33. package/app/_app/immutable/assets/workspace.BIMkuZDb.css +1 -0
  34. package/app/_app/immutable/chunks/1okeBSoq.js +1 -0
  35. package/app/_app/immutable/chunks/2jFBkS1C.js +1 -0
  36. package/app/_app/immutable/chunks/6P9zxrzU.js +1 -0
  37. package/app/_app/immutable/chunks/B32EWqI8.js +9 -0
  38. package/app/_app/immutable/chunks/B4Kevpe0.js +1 -0
  39. package/app/_app/immutable/chunks/BJfAXhak.js +3 -0
  40. package/app/_app/immutable/chunks/BKwRT_1p.js +1 -0
  41. package/app/_app/immutable/chunks/BQxY8kkL.js +1 -0
  42. package/app/_app/immutable/chunks/BS4h9ES-.js +1 -0
  43. package/app/_app/immutable/chunks/BWPhGFHl.js +1 -0
  44. package/app/_app/immutable/chunks/BYcBM-fh.js +1 -0
  45. package/app/_app/immutable/chunks/BegKiy2G.js +1 -0
  46. package/app/_app/immutable/chunks/Bjy-W4x2.js +81 -0
  47. package/app/_app/immutable/chunks/BnRri03M.js +1 -0
  48. package/app/_app/immutable/chunks/C7zBd-pD.js +1 -0
  49. package/app/_app/immutable/chunks/CA-A9Ngs.js +1 -0
  50. package/app/_app/immutable/chunks/CMhpRMKg.js +1 -0
  51. package/app/_app/immutable/chunks/CPRHZZeW.js +1 -0
  52. package/app/_app/immutable/chunks/CRQ1Pmzr.js +1 -0
  53. package/app/_app/immutable/chunks/CWtfVMDz.js +1 -0
  54. package/app/_app/immutable/chunks/CgAkqYsL.js +1 -0
  55. package/app/_app/immutable/chunks/Chyo8rdT.js +3 -0
  56. package/app/_app/immutable/chunks/Ci0DUht6.js +34 -0
  57. package/app/_app/immutable/chunks/CmmuWmp6.js +2 -0
  58. package/app/_app/immutable/chunks/CrFNLK0f.js +1 -0
  59. package/app/_app/immutable/chunks/CrO3W89x.js +1 -0
  60. package/app/_app/immutable/chunks/CsprTb3f.js +2 -0
  61. package/app/_app/immutable/chunks/CyUMm_Wp.js +1 -0
  62. package/app/_app/immutable/chunks/CygC84VT.js +2 -0
  63. package/app/_app/immutable/chunks/D0VgZnk1.js +1 -0
  64. package/app/_app/immutable/chunks/D71UrO5c.js +1 -0
  65. package/app/_app/immutable/chunks/D7hhQvDO.js +1 -0
  66. package/app/_app/immutable/chunks/DD7gpKb2.js +1 -0
  67. package/app/_app/immutable/chunks/DNRgqfTx.js +1 -0
  68. package/app/_app/immutable/chunks/DRByVC-c.js +1 -0
  69. package/app/_app/immutable/chunks/DVRKjN-E.js +1 -0
  70. package/app/_app/immutable/chunks/D_J_XtJy.js +846 -0
  71. package/app/_app/immutable/chunks/Dbjm4OuC.js +1 -0
  72. package/app/_app/immutable/chunks/Dc4q22LH.js +42 -0
  73. package/app/_app/immutable/chunks/Dd_uD5pT.js +1 -0
  74. package/app/_app/immutable/chunks/DkR8_Ws6.js +2 -0
  75. package/app/_app/immutable/chunks/Dp9GVO-9.js +1 -0
  76. package/app/_app/immutable/chunks/DqcD-WtP.js +1 -0
  77. package/app/_app/immutable/chunks/Dt-HX3Vu.js +1 -0
  78. package/app/_app/immutable/chunks/FbOxj-PF.js +69 -0
  79. package/app/_app/immutable/chunks/QukgIHDX.js +1 -0
  80. package/app/_app/immutable/chunks/WxSPP8QW.js +4 -0
  81. package/app/_app/immutable/chunks/Xp1g1t4n.js +3 -0
  82. package/app/_app/immutable/chunks/iET62IRm.js +2 -0
  83. package/app/_app/immutable/chunks/leQCwW2d.js +1 -0
  84. package/app/_app/immutable/chunks/p6bgzXiY.js +1 -0
  85. package/app/_app/immutable/chunks/uBIymjUX.js +1 -0
  86. package/app/_app/immutable/chunks/xihTtKlq.js +1 -0
  87. package/app/_app/immutable/entry/app.IZIJXhgq.js +2 -0
  88. package/app/_app/immutable/entry/start.BuaYHD1N.js +1 -0
  89. package/app/_app/immutable/nodes/0.m_U8WC7E.js +10 -0
  90. package/app/_app/immutable/nodes/1.Crw8ULhB.js +1 -0
  91. package/app/_app/immutable/nodes/10.1nQxyH9H.js +4 -0
  92. package/app/_app/immutable/nodes/11.Cw0JnQF3.js +1 -0
  93. package/app/_app/immutable/nodes/12.BIocA1aI.js +1 -0
  94. package/app/_app/immutable/nodes/2.CR5BwGnt.js +17 -0
  95. package/app/_app/immutable/nodes/3.1B56hgAG.js +1 -0
  96. package/app/_app/immutable/nodes/4.SSIC7sUh.js +1 -0
  97. package/app/_app/immutable/nodes/5.DgdwleDQ.js +1 -0
  98. package/app/_app/immutable/nodes/6.DmD9rqLU.js +1 -0
  99. package/app/_app/immutable/nodes/7.DdngsBmo.js +1 -0
  100. package/app/_app/immutable/nodes/8.D2Mszsua.js +3 -0
  101. package/app/_app/immutable/nodes/9.CLYsywul.js +1 -0
  102. package/app/_app/immutable/workers/assets/ort-wasm-simd-threaded.asyncify-CxOG5pUO.wasm +0 -0
  103. package/app/_app/immutable/workers/llm.worker-wfCOG_uk.js +69 -0
  104. package/app/_app/immutable/workers/local-speech.worker-DWbfmFUk.js +51 -0
  105. package/app/_app/version.json +1 -0
  106. package/app/ai/index.html +89 -0
  107. package/app/blueprint/index.html +87 -0
  108. package/app/cookbook/index.html +87 -0
  109. package/app/index.html +103 -0
  110. package/app/m/ads/AdDeliveryTier/index.html +96 -0
  111. package/app/m/ads/AdEvent/index.html +96 -0
  112. package/app/m/ads/AdFormat/index.html +96 -0
  113. package/app/m/ads/AdGroup/index.html +96 -0
  114. package/app/m/ads/AdVariation/index.html +96 -0
  115. package/app/m/analytics/AnalyticsDataStream/index.html +96 -0
  116. package/app/m/analytics/AnalyticsEvent/index.html +96 -0
  117. package/app/m/analytics/AnalyticsProperty/index.html +96 -0
  118. package/app/m/analytics/AnalyticsReport/index.html +96 -0
  119. package/app/m/approvals/ApprovalEvent/index.html +96 -0
  120. package/app/m/approvals/ApprovalPolicy/index.html +96 -0
  121. package/app/m/approvals/ApprovalRequest/index.html +96 -0
  122. package/app/m/assets/Asset/index.html +96 -0
  123. package/app/m/assets/AssetAssociation/index.html +97 -0
  124. package/app/m/assets/AssetMetafield/index.html +96 -0
  125. package/app/m/assets/AssetStatus/index.html +96 -0
  126. package/app/m/assets/AssetType/index.html +96 -0
  127. package/app/m/assets/Folder/index.html +96 -0
  128. package/app/m/chat/AgentSession/index.html +96 -0
  129. package/app/m/chat/ChatMessage/index.html +97 -0
  130. package/app/m/chat/ChatParticipant/index.html +97 -0
  131. package/app/m/chat/ChatReaction/index.html +96 -0
  132. package/app/m/chat/ChatRoom/index.html +96 -0
  133. package/app/m/chat/ChatThread/index.html +97 -0
  134. package/app/m/chat/VoiceGatewayTurn/index.html +96 -0
  135. package/app/m/chat/VoiceSession/index.html +96 -0
  136. package/app/m/commerce/Agreement/index.html +96 -0
  137. package/app/m/commerce/Cart/index.html +96 -0
  138. package/app/m/commerce/Contract/index.html +96 -0
  139. package/app/m/commerce/ContractLineItem/index.html +97 -0
  140. package/app/m/commerce/Customer/index.html +96 -0
  141. package/app/m/commerce/Estimate/index.html +96 -0
  142. package/app/m/commerce/Fulfillment/index.html +96 -0
  143. package/app/m/commerce/FulfillmentLineItem/index.html +97 -0
  144. package/app/m/commerce/Invoice/index.html +96 -0
  145. package/app/m/commerce/InvoiceLineItem/index.html +97 -0
  146. package/app/m/commerce/Lease/index.html +96 -0
  147. package/app/m/commerce/LicenseSale/index.html +96 -0
  148. package/app/m/commerce/Order/index.html +96 -0
  149. package/app/m/commerce/Payment/index.html +96 -0
  150. package/app/m/commerce/PaymentAllocation/index.html +97 -0
  151. package/app/m/commerce/PaymentInstrument/index.html +96 -0
  152. package/app/m/commerce/PaymentIntent/index.html +96 -0
  153. package/app/m/commerce/Payout/index.html +96 -0
  154. package/app/m/commerce/ProductionOrder/index.html +96 -0
  155. package/app/m/commerce/PurchaseOrder/index.html +96 -0
  156. package/app/m/commerce/Vendor/index.html +96 -0
  157. package/app/m/commerce/WholesaleOrder/index.html +96 -0
  158. package/app/m/content/Content/index.html +96 -0
  159. package/app/m/content/ContentContribution/index.html +96 -0
  160. package/app/m/content/ContentContributionAttachment/index.html +96 -0
  161. package/app/m/content/ContentContributionRevision/index.html +96 -0
  162. package/app/m/content/ContentContributionType/index.html +96 -0
  163. package/app/m/content/ContentContributor/index.html +96 -0
  164. package/app/m/content/ContentCorrection/index.html +96 -0
  165. package/app/m/content/ContentFeedSource/index.html +96 -0
  166. package/app/m/content/ContentGovernanceAssignment/index.html +96 -0
  167. package/app/m/content/ContentGovernancePolicy/index.html +96 -0
  168. package/app/m/content/ContentGovernanceProfile/index.html +96 -0
  169. package/app/m/content/ContentReference/index.html +96 -0
  170. package/app/m/content/ContentReview/index.html +96 -0
  171. package/app/m/content/ContentVersion/index.html +96 -0
  172. package/app/m/content/Contents/index.html +96 -0
  173. package/app/m/events/Event/index.html +96 -0
  174. package/app/m/events/EventParticipant/index.html +97 -0
  175. package/app/m/events/EventSeries/index.html +96 -0
  176. package/app/m/events/EventType/index.html +96 -0
  177. package/app/m/facts/Fact/index.html +96 -0
  178. package/app/m/facts/FactContent/index.html +96 -0
  179. package/app/m/facts/FactEvidence/index.html +96 -0
  180. package/app/m/facts/FactSource/index.html +96 -0
  181. package/app/m/facts/FactSubject/index.html +96 -0
  182. package/app/m/facts/FactTag/index.html +96 -0
  183. package/app/m/fields/FieldPolicy/index.html +96 -0
  184. package/app/m/fields/FieldPolicySuggestion/index.html +96 -0
  185. package/app/m/fields/FieldUsageCounter/index.html +96 -0
  186. package/app/m/images/Image/index.html +96 -0
  187. package/app/m/inventory/InventoryLocation/index.html +96 -0
  188. package/app/m/inventory/StockLevel/index.html +96 -0
  189. package/app/m/inventory/StockMovement/index.html +96 -0
  190. package/app/m/ledgers/Account/index.html +96 -0
  191. package/app/m/ledgers/Journal/index.html +96 -0
  192. package/app/m/ledgers/JournalEntry/index.html +97 -0
  193. package/app/m/manufacturing/Assembly/index.html +96 -0
  194. package/app/m/manufacturing/BillOfMaterials/index.html +96 -0
  195. package/app/m/manufacturing/BomLine/index.html +96 -0
  196. package/app/m/manufacturing/Operation/index.html +96 -0
  197. package/app/m/manufacturing/ProductionRun/index.html +96 -0
  198. package/app/m/manufacturing/ProductionRunCompletion/index.html +96 -0
  199. package/app/m/manufacturing/RoutingStep/index.html +96 -0
  200. package/app/m/marketing/Campaign/index.html +96 -0
  201. package/app/m/marketing/CampaignChannel/index.html +96 -0
  202. package/app/m/marketing/CampaignMetricSnapshot/index.html +96 -0
  203. package/app/m/messages/Account/index.html +96 -0
  204. package/app/m/messages/Attachment/index.html +96 -0
  205. package/app/m/messages/Blacklist/index.html +96 -0
  206. package/app/m/messages/Email/failed-sends/index.html +96 -0
  207. package/app/m/messages/Email/index.html +96 -0
  208. package/app/m/messages/Email/mailbox/index.html +96 -0
  209. package/app/m/messages/EmailAccount/index.html +96 -0
  210. package/app/m/messages/EmailFolder/index.html +96 -0
  211. package/app/m/messages/Message/index.html +96 -0
  212. package/app/m/messages/MessagingEndpoint/index.html +96 -0
  213. package/app/m/messages/PersonaMessageRoute/index.html +96 -0
  214. package/app/m/messages/SlackAccount/index.html +96 -0
  215. package/app/m/messages/SlackMessage/index.html +96 -0
  216. package/app/m/messages/TelegramAccount/index.html +96 -0
  217. package/app/m/messages/Tweet/index.html +96 -0
  218. package/app/m/messages/TwitterAccount/index.html +96 -0
  219. package/app/m/messages/Whitelist/index.html +96 -0
  220. package/app/m/messages/ZulipAccount/index.html +96 -0
  221. package/app/m/places/Place/index.html +96 -0
  222. package/app/m/places/PlaceType/index.html +96 -0
  223. package/app/m/preferences/UiPreferenceRecord/index.html +96 -0
  224. package/app/m/products/Category/index.html +96 -0
  225. package/app/m/products/Material/index.html +96 -0
  226. package/app/m/products/Product/index.html +96 -0
  227. package/app/m/products/Product/ingredients/index.html +96 -0
  228. package/app/m/products/ProductVariant/index.html +97 -0
  229. package/app/m/products/Sku/index.html +97 -0
  230. package/app/m/profiles/ApiKey/index.html +96 -0
  231. package/app/m/profiles/Bot/index.html +96 -0
  232. package/app/m/profiles/MagicLinkToken/index.html +96 -0
  233. package/app/m/profiles/NostrIdentity/index.html +96 -0
  234. package/app/m/profiles/OidcIdentity/index.html +96 -0
  235. package/app/m/profiles/Organization/index.html +96 -0
  236. package/app/m/profiles/Person/index.html +96 -0
  237. package/app/m/profiles/Profile/index.html +96 -0
  238. package/app/m/profiles/ProfileMetadata/index.html +96 -0
  239. package/app/m/profiles/ProfileMetafield/index.html +96 -0
  240. package/app/m/profiles/ProfileRelationship/index.html +96 -0
  241. package/app/m/profiles/ProfileRelationshipTerm/index.html +96 -0
  242. package/app/m/profiles/ProfileRelationshipType/index.html +96 -0
  243. package/app/m/profiles/ProfileType/index.html +96 -0
  244. package/app/m/projects/Comment/index.html +97 -0
  245. package/app/m/projects/Issue/index.html +96 -0
  246. package/app/m/projects/Label/index.html +96 -0
  247. package/app/m/projects/Project/index.html +96 -0
  248. package/app/m/projects/ProjectIntegration/index.html +96 -0
  249. package/app/m/projects/PullRequest/index.html +96 -0
  250. package/app/m/projects/Repository/index.html +96 -0
  251. package/app/m/properties/Property/index.html +96 -0
  252. package/app/m/properties/Zone/index.html +96 -0
  253. package/app/m/reports/RuntimeReport/index.html +96 -0
  254. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +96 -0
  255. package/app/m/reports/SmrtReportLock/index.html +96 -0
  256. package/app/m/reports/SmrtReportRefreshTask/index.html +96 -0
  257. package/app/m/reports/SmrtReportRun/index.html +96 -0
  258. package/app/m/reports/SmrtReportSchedule/index.html +96 -0
  259. package/app/m/reports/SmrtReportWatermark/index.html +96 -0
  260. package/app/m/sales/AttributionException/index.html +96 -0
  261. package/app/m/sales/AttributionPolicy/index.html +96 -0
  262. package/app/m/sales/Commission/index.html +96 -0
  263. package/app/m/sales/CommissionAdjustment/index.html +96 -0
  264. package/app/m/sales/CommissionPayout/index.html +96 -0
  265. package/app/m/sales/CommissionPlan/index.html +96 -0
  266. package/app/m/sales/Earner/index.html +96 -0
  267. package/app/m/sales/EarnerSourceAttribution/index.html +96 -0
  268. package/app/m/sales/EarningEvent/index.html +96 -0
  269. package/app/m/sales/ExecutedAgreement/index.html +96 -0
  270. package/app/m/sales/Lead/index.html +96 -0
  271. package/app/m/sales/Opportunity/index.html +96 -0
  272. package/app/m/sales/OpportunityConversion/index.html +96 -0
  273. package/app/m/sales/PipelineDefinition/index.html +96 -0
  274. package/app/m/sales/PipelineStage/index.html +97 -0
  275. package/app/m/sales/Referral/index.html +96 -0
  276. package/app/m/sales/ReferralAgreement/index.html +96 -0
  277. package/app/m/sales/ReferralLink/index.html +96 -0
  278. package/app/m/sales/ReferralProgram/index.html +96 -0
  279. package/app/m/sales/ReferralTermSnapshot/index.html +96 -0
  280. package/app/m/sales/ReferralTouch/index.html +96 -0
  281. package/app/m/sales/Referrer/index.html +96 -0
  282. package/app/m/sales/SalesActivity/index.html +96 -0
  283. package/app/m/sales/SalesRepresentative/index.html +96 -0
  284. package/app/m/sites/Site/index.html +96 -0
  285. package/app/m/sites/SiteAgentBinding/index.html +96 -0
  286. package/app/m/social/OAuthState/index.html +96 -0
  287. package/app/m/social/SocialAccount/index.html +96 -0
  288. package/app/m/social/SocialPost/index.html +96 -0
  289. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +96 -0
  290. package/app/m/subscriptions/BillingAdjustment/index.html +96 -0
  291. package/app/m/subscriptions/ClientCharge/index.html +96 -0
  292. package/app/m/subscriptions/CreditGrant/index.html +96 -0
  293. package/app/m/subscriptions/PricingRule/index.html +96 -0
  294. package/app/m/subscriptions/RetailCharge/index.html +96 -0
  295. package/app/m/subscriptions/SpendingPolicy/index.html +96 -0
  296. package/app/m/subscriptions/SubscriptionPlan/index.html +96 -0
  297. package/app/m/subscriptions/TenantSubscription/index.html +96 -0
  298. package/app/m/subscriptions/TenantUsageMetric/index.html +96 -0
  299. package/app/m/support/ServiceTimeEntry/index.html +96 -0
  300. package/app/m/support/SupportAiRun/index.html +96 -0
  301. package/app/m/support/SupportAvailability/index.html +96 -0
  302. package/app/m/support/SupportCase/index.html +96 -0
  303. package/app/m/support/SupportCaseEvent/index.html +96 -0
  304. package/app/m/support/SupportChannelBinding/index.html +96 -0
  305. package/app/m/support/SupportCharge/index.html +96 -0
  306. package/app/m/support/SupportCompensation/index.html +96 -0
  307. package/app/m/support/SupportCompensationPlan/index.html +96 -0
  308. package/app/m/support/SupportEscalation/index.html +96 -0
  309. package/app/m/support/SupportInteraction/index.html +96 -0
  310. package/app/m/support/SupportPlan/index.html +96 -0
  311. package/app/m/support/SupportPolicy/index.html +96 -0
  312. package/app/m/support/SupportQualification/index.html +96 -0
  313. package/app/m/support/SupportServiceTarget/index.html +96 -0
  314. package/app/m/support/SupportSpecialist/index.html +96 -0
  315. package/app/m/support/SupportWorkLink/index.html +96 -0
  316. package/app/m/tags/Tag/index.html +96 -0
  317. package/app/m/tags/TagAlias/index.html +96 -0
  318. package/app/m/timesheets/AttendanceBreak/index.html +96 -0
  319. package/app/m/timesheets/AttendancePunch/index.html +96 -0
  320. package/app/m/timesheets/ServiceChargeSnapshot/index.html +96 -0
  321. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +96 -0
  322. package/app/m/timesheets/ServiceTimeEntry/index.html +96 -0
  323. package/app/m/users/AccessRequest/index.html +96 -0
  324. package/app/m/users/Group/index.html +96 -0
  325. package/app/m/users/GroupMember/index.html +96 -0
  326. package/app/m/users/GroupRole/index.html +96 -0
  327. package/app/m/users/Membership/index.html +97 -0
  328. package/app/m/users/MembershipOverride/index.html +96 -0
  329. package/app/m/users/Permission/index.html +96 -0
  330. package/app/m/users/ResourceGrant/index.html +96 -0
  331. package/app/m/users/Role/index.html +96 -0
  332. package/app/m/users/RolePermission/index.html +96 -0
  333. package/app/m/users/Session/index.html +96 -0
  334. package/app/m/users/Tenant/index.html +96 -0
  335. package/app/m/users/TenantIntegration/index.html +96 -0
  336. package/app/m/users/TenantPermissionOverride/index.html +96 -0
  337. package/app/m/users/User/index.html +96 -0
  338. package/app/m/users/UsersCliAuthRequest/index.html +96 -0
  339. package/app/m/users/UsersMagicLinkToken/index.html +96 -0
  340. package/app/m/video/Character/index.html +96 -0
  341. package/app/m/video/CharacterAsset/index.html +96 -0
  342. package/app/m/video/CompositeJob/index.html +96 -0
  343. package/app/m/video/Performer/index.html +96 -0
  344. package/app/m/video/PerformerAsset/index.html +96 -0
  345. package/app/m/video/Scene/index.html +96 -0
  346. package/app/m/video/SceneAsset/index.html +96 -0
  347. package/app/m/video/VideoComposition/index.html +96 -0
  348. package/app/m/video/VideoCompositionAsset/index.html +96 -0
  349. package/app/m/video/VideoSequence/index.html +96 -0
  350. package/app/m/video/VideoSequenceAsset/index.html +96 -0
  351. package/app/m/video/VideoShot/index.html +96 -0
  352. package/app/m/video/VideoShotAsset/index.html +96 -0
  353. package/app/m/video/VideoShotCharacter/index.html +96 -0
  354. package/app/m/video/VideoWorkflow/index.html +96 -0
  355. package/app/m/voice/VoiceOutput/index.html +96 -0
  356. package/app/m/voice/VoiceProfile/index.html +96 -0
  357. package/app/m/voice/VoiceSample/index.html +96 -0
  358. package/app/packages/ads/index.html +92 -0
  359. package/app/packages/analytics/index.html +92 -0
  360. package/app/packages/approvals/index.html +92 -0
  361. package/app/packages/assets/index.html +92 -0
  362. package/app/packages/chat/index.html +92 -0
  363. package/app/packages/comments/index.html +92 -0
  364. package/app/packages/commerce/index.html +92 -0
  365. package/app/packages/content/index.html +92 -0
  366. package/app/packages/events/index.html +92 -0
  367. package/app/packages/expenses/index.html +92 -0
  368. package/app/packages/facts/index.html +92 -0
  369. package/app/packages/fields/index.html +92 -0
  370. package/app/packages/human-resources/index.html +92 -0
  371. package/app/packages/images/index.html +92 -0
  372. package/app/packages/index.html +90 -0
  373. package/app/packages/inventory/index.html +92 -0
  374. package/app/packages/ledgers/index.html +92 -0
  375. package/app/packages/manufacturing/index.html +92 -0
  376. package/app/packages/marketing/index.html +92 -0
  377. package/app/packages/messages/index.html +92 -0
  378. package/app/packages/places/index.html +92 -0
  379. package/app/packages/preferences/index.html +92 -0
  380. package/app/packages/products/index.html +92 -0
  381. package/app/packages/profiles/index.html +92 -0
  382. package/app/packages/projects/index.html +92 -0
  383. package/app/packages/properties/index.html +92 -0
  384. package/app/packages/reports/index.html +92 -0
  385. package/app/packages/sales/index.html +92 -0
  386. package/app/packages/sites/index.html +92 -0
  387. package/app/packages/social/index.html +92 -0
  388. package/app/packages/subscriptions/index.html +92 -0
  389. package/app/packages/support/index.html +92 -0
  390. package/app/packages/tags/index.html +92 -0
  391. package/app/packages/timesheets/index.html +92 -0
  392. package/app/packages/users/index.html +92 -0
  393. package/app/packages/video/index.html +92 -0
  394. package/app/packages/voice/index.html +92 -0
  395. package/app/recipes/account-access/help/index.html +93 -0
  396. package/app/recipes/account-access/index.html +95 -0
  397. package/app/recipes/activity/help/index.html +93 -0
  398. package/app/recipes/activity/index.html +94 -0
  399. package/app/recipes/agreements/help/index.html +93 -0
  400. package/app/recipes/agreements/index.html +96 -0
  401. package/app/recipes/analytics.reports/help/index.html +93 -0
  402. package/app/recipes/analytics.reports/index.html +94 -0
  403. package/app/recipes/assets/help/index.html +93 -0
  404. package/app/recipes/assets/index.html +95 -0
  405. package/app/recipes/billing/help/index.html +93 -0
  406. package/app/recipes/billing/index.html +95 -0
  407. package/app/recipes/chat.assistant/help/index.html +93 -0
  408. package/app/recipes/chat.assistant/index.html +94 -0
  409. package/app/recipes/comments/help/index.html +93 -0
  410. package/app/recipes/comments/index.html +94 -0
  411. package/app/recipes/commerce.customers/help/index.html +93 -0
  412. package/app/recipes/commerce.customers/index.html +94 -0
  413. package/app/recipes/commerce.estimates/help/index.html +93 -0
  414. package/app/recipes/commerce.estimates/index.html +94 -0
  415. package/app/recipes/commerce.purchases/help/index.html +93 -0
  416. package/app/recipes/commerce.purchases/index.html +94 -0
  417. package/app/recipes/commerce.sales/help/index.html +93 -0
  418. package/app/recipes/commerce.sales/index.html +94 -0
  419. package/app/recipes/commerce.vendors/help/index.html +93 -0
  420. package/app/recipes/commerce.vendors/index.html +94 -0
  421. package/app/recipes/commerce.wholesale/help/index.html +93 -0
  422. package/app/recipes/commerce.wholesale/index.html +94 -0
  423. package/app/recipes/events.calendar/help/index.html +93 -0
  424. package/app/recipes/events.calendar/index.html +94 -0
  425. package/app/recipes/fields.form-customization/help/index.html +93 -0
  426. package/app/recipes/fields.form-customization/index.html +94 -0
  427. package/app/recipes/inventory.stock/help/index.html +93 -0
  428. package/app/recipes/inventory.stock/index.html +94 -0
  429. package/app/recipes/ledgers.bookkeeping/help/index.html +93 -0
  430. package/app/recipes/ledgers.bookkeeping/index.html +94 -0
  431. package/app/recipes/messages/help/index.html +93 -0
  432. package/app/recipes/messages/index.html +95 -0
  433. package/app/recipes/products/help/index.html +93 -0
  434. package/app/recipes/products/index.html +96 -0
  435. package/app/recipes/projects.tracker/help/index.html +93 -0
  436. package/app/recipes/projects.tracker/index.html +94 -0
  437. package/app/recipes/reports.materialized/help/index.html +93 -0
  438. package/app/recipes/reports.materialized/index.html +94 -0
  439. package/app/recipes/sales.pipeline/help/index.html +93 -0
  440. package/app/recipes/sales.pipeline/index.html +94 -0
  441. package/app/recipes/tags.taxonomy/help/index.html +93 -0
  442. package/app/recipes/tags.taxonomy/index.html +94 -0
  443. package/app/recipes/team-collaboration/help/index.html +93 -0
  444. package/app/recipes/team-collaboration/index.html +94 -0
  445. package/app/s/custom-billing/index.html +89 -0
  446. package/app/s/custom-buying/index.html +89 -0
  447. package/app/s/custom-classes/index.html +89 -0
  448. package/app/s/custom-jobs/index.html +89 -0
  449. package/app/s/custom-kitchen/index.html +89 -0
  450. package/app/s/custom-material/index.html +89 -0
  451. package/app/s/custom-members/index.html +89 -0
  452. package/app/s/custom-parts/index.html +89 -0
  453. package/app/s/custom-schedule/index.html +89 -0
  454. package/app/s/custom-shop/index.html +89 -0
  455. package/app/s/custom-wholesale/index.html +89 -0
  456. package/app/s/section-access-control/index.html +89 -0
  457. package/app/s/section-account-security/index.html +89 -0
  458. package/app/s/section-accounting/index.html +89 -0
  459. package/app/s/section-activity/index.html +89 -0
  460. package/app/s/section-agreements/index.html +89 -0
  461. package/app/s/section-analytics/index.html +89 -0
  462. package/app/s/section-assets/index.html +89 -0
  463. package/app/s/section-billing/index.html +89 -0
  464. package/app/s/section-calendar/index.html +89 -0
  465. package/app/s/section-catalog/index.html +89 -0
  466. package/app/s/section-chat.assistant/index.html +89 -0
  467. package/app/s/section-comments/index.html +89 -0
  468. package/app/s/section-fields.form-customization/index.html +89 -0
  469. package/app/s/section-messages/index.html +89 -0
  470. package/app/s/section-more/index.html +89 -0
  471. package/app/s/section-operations/index.html +89 -0
  472. package/app/s/section-projects/index.html +89 -0
  473. package/app/s/section-purchasing/index.html +89 -0
  474. package/app/s/section-reports.materialized/index.html +89 -0
  475. package/app/s/section-sales/index.html +89 -0
  476. package/app/s/section-taxonomy/index.html +89 -0
  477. package/app/s/section-team/index.html +89 -0
  478. package/dist/ai/echo-gate.d.ts +13 -0
  479. package/dist/ai/echo-gate.js +21 -0
  480. package/dist/ai/icons.d.ts +9 -0
  481. package/dist/ai/icons.js +9 -0
  482. package/dist/ai/instance.d.ts +3 -0
  483. package/dist/ai/instance.js +25 -0
  484. package/dist/ai/state.svelte.d.ts +130 -0
  485. package/dist/ai/state.svelte.js +316 -0
  486. package/dist/ai/status.d.ts +67 -0
  487. package/dist/ai/status.js +125 -0
  488. package/dist/assets/smrt-mark.svg +38 -0
  489. package/dist/assistant/change.d.ts +101 -0
  490. package/dist/assistant/change.js +209 -0
  491. package/dist/assistant/engine.d.ts +20 -0
  492. package/dist/assistant/engine.js +43 -0
  493. package/dist/assistant/llm.worker.d.ts +1 -0
  494. package/dist/assistant/llm.worker.js +7 -0
  495. package/dist/assistant/match.d.ts +59 -0
  496. package/dist/assistant/match.js +271 -0
  497. package/dist/assistant/models.d.ts +38 -0
  498. package/dist/assistant/models.js +57 -0
  499. package/dist/assistant/offers.svelte.d.ts +36 -0
  500. package/dist/assistant/offers.svelte.js +59 -0
  501. package/dist/assistant/prefs.d.ts +14 -0
  502. package/dist/assistant/prefs.js +32 -0
  503. package/dist/assistant/prompt.d.ts +23 -0
  504. package/dist/assistant/prompt.js +163 -0
  505. package/dist/assistant/session.svelte.d.ts +74 -0
  506. package/dist/assistant/session.svelte.js +181 -0
  507. package/dist/assistant/theme-undo.svelte.d.ts +38 -0
  508. package/dist/assistant/theme-undo.svelte.js +50 -0
  509. package/dist/assistant/transport.d.ts +73 -0
  510. package/dist/assistant/transport.js +231 -0
  511. package/dist/assistant/voice-host.d.ts +10 -0
  512. package/dist/assistant/voice-host.js +17 -0
  513. package/dist/assistant/voice.svelte.d.ts +107 -0
  514. package/dist/assistant/voice.svelte.js +261 -0
  515. package/dist/catalog/catalog.json +89663 -0
  516. package/dist/catalog/generate/build.d.ts +33 -0
  517. package/dist/catalog/generate/build.js +131 -0
  518. package/dist/catalog/generate/exclusions.d.ts +18 -0
  519. package/dist/catalog/generate/exclusions.js +33 -0
  520. package/dist/catalog/generate/extract.d.ts +90 -0
  521. package/dist/catalog/generate/extract.js +326 -0
  522. package/dist/catalog/generate/local.d.ts +8 -0
  523. package/dist/catalog/generate/local.js +45 -0
  524. package/dist/catalog/generate/recipe-demo.d.ts +11 -0
  525. package/dist/catalog/generate/recipe-demo.js +29 -0
  526. package/dist/catalog/generate/recipe-metadata.d.ts +12 -0
  527. package/dist/catalog/generate/recipe-metadata.js +138 -0
  528. package/dist/catalog/generate/registry.d.ts +14 -0
  529. package/dist/catalog/generate/registry.js +83 -0
  530. package/dist/catalog/index.d.ts +21 -0
  531. package/dist/catalog/index.js +53 -0
  532. package/dist/catalog/types.d.ts +141 -0
  533. package/dist/catalog/types.js +8 -0
  534. package/dist/components/AiSetup.svelte +528 -0
  535. package/dist/components/AiSetup.svelte.d.ts +8 -0
  536. package/dist/components/AiStatusIcons.svelte +86 -0
  537. package/dist/components/AiStatusIcons.svelte.d.ts +18 -0
  538. package/dist/components/AppSettings.svelte +100 -0
  539. package/dist/components/AppSettings.svelte.d.ts +10 -0
  540. package/dist/components/BrowserAssistant.svelte +318 -0
  541. package/dist/components/BrowserAssistant.svelte.d.ts +8 -0
  542. package/dist/components/ChildRecords.svelte +331 -0
  543. package/dist/components/ChildRecords.svelte.d.ts +15 -0
  544. package/dist/components/ConnectTools.svelte +145 -0
  545. package/dist/components/ConnectTools.svelte.d.ts +8 -0
  546. package/dist/components/CookbooksPanel.svelte +308 -0
  547. package/dist/components/CookbooksPanel.svelte.d.ts +3 -0
  548. package/dist/components/ExportPanel.svelte +217 -0
  549. package/dist/components/ExportPanel.svelte.d.ts +3 -0
  550. package/dist/components/FeatureCard.svelte +197 -0
  551. package/dist/components/FeatureCard.svelte.d.ts +13 -0
  552. package/dist/components/FeaturesPanel.svelte +155 -0
  553. package/dist/components/FeaturesPanel.svelte.d.ts +3 -0
  554. package/dist/components/FieldInput.svelte +307 -0
  555. package/dist/components/FieldInput.svelte.d.ts +24 -0
  556. package/dist/components/FieldMapForm.svelte +173 -0
  557. package/dist/components/FieldMapForm.svelte.d.ts +18 -0
  558. package/dist/components/FormWorkspace.svelte +274 -0
  559. package/dist/components/FormWorkspace.svelte.d.ts +19 -0
  560. package/dist/components/HelpView.svelte +129 -0
  561. package/dist/components/HelpView.svelte.d.ts +12 -0
  562. package/dist/components/ModelOptions.svelte +239 -0
  563. package/dist/components/ModelOptions.svelte.d.ts +12 -0
  564. package/dist/components/ModelPage.svelte +295 -0
  565. package/dist/components/ModelPage.svelte.d.ts +9 -0
  566. package/dist/components/ModelWorkspace.svelte +488 -0
  567. package/dist/components/ModelWorkspace.svelte.d.ts +32 -0
  568. package/dist/components/PlannerEditBridge.svelte +36 -0
  569. package/dist/components/PlannerEditBridge.svelte.d.ts +3 -0
  570. package/dist/components/PlannerPalette.svelte +38 -0
  571. package/dist/components/PlannerPalette.svelte.d.ts +18 -0
  572. package/dist/components/RecipeCards.svelte +145 -0
  573. package/dist/components/RecipeCards.svelte.d.ts +3 -0
  574. package/dist/components/RecipeHelp.svelte +54 -0
  575. package/dist/components/RecipeHelp.svelte.d.ts +9 -0
  576. package/dist/components/RecipeOptions.svelte +160 -0
  577. package/dist/components/RecipeOptions.svelte.d.ts +9 -0
  578. package/dist/components/RecordFeatures.svelte +240 -0
  579. package/dist/components/RecordFeatures.svelte.d.ts +3 -0
  580. package/dist/components/RelationField.svelte +175 -0
  581. package/dist/components/RelationField.svelte.d.ts +16 -0
  582. package/dist/components/SectionActions.svelte +91 -0
  583. package/dist/components/SectionActions.svelte.d.ts +12 -0
  584. package/dist/components/SectionIcons.svelte +98 -0
  585. package/dist/components/SectionIcons.svelte.d.ts +15 -0
  586. package/dist/components/SectionOverview.svelte +65 -0
  587. package/dist/components/SectionOverview.svelte.d.ts +14 -0
  588. package/dist/components/SectionPage.svelte +230 -0
  589. package/dist/components/SectionPage.svelte.d.ts +7 -0
  590. package/dist/components/SettingsPanel.svelte +60 -0
  591. package/dist/components/SettingsPanel.svelte.d.ts +7 -0
  592. package/dist/components/ThemeBridge.svelte +56 -0
  593. package/dist/components/ThemeBridge.svelte.d.ts +3 -0
  594. package/dist/components/ThemeSection.svelte +167 -0
  595. package/dist/components/ThemeSection.svelte.d.ts +11 -0
  596. package/dist/components/VariantGridForm.svelte +309 -0
  597. package/dist/components/VariantGridForm.svelte.d.ts +12 -0
  598. package/dist/components/VoiceTyping.svelte +108 -0
  599. package/dist/components/VoiceTyping.svelte.d.ts +7 -0
  600. package/dist/cookbook/assemble.d.ts +16 -0
  601. package/dist/cookbook/assemble.js +29 -0
  602. package/dist/cookbook/file.d.ts +7 -0
  603. package/dist/cookbook/file.js +25 -0
  604. package/dist/cookbook/legacy.d.ts +9 -0
  605. package/dist/cookbook/legacy.js +87 -0
  606. package/dist/cookbook/migrate.d.ts +22 -0
  607. package/dist/cookbook/migrate.js +106 -0
  608. package/dist/cookbook/parse.d.ts +16 -0
  609. package/dist/cookbook/parse.js +246 -0
  610. package/dist/cookbook/storage.d.ts +45 -0
  611. package/dist/cookbook/storage.js +98 -0
  612. package/dist/cookbook/store.svelte.d.ts +94 -0
  613. package/dist/cookbook/store.svelte.js +231 -0
  614. package/dist/cookbook/types.d.ts +76 -0
  615. package/dist/cookbook/types.js +11 -0
  616. package/dist/cookbook/validate.d.ts +14 -0
  617. package/dist/cookbook/validate.js +29 -0
  618. package/dist/core/app.d.ts +37 -0
  619. package/dist/core/app.js +119 -0
  620. package/dist/core/catalog.d.ts +19 -0
  621. package/dist/core/catalog.js +9 -0
  622. package/dist/core/headless.d.ts +52 -0
  623. package/dist/core/headless.js +39 -0
  624. package/dist/core/index.d.ts +28 -0
  625. package/dist/core/index.js +28 -0
  626. package/dist/core/prompt.d.ts +38 -0
  627. package/dist/core/prompt.js +95 -0
  628. package/dist/core/reply.d.ts +60 -0
  629. package/dist/core/reply.js +89 -0
  630. package/dist/core/request.d.ts +15 -0
  631. package/dist/core/request.js +55 -0
  632. package/dist/data/children.d.ts +20 -0
  633. package/dist/data/children.js +80 -0
  634. package/dist/data/columns.d.ts +56 -0
  635. package/dist/data/columns.js +150 -0
  636. package/dist/data/context.d.ts +8 -0
  637. package/dist/data/context.js +19 -0
  638. package/dist/data/derived.d.ts +79 -0
  639. package/dist/data/derived.js +139 -0
  640. package/dist/data/display.d.ts +23 -0
  641. package/dist/data/display.js +84 -0
  642. package/dist/data/fakes.d.ts +52 -0
  643. package/dist/data/fakes.js +443 -0
  644. package/dist/data/format.d.ts +48 -0
  645. package/dist/data/format.js +121 -0
  646. package/dist/data/labels.d.ts +45 -0
  647. package/dist/data/labels.js +179 -0
  648. package/dist/data/packs.d.ts +95 -0
  649. package/dist/data/packs.js +830 -0
  650. package/dist/data/payments.d.ts +17 -0
  651. package/dist/data/payments.js +60 -0
  652. package/dist/data/planner-source.d.ts +7 -0
  653. package/dist/data/planner-source.js +32 -0
  654. package/dist/data/source.d.ts +119 -0
  655. package/dist/data/source.js +432 -0
  656. package/dist/features/catalogue.d.ts +96 -0
  657. package/dist/features/catalogue.js +225 -0
  658. package/dist/features/demo.d.ts +36 -0
  659. package/dist/features/demo.js +66 -0
  660. package/dist/features/palette.d.ts +39 -0
  661. package/dist/features/palette.js +53 -0
  662. package/dist/fields/address.d.ts +23 -0
  663. package/dist/fields/address.js +39 -0
  664. package/dist/fields/invalid.d.ts +2 -0
  665. package/dist/fields/invalid.js +8 -0
  666. package/dist/fields/modal.d.ts +7 -0
  667. package/dist/fields/modal.js +14 -0
  668. package/dist/fields/percent.d.ts +8 -0
  669. package/dist/fields/percent.js +16 -0
  670. package/dist/fields/renderer.d.ts +17 -0
  671. package/dist/fields/renderer.js +43 -0
  672. package/dist/forms/active.d.ts +16 -0
  673. package/dist/forms/active.js +24 -0
  674. package/dist/forms/fieldMap.d.ts +44 -0
  675. package/dist/forms/fieldMap.js +134 -0
  676. package/dist/forms/shared.d.ts +41 -0
  677. package/dist/forms/shared.js +138 -0
  678. package/dist/forms/stock.d.ts +28 -0
  679. package/dist/forms/stock.js +104 -0
  680. package/dist/forms/variantGrid.d.ts +83 -0
  681. package/dist/forms/variantGrid.js +283 -0
  682. package/dist/index.d.ts +17 -0
  683. package/dist/index.js +16 -0
  684. package/dist/inference/byo.svelte.d.ts +90 -0
  685. package/dist/inference/byo.svelte.js +295 -0
  686. package/dist/inference/config.d.ts +77 -0
  687. package/dist/inference/config.js +205 -0
  688. package/dist/inference/host.d.ts +40 -0
  689. package/dist/inference/host.js +57 -0
  690. package/dist/inference/openai.d.ts +59 -0
  691. package/dist/inference/openai.js +207 -0
  692. package/dist/inference/presets.d.ts +5 -0
  693. package/dist/inference/presets.js +46 -0
  694. package/dist/kitchen/client.d.ts +39 -0
  695. package/dist/kitchen/client.js +115 -0
  696. package/dist/kitchen/fragment.d.ts +30 -0
  697. package/dist/kitchen/fragment.js +49 -0
  698. package/dist/kitchen/state.svelte.d.ts +26 -0
  699. package/dist/kitchen/state.svelte.js +45 -0
  700. package/dist/library/apply.d.ts +17 -0
  701. package/dist/library/apply.js +32 -0
  702. package/dist/library/document.d.ts +12 -0
  703. package/dist/library/document.js +27 -0
  704. package/dist/library/icons.d.ts +6 -0
  705. package/dist/library/icons.js +26 -0
  706. package/dist/library/index.d.ts +8 -0
  707. package/dist/library/index.js +12 -0
  708. package/dist/library/library.json +788 -0
  709. package/dist/library/menu.d.ts +18 -0
  710. package/dist/library/menu.js +72 -0
  711. package/dist/library/state.svelte.d.ts +10 -0
  712. package/dist/library/state.svelte.js +28 -0
  713. package/dist/library/types.d.ts +57 -0
  714. package/dist/library/types.js +1 -0
  715. package/dist/overviews/definitions.d.ts +24 -0
  716. package/dist/overviews/definitions.js +97 -0
  717. package/dist/overviews/page.d.ts +21 -0
  718. package/dist/overviews/page.js +36 -0
  719. package/dist/overviews/registry.d.ts +44 -0
  720. package/dist/overviews/registry.js +191 -0
  721. package/dist/overviews/validate.d.ts +32 -0
  722. package/dist/overviews/validate.js +91 -0
  723. package/dist/planner/Planner.svelte +204 -0
  724. package/dist/planner/Planner.svelte.d.ts +4 -0
  725. package/dist/planner/app.svelte.d.ts +6 -0
  726. package/dist/planner/app.svelte.js +23 -0
  727. package/dist/planner/assistant.d.ts +46 -0
  728. package/dist/planner/assistant.js +122 -0
  729. package/dist/planner/commands/adapter.d.ts +121 -0
  730. package/dist/planner/commands/adapter.js +597 -0
  731. package/dist/planner/commands/catalog.d.ts +19 -0
  732. package/dist/planner/commands/catalog.js +54 -0
  733. package/dist/planner/commands/controller.svelte.d.ts +13 -0
  734. package/dist/planner/commands/controller.svelte.js +77 -0
  735. package/dist/planner/commands/index.d.ts +15 -0
  736. package/dist/planner/commands/index.js +15 -0
  737. package/dist/planner/commands/schemas.d.ts +25 -0
  738. package/dist/planner/commands/schemas.js +67 -0
  739. package/dist/planner/commands/slices.d.ts +18 -0
  740. package/dist/planner/commands/slices.js +49 -0
  741. package/dist/planner/commands/types.d.ts +80 -0
  742. package/dist/planner/commands/types.js +18 -0
  743. package/dist/planner/create.d.ts +4 -0
  744. package/dist/planner/create.js +22 -0
  745. package/dist/planner/instance.d.ts +15 -0
  746. package/dist/planner/instance.js +22 -0
  747. package/dist/planner/query.d.ts +16 -0
  748. package/dist/planner/query.js +28 -0
  749. package/dist/planner/selection.d.ts +15 -0
  750. package/dist/planner/selection.js +38 -0
  751. package/dist/planner/selection.svelte.d.ts +29 -0
  752. package/dist/planner/selection.svelte.js +54 -0
  753. package/dist/planner/tab.svelte.d.ts +11 -0
  754. package/dist/planner/tab.svelte.js +22 -0
  755. package/dist/planner/types.d.ts +41 -0
  756. package/dist/planner/types.js +1 -0
  757. package/dist/recipes/cards.d.ts +55 -0
  758. package/dist/recipes/cards.js +80 -0
  759. package/dist/recipes/features.d.ts +53 -0
  760. package/dist/recipes/features.js +97 -0
  761. package/dist/recipes/help/descriptions.json +373 -0
  762. package/dist/recipes/help.d.ts +121 -0
  763. package/dist/recipes/help.js +262 -0
  764. package/dist/recipes/index.d.ts +65 -0
  765. package/dist/recipes/index.js +95 -0
  766. package/dist/recipes/merge.d.ts +26 -0
  767. package/dist/recipes/merge.js +21 -0
  768. package/dist/recipes/overlay.json +409 -0
  769. package/dist/recipes/plan-data.d.ts +41 -0
  770. package/dist/recipes/plan-data.js +97 -0
  771. package/dist/recipes/plumbing.d.ts +70 -0
  772. package/dist/recipes/plumbing.js +185 -0
  773. package/dist/recipes/policy.d.ts +118 -0
  774. package/dist/recipes/policy.js +268 -0
  775. package/dist/recipes/resolve.d.ts +19 -0
  776. package/dist/recipes/resolve.js +65 -0
  777. package/dist/recipes/scope.d.ts +25 -0
  778. package/dist/recipes/scope.js +31 -0
  779. package/dist/recipes/sections.d.ts +49 -0
  780. package/dist/recipes/sections.js +84 -0
  781. package/dist/recipes/state.svelte.d.ts +67 -0
  782. package/dist/recipes/state.svelte.js +112 -0
  783. package/dist/recipes/types.d.ts +322 -0
  784. package/dist/recipes/types.js +8 -0
  785. package/dist/sections/entries.d.ts +30 -0
  786. package/dist/sections/entries.js +57 -0
  787. package/dist/sections/info.d.ts +16 -0
  788. package/dist/sections/info.js +39 -0
  789. package/dist/sections/path.d.ts +12 -0
  790. package/dist/sections/path.js +18 -0
  791. package/dist/settings/app-settings.d.ts +44 -0
  792. package/dist/settings/app-settings.js +138 -0
  793. package/dist/settings/currencies.d.ts +2 -0
  794. package/dist/settings/currencies.js +8 -0
  795. package/dist/theme/runtime.d.ts +14 -0
  796. package/dist/theme/runtime.js +27 -0
  797. package/dist/theme/theme.d.ts +47 -0
  798. package/dist/theme/theme.js +122 -0
  799. package/dist/upstream/CustomerSelect.svelte +60 -0
  800. package/dist/upstream/CustomerSelect.svelte.d.ts +17 -0
  801. package/dist/upstream/VendorSelect.svelte +60 -0
  802. package/dist/upstream/VendorSelect.svelte.d.ts +17 -0
  803. package/dist/upstream/overlay.d.ts +10 -0
  804. package/dist/upstream/overlay.js +49 -0
  805. package/dist/upstream/partySelect.d.ts +8 -0
  806. package/dist/upstream/partySelect.js +21 -0
  807. package/dist/upstream/partyTypes.d.ts +64 -0
  808. package/dist/upstream/partyTypes.js +8 -0
  809. package/dist/upstream/relations.d.ts +2 -0
  810. package/dist/upstream/relations.js +24 -0
  811. package/dist/upstream/selects.d.ts +26 -0
  812. package/dist/upstream/selects.js +20 -0
  813. package/dist/upstream/widgets.d.ts +20 -0
  814. package/dist/upstream/widgets.js +30 -0
  815. package/package.json +81 -3
@@ -0,0 +1,91 @@
1
+ /**
2
+ * The cookbook's `overviews` field: one sparse smrt-svelte `OverviewOverride`
3
+ * per overview id. A stored override is untrusted data. Each one is checked
4
+ * with `checkOverviewOverride` against its page's definition; what fails (an
5
+ * unknown or disallowed widget type, options outside the widget's schema, an
6
+ * unknown overview id, a malformed entry) is dropped and reported, never
7
+ * rendered or loaded, and only the canonical override is kept.
8
+ */
9
+ import { checkOverviewOverride, parseOverviewOverride, } from '@happyvertical/smrt-svelte/overview';
10
+ import { isOverviewId, sectionOverview } from "./definitions.js";
11
+ import { overviewRegistry } from "./registry.js";
12
+ const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
13
+ function describe(id, issue) {
14
+ const what = issue.widgetId
15
+ ? `widget ${issue.widgetId}${issue.type ? ` (${issue.type})` : ''}`
16
+ : 'an entry';
17
+ const options = issue.options?.length
18
+ ? `: ${issue.options.map((o) => `${o.key} ${o.code}`).join(', ')}`
19
+ : '';
20
+ return `Overview ${id}: ${what} was dropped (${issue.code}${options}).`;
21
+ }
22
+ /**
23
+ * The override without the parts an issue names: an added widget or a change
24
+ * to a default widget with that id. The rest of the visitor's edits survive.
25
+ */
26
+ function without(override, ids) {
27
+ const next = { ...override };
28
+ if (override.added) {
29
+ next.added = override.added.filter((widget) => !ids.has(widget.id));
30
+ }
31
+ if (override.changed) {
32
+ next.changed = Object.fromEntries(Object.entries(override.changed).filter(([id]) => !ids.has(id)));
33
+ }
34
+ return next;
35
+ }
36
+ /**
37
+ * Check one stored override. `checkOverviewOverride` is strict (any issue
38
+ * rejects); when it rejects, the offending widgets are taken out and the rest
39
+ * checked again, so one bad widget does not cost the visitor the others.
40
+ */
41
+ export function checkStoredOverride(id, raw) {
42
+ const definition = sectionOverview(id);
43
+ if (!definition) {
44
+ return {
45
+ override: null,
46
+ issues: [
47
+ {
48
+ widgetId: null,
49
+ type: null,
50
+ code: 'malformed',
51
+ message: 'not an overview id',
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ const first = checkOverviewOverride(definition, raw, overviewRegistry);
57
+ if (first.ok)
58
+ return { override: first.override, issues: [] };
59
+ const parsed = parseOverviewOverride(raw);
60
+ const bad = new Set(first.issues.flatMap((issue) => (issue.widgetId ? [issue.widgetId] : [])));
61
+ if (!parsed.override)
62
+ return { override: null, issues: first.issues };
63
+ const second = checkOverviewOverride(definition, without(parsed.override, bad), overviewRegistry);
64
+ return second.ok
65
+ ? { override: second.override, issues: first.issues }
66
+ : { override: null, issues: [...first.issues, ...second.issues] };
67
+ }
68
+ /**
69
+ * Read a cookbook's `overviews` value. `null` when it is not an object (the
70
+ * caller rejects the file, as for any malformed field); otherwise every entry
71
+ * is checked and what fails is dropped and reported.
72
+ */
73
+ export function parseOverviews(input, layout) {
74
+ if (!isObject(input))
75
+ return null;
76
+ const entries = [];
77
+ const dropped = [];
78
+ for (const id of Object.keys(input).sort()) {
79
+ if (!isOverviewId(id, layout)) {
80
+ dropped.push(`Overview ${id} is not a page in this app and was dropped.`);
81
+ continue;
82
+ }
83
+ const { override, issues } = checkStoredOverride(id, input[id]);
84
+ for (const issue of issues)
85
+ dropped.push(describe(id, issue));
86
+ if (override)
87
+ entries.push([id, override]);
88
+ }
89
+ // fromEntries defines own keys, so a "__proto__" id cannot touch the prototype.
90
+ return { overviews: Object.fromEntries(entries), dropped };
91
+ }
@@ -0,0 +1,204 @@
1
+ <script lang="ts">
2
+ import { Provider, tryGetAppStateContext } from '@happyvertical/smrt-svelte';
3
+ import {
4
+ ShellLayoutController,
5
+ ShellLayoutEditor,
6
+ useShellLayout,
7
+ } from '@happyvertical/smrt-svelte/workspace';
8
+ import { Tabs } from '@happyvertical/smrt-ui';
9
+ import { onMount, untrack } from 'svelte';
10
+ import CookbooksPanel from '../components/CookbooksPanel.svelte';
11
+ import ExportPanel from '../components/ExportPanel.svelte';
12
+ import FeaturesPanel from '../components/FeaturesPanel.svelte';
13
+ import RecipeCards from '../components/RecipeCards.svelte';
14
+ import SettingsPanel from '../components/SettingsPanel.svelte';
15
+ import { browserStorage } from '../cookbook/storage.js';
16
+ import { cookbookStore } from '../cookbook/store.svelte.js';
17
+ import { provideDataSource, tryUseDataSource } from '../data/context.js';
18
+ import { createPlannerDataSource } from '../data/planner-source.js';
19
+ import { cookbookNavGroups } from '../library/menu.js';
20
+ import { libraryState } from '../library/state.svelte.js';
21
+ import { recipeState } from '../recipes/state.svelte.js';
22
+ import { setBasePath } from './app.svelte.js';
23
+ import { createPlannerAssistant } from './assistant.js';
24
+ import { PLANNER_TAB_IDS, type PlannerTabId } from './commands/index.js';
25
+ import { plannerController, plannerRuntime } from './instance.js';
26
+ import { plannerTab } from './tab.svelte.js';
27
+ import type { PlannerProps } from './types.js';
28
+
29
+ let {
30
+ controller = plannerController,
31
+ basePath,
32
+ inference,
33
+ layout = 'own',
34
+ persistence = 'self',
35
+ themeControls = false,
36
+ tabs = PLANNER_TAB_IDS,
37
+ onready,
38
+ }: PlannerProps = $props();
39
+
40
+ // Links to planner pages carry the base; set before anything renders them.
41
+ $effect.pre(() => {
42
+ if (basePath !== undefined) setBasePath(basePath);
43
+ });
44
+
45
+ // Generated views and the Cookbooks tab read sample records from a data
46
+ // source: use the host's, else make the planner's own.
47
+ const dataSource =
48
+ tryUseDataSource() ?? provideDataSource(createPlannerDataSource());
49
+
50
+ // smrt-svelte's inputs read the app state. Inside a host's own provider (or
51
+ // the static app's AppShell) use that; otherwise the planner brings one.
52
+ const hasAppState = tryGetAppStateContext() !== null;
53
+
54
+ const labels: Record<PlannerTabId, string> = {
55
+ cookbooks: 'Cookbooks',
56
+ recipes: 'Recipes',
57
+ features: 'Features',
58
+ layout: 'Layout',
59
+ settings: 'Settings',
60
+ export: 'Export',
61
+ };
62
+ const shown = $derived(tabs.filter((id) => PLANNER_TAB_IDS.includes(id)));
63
+ const items = $derived(shown.map((id) => ({ id, label: labels[id] })));
64
+ const active = $derived(
65
+ shown.includes(plannerTab.active)
66
+ ? plannerTab.active
67
+ : (shown[0] ?? 'recipes'),
68
+ );
69
+
70
+ // The headless layout controller: the menu the cookbook generates, edited
71
+ // through the cookbook store, with no AppShell around.
72
+ // Fixed at mount: the two editors are different objects.
73
+ const layoutMode = untrack(() => layout);
74
+ const ownLayout =
75
+ layoutMode === 'own'
76
+ ? new ShellLayoutController({
77
+ nav: () => [],
78
+ groups: () =>
79
+ cookbookNavGroups({
80
+ recipes: recipeState.ids,
81
+ features: recipeState.features,
82
+ }),
83
+ panels: () => undefined,
84
+ layout: () => cookbookStore.layout,
85
+ editable: () => true,
86
+ commit: (next) => cookbookStore.setLayout(next),
87
+ })
88
+ : null;
89
+ const shellLayout = layoutMode === 'shell' ? useShellLayout() : null;
90
+
91
+ const select = (id: string) => {
92
+ const tab = PLANNER_TAB_IDS.find((t) => t === id);
93
+ if (tab) plannerTab.active = tab;
94
+ };
95
+
96
+ // The controller's focus -> the tab on screen, and back, each only on a
97
+ // difference, so a foreign controller and the app's own both stay in step.
98
+ onMount(() => {
99
+ const stop = controller.subscribe((snapshot) => {
100
+ const tab = snapshot.focus.tab;
101
+ if (tab && tab !== plannerTab.active) plannerTab.active = tab;
102
+ });
103
+ return stop;
104
+ });
105
+ $effect(() => {
106
+ const tab = plannerTab.active;
107
+ untrack(() => {
108
+ if (controller.snapshot().focus.tab !== tab) {
109
+ controller.run({ name: 'focus', input: { tab } });
110
+ }
111
+ });
112
+ });
113
+
114
+ // A library cookbook applied by a command regenerates the sample records.
115
+ onMount(() => {
116
+ const previous = plannerRuntime.onReplaced;
117
+ plannerRuntime.onReplaced = () => dataSource.reset?.();
118
+ return () => {
119
+ plannerRuntime.onReplaced = previous;
120
+ };
121
+ });
122
+
123
+ // Saved in this browser, unless the host looks after it.
124
+ onMount(() => {
125
+ if (persistence !== 'self') return;
126
+ if (!cookbookStore.loaded) {
127
+ libraryState.load();
128
+ cookbookStore.hydrate('', browserStorage());
129
+ }
130
+ });
131
+ $effect(() => {
132
+ if (persistence !== 'self') return;
133
+ // Reading it all (layout is deep) subscribes the effect to every part.
134
+ void JSON.stringify(cookbookStore.snapshot());
135
+ cookbookStore.scheduleSave();
136
+ });
137
+
138
+ onMount(() => {
139
+ const assistant = inference
140
+ ? createPlannerAssistant(controller, inference)
141
+ : undefined;
142
+ onready?.({ controller, ...(assistant ? { assistant } : {}) });
143
+ });
144
+ </script>
145
+
146
+ <svelte:window onpagehide={() => persistence === 'self' && cookbookStore.flush()} />
147
+
148
+ {#snippet view()}
149
+ <div class="planner">
150
+ <Tabs tabs={items} {active} onchange={select} aria-label="Planner">
151
+ {#if shown.includes('cookbooks')}
152
+ <div hidden={active !== 'cookbooks'}><CookbooksPanel /></div>
153
+ {/if}
154
+ {#if shown.includes('recipes')}
155
+ <div hidden={active !== 'recipes'}><RecipeCards /></div>
156
+ {/if}
157
+ {#if shown.includes('features')}
158
+ <div hidden={active !== 'features'}><FeaturesPanel /></div>
159
+ {/if}
160
+ {#if shown.includes('layout')}
161
+ <div hidden={active !== 'layout'} class="pane">
162
+ <p class="meta">
163
+ Reorder, move or hide navigation entries and choose which panels show.
164
+ The layout is saved with the cookbook.
165
+ </p>
166
+ <ShellLayoutEditor controller={ownLayout ?? shellLayout ?? undefined} />
167
+ </div>
168
+ {/if}
169
+ {#if shown.includes('settings')}
170
+ <div hidden={active !== 'settings'}><SettingsPanel {themeControls} /></div>
171
+ {/if}
172
+ {#if shown.includes('export')}
173
+ <div hidden={active !== 'export'}><ExportPanel /></div>
174
+ {/if}
175
+ </Tabs>
176
+ </div>
177
+ {/snippet}
178
+
179
+ {#if hasAppState}
180
+ {@render view()}
181
+ {:else}
182
+ <Provider>{@render view()}</Provider>
183
+ {/if}
184
+
185
+ <style>
186
+ .planner :global(.tab-panel) {
187
+ padding-top: var(--smrt-spacing-4);
188
+ }
189
+
190
+ .pane {
191
+ display: grid;
192
+ gap: var(--smrt-spacing-3);
193
+ }
194
+
195
+ /* `display: grid` would otherwise override the inactive pane's `hidden`. */
196
+ .pane[hidden] {
197
+ display: none;
198
+ }
199
+
200
+ .meta {
201
+ margin: 0;
202
+ color: var(--smrt-color-on-surface-variant);
203
+ }
204
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { PlannerProps } from './types.ts';
2
+ declare const Planner: import("svelte").Component<PlannerProps, {}, "">;
3
+ type Planner = ReturnType<typeof Planner>;
4
+ export default Planner;
@@ -0,0 +1,6 @@
1
+ export declare function setBasePath(path: string): void;
2
+ export declare function getBasePath(): string;
3
+ /** The query string carrying the shareable URL state (the package selection). */
4
+ export declare function appQuery(): string;
5
+ /** An in-app path (`/m/commerce/Order/`) carrying the current app state. */
6
+ export declare function appHref(path: string): string;
@@ -0,0 +1,23 @@
1
+ import { composeQuery } from "./query.js";
2
+ import { selection } from "./selection.svelte.js";
3
+ /**
4
+ * Where the planner's pages live: `''` at the site root, `/planner` under a
5
+ * sub-path. The static app sets it from SvelteKit's `base`; a host that mounts
6
+ * the `Planner` component passes its own `basePath`. Kept here, not read from
7
+ * `$app/paths`, so the planner needs no SvelteKit router to build its links.
8
+ */
9
+ let basePath = '';
10
+ export function setBasePath(path) {
11
+ basePath = path.replace(/\/+$/, '');
12
+ }
13
+ export function getBasePath() {
14
+ return basePath;
15
+ }
16
+ /** The query string carrying the shareable URL state (the package selection). */
17
+ export function appQuery() {
18
+ return composeQuery({ packages: selection.ids });
19
+ }
20
+ /** An in-app path (`/m/commerce/Order/`) carrying the current app state. */
21
+ export function appHref(path) {
22
+ return `${basePath}${path}${appQuery()}`;
23
+ }
@@ -0,0 +1,46 @@
1
+ import { ThemeUndos } from '../assistant/theme-undo.svelte.ts';
2
+ import { type BrowserAssistantTransport, type ChatModel } from '../assistant/transport.ts';
3
+ import { type InferenceConfig } from '../inference/config.ts';
4
+ import type { PlannerController } from './commands/index.ts';
5
+ /**
6
+ * Give the planner a model yourself: anything that implements `message()`
7
+ * (the browser's WebLLM, an API provider behind your server, a test double).
8
+ * Choosing and loading it is the host's job; the planner only asks it for one
9
+ * structured reply per turn.
10
+ */
11
+ export interface PlannerChatInference {
12
+ /** The model, or a function returning it (null until one is loaded). */
13
+ chat: ChatModel | (() => ChatModel | null);
14
+ /** Called with each reply the model wrote, e.g. to read it aloud. */
15
+ onReply?: (text: string) => void;
16
+ }
17
+ /**
18
+ * Or name an inference mode, the same shape as `planner.config.json`'s
19
+ * `inference` (it overrides the file):
20
+ * - `host`: POST to `host.endpoint` (see `docs/inference-host.md`).
21
+ * - `byo`: the OpenAI-compatible endpoint the visitor connected in this
22
+ * browser; none until they have.
23
+ * - `browser`: no model of its own; pass `chat` to supply one.
24
+ * An invalid config falls back to `browser`, reported as `assistant.notice`.
25
+ */
26
+ export type PlannerConfigInference = InferenceConfig & {
27
+ onReply?: (text: string) => void;
28
+ };
29
+ export type PlannerInference = PlannerChatInference | PlannerConfigInference;
30
+ export interface PlannerAssistant {
31
+ /** For smrt-chat's `AssistantDock` (`transport`). */
32
+ transport: BrowserAssistantTransport;
33
+ /** The theme changes it made, each undoable; render with `toolCallData`. */
34
+ themeUndos: ThemeUndos;
35
+ /** The mode in use. */
36
+ mode: InferenceConfig['mode'];
37
+ /** Why the given `inference` was replaced by `browser`, when it was. */
38
+ notice?: string;
39
+ }
40
+ /**
41
+ * The planner's assistant for any controller: a chat transport whose every
42
+ * change is a command on `controller`, so it works against a host's own mount
43
+ * as well as the static app. Cookbook proposals are not offered here (they
44
+ * need a confirmation card the host would render); everything else is.
45
+ */
46
+ export declare function createPlannerAssistant(controller: PlannerController, inference: PlannerInference): PlannerAssistant;
@@ -0,0 +1,122 @@
1
+ import { ThemeUndos } from "../assistant/theme-undo.svelte.js";
2
+ import { createBrowserAssistantTransport, } from "../assistant/transport.js";
3
+ import { browserStorage } from "../cookbook/storage.js";
4
+ import { savedByoChat } from "../inference/byo.svelte.js";
5
+ import { configFromProp } from "../inference/config.js";
6
+ import { createHostChat } from "../inference/host.js";
7
+ import { recipes } from "../recipes/index.js";
8
+ /** The controller's recipes as the store the assistant reads. Changes are commands. */
9
+ function recipeStoreOf(controller) {
10
+ return {
11
+ get ids() {
12
+ return controller.snapshot().recipes.map((recipe) => recipe.id);
13
+ },
14
+ add: (...ids) => void controller.run({ name: 'add_recipes', input: { ids } }),
15
+ remove: (...ids) => void controller.run({ name: 'remove_recipes', input: { ids } }),
16
+ };
17
+ }
18
+ function settingsStoreOf(controller) {
19
+ return {
20
+ read: () => {
21
+ const { currency, taxRate, paymentTerms } = controller.snapshot().settings;
22
+ return {
23
+ currency,
24
+ taxRate: Number((taxRate / 100).toFixed(6)),
25
+ paymentTerms,
26
+ };
27
+ },
28
+ write: (settings) => {
29
+ void controller.run({
30
+ name: 'set_settings',
31
+ input: {
32
+ currency: settings.currency,
33
+ taxRate: Number((settings.taxRate * 100).toFixed(4)),
34
+ ...(settings.paymentTerms
35
+ ? { paymentTerms: settings.paymentTerms }
36
+ : {}),
37
+ },
38
+ });
39
+ },
40
+ };
41
+ }
42
+ function themeStoreOf(controller) {
43
+ return {
44
+ read: () => {
45
+ const { preset, primary, colorScheme } = controller.snapshot().theme;
46
+ const theme = {};
47
+ if (preset)
48
+ theme.preset = preset;
49
+ if (primary)
50
+ theme.custom = { primary };
51
+ if (colorScheme !== 'system') {
52
+ theme.colorScheme = colorScheme;
53
+ }
54
+ return Object.keys(theme).length ? theme : undefined;
55
+ },
56
+ write: (theme) => {
57
+ if (!theme) {
58
+ void controller.run({ name: 'reset_theme', input: {} });
59
+ return;
60
+ }
61
+ void controller.run({ name: 'reset_theme', input: {} });
62
+ void controller.run({
63
+ name: 'set_theme',
64
+ input: {
65
+ ...(theme.preset ? { preset: theme.preset } : {}),
66
+ ...(theme.custom ? { primary: theme.custom.primary } : {}),
67
+ ...(theme.colorScheme ? { colorScheme: theme.colorScheme } : {}),
68
+ },
69
+ });
70
+ },
71
+ };
72
+ }
73
+ /**
74
+ * The planner's assistant for any controller: a chat transport whose every
75
+ * change is a command on `controller`, so it works against a host's own mount
76
+ * as well as the static app. Cookbook proposals are not offered here (they
77
+ * need a confirmation card the host would render); everything else is.
78
+ */
79
+ export function createPlannerAssistant(controller, inference) {
80
+ const theme = themeStoreOf(controller);
81
+ let mode = 'browser';
82
+ let notice;
83
+ let chat = () => null;
84
+ if ('chat' in inference) {
85
+ const given = inference.chat;
86
+ chat = () => (typeof given === 'function' ? given() : given);
87
+ }
88
+ else {
89
+ const result = configFromProp(inference);
90
+ notice = result.notice;
91
+ mode = result.config.mode;
92
+ if (result.config.mode === 'host' && result.config.host) {
93
+ const host = createHostChat({
94
+ endpoint: result.config.host.endpoint,
95
+ snapshot: () => controller.snapshot(),
96
+ });
97
+ chat = () => host;
98
+ }
99
+ else if (result.config.mode === 'byo') {
100
+ const presets = result.config.byo?.presets;
101
+ chat = () => savedByoChat(browserStorage(), presets, undefined, result.config.credentialPersistence);
102
+ }
103
+ }
104
+ const themeUndos = new ThemeUndos(theme, controller);
105
+ const transport = createBrowserAssistantTransport({
106
+ model: chat,
107
+ acceptCommands: mode === 'host',
108
+ unavailable: mode === 'byo'
109
+ ? 'Connect your model on the AI page first, then I can help.'
110
+ : 'No model is connected yet, so I cannot help. The planner works without one.',
111
+ store: recipeStoreOf(controller),
112
+ recipes,
113
+ // No cookbook proposals: they need a confirmation card the host renders.
114
+ cookbooks: [],
115
+ settings: settingsStoreOf(controller),
116
+ theme,
117
+ themeUndos,
118
+ controller,
119
+ onReply: inference.onReply,
120
+ });
121
+ return { transport, themeUndos, mode, ...(notice ? { notice } : {}) };
122
+ }
@@ -0,0 +1,121 @@
1
+ import { type CookbookEngine, type EngineCatalog, type EngineState } from '@happyvertical/smrt-core/cookbook/engine';
2
+ import type { Cookbook, CookbookResult } from '../../cookbook/types.ts';
3
+ import { toolsFor } from './schemas.ts';
4
+ import { type BatchResult, type CommandResult, type PlannerCommand, type PlannerTabId, type PlanSnapshot, type RunOptions } from './types.ts';
5
+ /** How the controller reads and moves the planner's own view. */
6
+ export interface PlannerNavigation {
7
+ getTab(): PlannerTabId | null;
8
+ setTab(tab: PlannerTabId): void;
9
+ /** Open a menu section's page; the host decides what that means. */
10
+ setSection?(sectionId: string): void;
11
+ }
12
+ export interface PlannerControllerOptions {
13
+ /** The planner tab, so `focus` and the snapshot follow the real UI. */
14
+ navigation?: PlannerNavigation;
15
+ /**
16
+ * Called after a library cookbook was applied, so the app can regenerate its
17
+ * sample records (they are not part of a cookbook), as the Cookbooks tab does.
18
+ */
19
+ onReplaced?: () => void;
20
+ }
21
+ /** Where the app keeps the document the engine edits. */
22
+ export interface PlannerPort {
23
+ /**
24
+ * The app's current document. Give it when something other than the engine
25
+ * (the UI) can change the document: it is compared on every call, and a
26
+ * difference is adopted as one manual edit.
27
+ */
28
+ read?(): unknown;
29
+ /** The library cookbook the app was last set up from, if the app tracks it. */
30
+ applied?(): string | null;
31
+ /** The engine changed the document: put it where the app keeps it. */
32
+ write?(cookbook: Cookbook, change: {
33
+ /** The commands that ran (a batch lists each; an undo is `undo`). */
34
+ commands: readonly string[];
35
+ /**
36
+ * A whole-app command ran (`apply_cookbook`, `import_cookbook`): take
37
+ * everything from `cookbook`, page customisations included. Otherwise
38
+ * the app's own page customisations are kept.
39
+ */
40
+ replaced: boolean;
41
+ /** The library cookbook the engine records the plan as set up from. */
42
+ applied: string | null;
43
+ /** A library cookbook was just set up: select it and reset sample data. */
44
+ libraryApplied: boolean;
45
+ }): void;
46
+ /** The app's own check of an imported document (it may migrate or trim it). */
47
+ prepareImport?(document: unknown): CookbookResult;
48
+ }
49
+ /** A value read and written by the adapter; reactive in the browser. */
50
+ export interface Cell<T> {
51
+ get(): T;
52
+ set(value: T): void;
53
+ }
54
+ /** A plain cell. */
55
+ export declare function cell<T>(initial: T): Cell<T>;
56
+ /** What differs between the browser controller and plain Node. All optional. */
57
+ export interface AdapterEnv {
58
+ /** Cells for state a snapshot shows; the browser passes `$state` ones. */
59
+ section?: Cell<string | null>;
60
+ tab?: Cell<PlannerTabId | null>;
61
+ /** The first listener arrived / the last one left (the browser starts effects). */
62
+ watch?: {
63
+ start(): void;
64
+ stop(): void;
65
+ };
66
+ }
67
+ /**
68
+ * The planner as a headless object: typed commands in, a compact snapshot
69
+ * out. The planner's own assistant, a host page, an MCP server and the CLI
70
+ * all drive the app through this one seam.
71
+ */
72
+ export interface PlannerController {
73
+ /**
74
+ * Run one command. Never throws: a bad command, unknown id or refused edit
75
+ * comes back as `{ ok: false, error }` and leaves the app unchanged.
76
+ */
77
+ run(command: PlannerCommand, options?: RunOptions): CommandResult;
78
+ /** Untyped form for commands that arrive as data (a model's tool call). */
79
+ run(command: unknown, options?: RunOptions): CommandResult;
80
+ /**
81
+ * Run several commands all-or-nothing (the engine's `batch`): any failure
82
+ * leaves the plan exactly as it was.
83
+ */
84
+ batch(batch: unknown): BatchResult;
85
+ /** The current plan, read-only and compact. */
86
+ snapshot(): PlanSnapshot;
87
+ /**
88
+ * Call `listener` with the current snapshot now and after every change,
89
+ * whether a command or a manual edit made it. Returns the unsubscribe.
90
+ */
91
+ subscribe(listener: (snapshot: PlanSnapshot) => void): () => void;
92
+ }
93
+ /** The adapter plus the hooks the browser wrapper's effects need. */
94
+ export interface PlannerAdapter extends PlannerController {
95
+ /** The plan as a cookbook document. */
96
+ cookbook(): Cookbook;
97
+ /** Undo the most recent undoable change; `not_found` when there is none. */
98
+ undo(): CommandResult;
99
+ /** The engine's state, to persist and resume from. */
100
+ state(): EngineState;
101
+ /** The tool definitions this plan validates against, `focus` included. */
102
+ readonly tools: ReturnType<typeof toolsFor>;
103
+ /** The atomic-batch tool definition. */
104
+ readonly batchTool: CookbookEngine['batchTool'];
105
+ /**
106
+ * Build the snapshot and return its signature. Reading it subscribes an
107
+ * effect to every store it is built from; it does not notify.
108
+ */
109
+ observe(): string;
110
+ /** Tell listeners about the current snapshot if it changed since they heard. */
111
+ deliver(): void;
112
+ }
113
+ export interface PlannerAdapterOptions {
114
+ catalog: EngineCatalog;
115
+ /** Start from this document (strictly checked; the call throws if invalid). */
116
+ cookbook?: unknown;
117
+ port?: PlannerPort;
118
+ options?: PlannerControllerOptions;
119
+ env?: AdapterEnv;
120
+ }
121
+ export declare function createPlannerAdapter(config: PlannerAdapterOptions): PlannerAdapter;