@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,77 @@
1
+ import { untrack } from 'svelte';
2
+ import { cookbookStore, } from "../../cookbook/store.svelte.js";
3
+ import { parseCookbook } from "../../cookbook/validate.js";
4
+ import { setSamplePack } from "../../data/packs.js";
5
+ import { libraryState } from "../../library/state.svelte.js";
6
+ import { createPlannerAdapter, } from "./adapter.js";
7
+ import { engineCatalog } from "./catalog.js";
8
+ /** A reactive cell: reading it in an effect subscribes to it. */
9
+ function reactiveCell(initial) {
10
+ let value = $state(initial);
11
+ return {
12
+ get: () => value,
13
+ set: (next) => {
14
+ value = next;
15
+ },
16
+ };
17
+ }
18
+ /** The app's stores as the engine's port: where the document is read and written. */
19
+ export function portFromStore(store) {
20
+ return {
21
+ read: () => store.snapshot(),
22
+ applied: () => libraryState.active,
23
+ prepareImport: (document) => parseCookbook(document),
24
+ write(cookbook, { replaced, applied, libraryApplied }) {
25
+ // A page's customisations are edited outside the plan; only a command
26
+ // that replaces the whole app brings its own.
27
+ const next = replaced
28
+ ? cookbook
29
+ : { ...cookbook, overviews: store.snapshot().overviews };
30
+ if (replaced)
31
+ store.replace(next);
32
+ else
33
+ store.apply(next);
34
+ if (libraryApplied && applied) {
35
+ libraryState.select(applied);
36
+ setSamplePack(applied);
37
+ }
38
+ },
39
+ };
40
+ }
41
+ /**
42
+ * The controller for the planner app over `store` (the app's is
43
+ * `cookbookStore`): smrt's cookbook engine behind the planner's command names,
44
+ * with the stores as its document and the planner tab and section as `focus`.
45
+ * Every UI path that changes the app is a command here, and the assistant, the
46
+ * palette, a host page and the MCP and CLI servers use the same ones.
47
+ */
48
+ export function createPlannerController(store = cookbookStore, options = {}) {
49
+ let stopEffects;
50
+ const adapter = createPlannerAdapter({
51
+ catalog: engineCatalog(),
52
+ port: portFromStore(store),
53
+ options,
54
+ env: {
55
+ section: reactiveCell(null),
56
+ tab: reactiveCell(null),
57
+ watch: {
58
+ start() {
59
+ if (stopEffects)
60
+ return;
61
+ stopEffects = $effect.root(() => {
62
+ $effect(() => {
63
+ // Reading the snapshot subscribes to every store it is built from.
64
+ adapter.observe();
65
+ untrack(adapter.deliver);
66
+ });
67
+ });
68
+ },
69
+ stop() {
70
+ stopEffects?.();
71
+ stopEffects = undefined;
72
+ },
73
+ },
74
+ },
75
+ });
76
+ return adapter;
77
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The planner command set: smrt's cookbook command engine
3
+ * (`@happyvertical/smrt-core/cookbook/engine`) behind the planner's names, plus
4
+ * `focus`; typed, versioned commands that drive the planner, a compact snapshot
5
+ * of its state, and JSON Schemas for every command's input (use `commandTools`
6
+ * directly as LLM or MCP tool definitions).
7
+ *
8
+ * @module
9
+ */
10
+ export { type Cell, createPlannerAdapter, type PlannerAdapter, type PlannerAdapterOptions, type PlannerController, type PlannerControllerOptions, type PlannerNavigation, type PlannerPort, } from './adapter.ts';
11
+ export { buildEngineCatalog, engineCatalog, restrictCatalog, } from './catalog.ts';
12
+ export { createPlannerController, portFromStore, } from './controller.svelte.ts';
13
+ export { buildCommandTools, COMMAND_NAMES, type CommandTool, checkSchema, commandSchemas, commandTools, type JsonSchema, } from './schemas.ts';
14
+ export { createSliceController, portFromSlices } from './slices.ts';
15
+ export { type BatchResult, type CommandError, type CommandErrorCode, type CommandInputs, type CommandName, type CommandReceipt, type CommandResult, type ExportData, PLANNER_COMMANDS_VERSION, PLANNER_TAB_IDS, type PlannerCommand, type PlannerTabId, type PlanSnapshot, type RecipeChanges, type RunOptions, } from './types.ts';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The planner command set: smrt's cookbook command engine
3
+ * (`@happyvertical/smrt-core/cookbook/engine`) behind the planner's names, plus
4
+ * `focus`; typed, versioned commands that drive the planner, a compact snapshot
5
+ * of its state, and JSON Schemas for every command's input (use `commandTools`
6
+ * directly as LLM or MCP tool definitions).
7
+ *
8
+ * @module
9
+ */
10
+ export { createPlannerAdapter, } from "./adapter.js";
11
+ export { buildEngineCatalog, engineCatalog, restrictCatalog, } from "./catalog.js";
12
+ export { createPlannerController, portFromStore, } from "./controller.svelte.js";
13
+ export { buildCommandTools, COMMAND_NAMES, checkSchema, commandSchemas, commandTools, } from "./schemas.js";
14
+ export { createSliceController, portFromSlices } from "./slices.js";
15
+ export { PLANNER_COMMANDS_VERSION, PLANNER_TAB_IDS, } from "./types.js";
@@ -0,0 +1,25 @@
1
+ import { type EngineCatalog, type CommandTool as EngineCommandTool, type JsonSchema } from '@happyvertical/smrt-core/cookbook/engine';
2
+ import { type CommandName } from './types.ts';
3
+ export type { JsonSchema };
4
+ /** One command as an LLM or MCP tool definition. */
5
+ export interface CommandTool extends Omit<EngineCommandTool, 'name'> {
6
+ name: CommandName;
7
+ }
8
+ /** The engine's tools for `catalog`, with the planner's `focus` after them. */
9
+ export declare function toolsFor(catalog: EngineCatalog): CommandTool[];
10
+ /**
11
+ * Build every command's tool definition. `recipeIds` and `cookbookIds` become
12
+ * enums, so grammar-constrained decoding cannot name one that does not exist.
13
+ */
14
+ export declare function buildCommandTools(recipeIds: readonly string[], cookbookIds: readonly string[]): CommandTool[];
15
+ /** Every command as a tool definition, for the planner's own recipes and cookbooks. */
16
+ export declare const commandTools: readonly CommandTool[];
17
+ /** Every command's input JSON Schema, by name: ready to use as a tool's `inputSchema`. */
18
+ export declare const commandSchemas: Readonly<Record<CommandName, JsonSchema>>;
19
+ export declare const COMMAND_NAMES: readonly CommandName[];
20
+ /**
21
+ * Check a value against a command schema. Returns the first problem as a
22
+ * sentence naming the path, or null. The engine's own validator, so the
23
+ * exported schemas and the runtime cannot drift.
24
+ */
25
+ export declare function checkSchema(schema: JsonSchema, value: unknown, path?: string): string | null;
@@ -0,0 +1,67 @@
1
+ import { buildCommandTools as buildEngineTools, checkSchema as checkEngineSchema, } from '@happyvertical/smrt-core/cookbook/engine';
2
+ import { libraryCookbooks } from "../../library/index.js";
3
+ import { recipes } from "../../recipes/index.js";
4
+ import { engineCatalog } from "./catalog.js";
5
+ import { PLANNER_TAB_IDS } from "./types.js";
6
+ /**
7
+ * `focus` is the one command the planner adds to the engine's: it moves the
8
+ * view, not the document, so the engine has no such command.
9
+ */
10
+ const FOCUS_TOOL = {
11
+ name: 'focus',
12
+ description: "Move the planner's view to a tab and/or a menu section. Navigation only; it changes nothing in the plan.",
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ tab: {
17
+ enum: [...PLANNER_TAB_IDS],
18
+ description: 'The tab to open.',
19
+ },
20
+ section: {
21
+ type: 'string',
22
+ minLength: 1,
23
+ maxLength: 200,
24
+ description: 'The id of a menu section, as the plan snapshot\'s "sections" lists it.',
25
+ },
26
+ },
27
+ additionalProperties: false,
28
+ },
29
+ };
30
+ /** The engine's tools for `catalog`, with the planner's `focus` after them. */
31
+ export function toolsFor(catalog) {
32
+ return [...buildEngineTools(catalog), FOCUS_TOOL];
33
+ }
34
+ /**
35
+ * Build every command's tool definition. `recipeIds` and `cookbookIds` become
36
+ * enums, so grammar-constrained decoding cannot name one that does not exist.
37
+ */
38
+ export function buildCommandTools(recipeIds, cookbookIds) {
39
+ return toolsFor({
40
+ ...engineCatalog(),
41
+ recipes: recipeIds.map((id) => ({
42
+ id,
43
+ label: id,
44
+ models: [],
45
+ nav: [],
46
+ requires: [],
47
+ })),
48
+ cookbooks: cookbookIds.map((id) => ({
49
+ id,
50
+ name: id,
51
+ document: {},
52
+ })),
53
+ });
54
+ }
55
+ /** Every command as a tool definition, for the planner's own recipes and cookbooks. */
56
+ export const commandTools = buildCommandTools(recipes.map((recipe) => recipe.id), libraryCookbooks.map((cookbook) => cookbook.id));
57
+ /** Every command's input JSON Schema, by name: ready to use as a tool's `inputSchema`. */
58
+ export const commandSchemas = Object.fromEntries(commandTools.map((tool) => [tool.name, tool.inputSchema]));
59
+ export const COMMAND_NAMES = commandTools.map((tool) => tool.name);
60
+ /**
61
+ * Check a value against a command schema. Returns the first problem as a
62
+ * sentence naming the path, or null. The engine's own validator, so the
63
+ * exported schemas and the runtime cannot drift.
64
+ */
65
+ export function checkSchema(schema, value, path = 'input') {
66
+ return checkEngineSchema(schema, value, path)?.message ?? null;
67
+ }
@@ -0,0 +1,18 @@
1
+ import type { RecipeStore, SettingsStore, ThemeStore } from '../../assistant/change.ts';
2
+ import { type PlannerController, type PlannerControllerOptions, type PlannerPort } from './adapter.ts';
3
+ /**
4
+ * Just the slices of the app the assistant works with (recipes, settings and
5
+ * theme) as the engine's document, for hosts that have no more than that and for
6
+ * tests. A command changes the slices through their own `add`/`remove`/`write`.
7
+ */
8
+ export declare function portFromSlices(slices: {
9
+ store: RecipeStore;
10
+ settings?: SettingsStore;
11
+ theme?: ThemeStore;
12
+ }): PlannerPort;
13
+ /** The controller over just a recipe store and, optionally, settings and theme. */
14
+ export declare function createSliceController(slices: {
15
+ store: RecipeStore;
16
+ settings?: SettingsStore;
17
+ theme?: ThemeStore;
18
+ }, options?: PlannerControllerOptions): PlannerController;
@@ -0,0 +1,49 @@
1
+ import { COOKBOOK_SCHEMA } from "../../cookbook/types.js";
2
+ import { readSettings, writeSettings } from "../../settings/app-settings.js";
3
+ import { createPlannerAdapter, } from "./adapter.js";
4
+ import { engineCatalog } from "./catalog.js";
5
+ const empty = () => ({
6
+ $schema: COOKBOOK_SCHEMA,
7
+ version: 1,
8
+ recipes: [],
9
+ features: [],
10
+ policies: [],
11
+ });
12
+ /**
13
+ * Just the slices of the app the assistant works with (recipes, settings and
14
+ * theme) as the engine's document, for hosts that have no more than that and for
15
+ * tests. A command changes the slices through their own `add`/`remove`/`write`.
16
+ */
17
+ export function portFromSlices(slices) {
18
+ const { store, settings, theme } = slices;
19
+ return {
20
+ read() {
21
+ let doc = { ...empty(), recipes: [...store.ids].sort() };
22
+ if (settings)
23
+ doc = writeSettings(doc, settings.read());
24
+ const look = theme?.read();
25
+ return look ? { ...doc, theme: look } : doc;
26
+ },
27
+ write(next) {
28
+ const want = new Set(next.recipes);
29
+ const have = new Set(store.ids);
30
+ const extra = [...have].filter((id) => !want.has(id));
31
+ if (extra.length)
32
+ store.remove(...extra);
33
+ const missing = [...want].filter((id) => !have.has(id));
34
+ if (missing.length)
35
+ store.add(...missing);
36
+ if (settings)
37
+ settings.write(readSettings(next));
38
+ theme?.write(next.theme);
39
+ },
40
+ };
41
+ }
42
+ /** The controller over just a recipe store and, optionally, settings and theme. */
43
+ export function createSliceController(slices, options = {}) {
44
+ return createPlannerAdapter({
45
+ catalog: engineCatalog(),
46
+ port: portFromSlices(slices),
47
+ options,
48
+ });
49
+ }
@@ -0,0 +1,80 @@
1
+ import type { CommandError as EngineCommandError, CommandInputs as EngineCommandInputs, CommandReceipt as EngineCommandReceipt, PlanSnapshot as EnginePlanSnapshot, ExportData, RecipeChanges, RunOptions } from '@happyvertical/smrt-core/cookbook/engine';
2
+ export { COOKBOOK_COMMANDS_VERSION as PLANNER_COMMANDS_VERSION } from '@happyvertical/smrt-core/cookbook/engine';
3
+ export type { ExportData, RecipeChanges, RunOptions };
4
+ /** The planner's tabs, in order. Navigation only; never part of the cookbook. */
5
+ export declare const PLANNER_TAB_IDS: readonly ["cookbooks", "recipes", "features", "layout", "settings", "export"];
6
+ export type PlannerTabId = (typeof PLANNER_TAB_IDS)[number];
7
+ /** Input of each command, keyed by the command's (tool) name. */
8
+ export interface CommandInputs extends EngineCommandInputs {
9
+ /** Move the planner's focus to a tab and/or a section. Not a document change. */
10
+ focus: {
11
+ tab?: PlannerTabId;
12
+ section?: string;
13
+ };
14
+ }
15
+ export type CommandName = keyof CommandInputs;
16
+ /** One command: its name and input. The unit `controller.run` takes. */
17
+ export type PlannerCommand = {
18
+ [N in CommandName]: {
19
+ name: N;
20
+ input: CommandInputs[N];
21
+ /** Retry key: a repeated id returns the first receipt and applies nothing. */
22
+ id?: string;
23
+ /** Refuse with `conflict` unless the plan is still at this revision. */
24
+ expectedRevision?: number;
25
+ };
26
+ }[CommandName];
27
+ /** Why a command did not run (the engine's codes). */
28
+ export type CommandError = EngineCommandError;
29
+ export type CommandErrorCode = EngineCommandError['code'];
30
+ /** The engine's snapshot, plus where the planner is looking. */
31
+ export interface PlanSnapshot extends EnginePlanSnapshot {
32
+ /** Where the planner is looking; not saved. */
33
+ focus: {
34
+ tab: PlannerTabId | null;
35
+ section: string | null;
36
+ };
37
+ }
38
+ /** The engine's receipt; its `name` may also be `focus`. */
39
+ export interface CommandReceipt extends Omit<EngineCommandReceipt, 'name'> {
40
+ name: CommandName;
41
+ }
42
+ export type CommandResult = {
43
+ ok: true;
44
+ id?: string;
45
+ /** True when this is the stored result of an earlier run of the same id. */
46
+ replayed?: boolean;
47
+ snapshot: PlanSnapshot;
48
+ receipt: CommandReceipt;
49
+ /** Extra output: `export_cookbook` returns the file, `validate` the diagnostics. */
50
+ data?: unknown;
51
+ } | {
52
+ ok: false;
53
+ id?: string;
54
+ replayed?: boolean;
55
+ error: CommandError;
56
+ };
57
+ /** Several commands applied all-or-nothing (`engine.batch`). */
58
+ export type BatchResult = {
59
+ ok: true;
60
+ id?: string;
61
+ replayed?: boolean;
62
+ snapshot: PlanSnapshot;
63
+ receipt: {
64
+ id?: string;
65
+ count: number;
66
+ changed: boolean;
67
+ revisionBefore: number;
68
+ revisionAfter: number;
69
+ undoId?: string;
70
+ };
71
+ results: Extract<CommandResult, {
72
+ ok: true;
73
+ }>[];
74
+ } | {
75
+ ok: false;
76
+ id?: string;
77
+ replayed?: boolean;
78
+ error: CommandError;
79
+ snapshot: PlanSnapshot;
80
+ };
@@ -0,0 +1,18 @@
1
+ /*
2
+ * The planner command set is smrt's cookbook command engine
3
+ * (`@happyvertical/smrt-core/cookbook/engine`, #3753) plus `focus`, the one
4
+ * command that is about the planner's own view and not the document. Types,
5
+ * errors, receipts and the snapshot are the engine's; this file only adds what
6
+ * the planner puts on top. `docs/inference-host.md` lists the differences from
7
+ * the v1 command set the planner shipped before the engine.
8
+ */
9
+ export { COOKBOOK_COMMANDS_VERSION as PLANNER_COMMANDS_VERSION } from '@happyvertical/smrt-core/cookbook/engine';
10
+ /** The planner's tabs, in order. Navigation only; never part of the cookbook. */
11
+ export const PLANNER_TAB_IDS = [
12
+ 'cookbooks',
13
+ 'recipes',
14
+ 'features',
15
+ 'layout',
16
+ 'settings',
17
+ 'export',
18
+ ];
@@ -0,0 +1,4 @@
1
+ /** Ask the page at `path` (a pathname, any query ignored) to open New. */
2
+ export declare function requestCreate(path: string, now?: number): void;
3
+ /** True once, on the page the request named, shortly after it was made. */
4
+ export declare function takeCreate(path: string, now?: number): boolean;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * "New <noun>" on a section's page opens the entry page with its create form
3
+ * already open. The request is remembered here, not in the URL (the address
4
+ * bar mirrors only the shareable state), and the entry page takes it once its
5
+ * list has loaded. It names the page it is for and expires, so a navigation
6
+ * that never happened cannot open a form on a later visit.
7
+ */
8
+ const TTL_MS = 5000;
9
+ let pending;
10
+ /** Ask the page at `path` (a pathname, any query ignored) to open New. */
11
+ export function requestCreate(path, now = Date.now()) {
12
+ pending = { path: pathOf(path), at: now };
13
+ }
14
+ /** True once, on the page the request named, shortly after it was made. */
15
+ export function takeCreate(path, now = Date.now()) {
16
+ const request = pending;
17
+ pending = undefined;
18
+ return (!!request && request.path === pathOf(path) && now - request.at <= TTL_MS);
19
+ }
20
+ function pathOf(href) {
21
+ return href.split(/[?#]/)[0] ?? href;
22
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Things only the running app can do, set by its layout: the controller calls
3
+ * them after a command that needs them. Unset, the command still succeeds.
4
+ */
5
+ export declare const plannerRuntime: {
6
+ /** Regenerate the sample records after a cookbook replaced the app. */
7
+ onReplaced?: () => void;
8
+ /** Open a menu section's page (`focus` with a `section`). */
9
+ openSection?: (sectionId: string) => void;
10
+ };
11
+ /**
12
+ * The app's one planner controller: the assistant, the palette, a host page
13
+ * and (later) the MCP and CLI servers all drive the planner through it.
14
+ */
15
+ export declare const plannerController: import("./commands/adapter.ts").PlannerController & Pick<import("./commands/adapter.ts").PlannerAdapter, "undo" | "cookbook" | "tools">;
@@ -0,0 +1,22 @@
1
+ import { cookbookStore } from "../cookbook/store.svelte.js";
2
+ import { createPlannerController } from "./commands/index.js";
3
+ import { plannerTab } from "./tab.svelte.js";
4
+ /**
5
+ * Things only the running app can do, set by its layout: the controller calls
6
+ * them after a command that needs them. Unset, the command still succeeds.
7
+ */
8
+ export const plannerRuntime = {};
9
+ /**
10
+ * The app's one planner controller: the assistant, the palette, a host page
11
+ * and (later) the MCP and CLI servers all drive the planner through it.
12
+ */
13
+ export const plannerController = createPlannerController(cookbookStore, {
14
+ navigation: {
15
+ getTab: () => plannerTab.active,
16
+ setTab: (tab) => {
17
+ plannerTab.active = tab;
18
+ },
19
+ setSection: (id) => plannerRuntime.openSection?.(id),
20
+ },
21
+ onReplaced: () => plannerRuntime.onReplaced?.(),
22
+ });
@@ -0,0 +1,16 @@
1
+ /** The query parameter naming the Planner's active tab: `?tab=layout`. */
2
+ export declare const TAB_PARAM = "tab";
3
+ export interface QueryParts {
4
+ packages: readonly string[];
5
+ }
6
+ /**
7
+ * The one place the shareable URL state becomes a query string. Only the
8
+ * package selection lives in the URL: recipes, options and the layout are the
9
+ * cookbook, saved in localStorage (`cookbook/`). The Planner's tab is added
10
+ * by `withTab`, only on the Planner page.
11
+ */
12
+ export declare function composeQuery(parts: QueryParts): string;
13
+ /** Does this query string carry a package selection? */
14
+ export declare function hasAppState(search: string): boolean;
15
+ /** Add `?tab=` to a query string, keeping every other parameter. */
16
+ export declare function withTab(query: string, tab: string): string;
@@ -0,0 +1,28 @@
1
+ import { SELECTION_PARAM } from "./selection.js";
2
+ /** The query parameter naming the Planner's active tab: `?tab=layout`. */
3
+ export const TAB_PARAM = 'tab';
4
+ /**
5
+ * The one place the shareable URL state becomes a query string. Only the
6
+ * package selection lives in the URL: recipes, options and the layout are the
7
+ * cookbook, saved in localStorage (`cookbook/`). The Planner's tab is added
8
+ * by `withTab`, only on the Planner page.
9
+ */
10
+ export function composeQuery(parts) {
11
+ return parts.packages.length
12
+ ? `?${SELECTION_PARAM}=${[...parts.packages].sort().join(',')}`
13
+ : '';
14
+ }
15
+ /** Does this query string carry a package selection? */
16
+ export function hasAppState(search) {
17
+ return new URLSearchParams(search).has(SELECTION_PARAM);
18
+ }
19
+ /** Add `?tab=` to a query string, keeping every other parameter. */
20
+ export function withTab(query, tab) {
21
+ const params = new URLSearchParams(query);
22
+ if (tab === 'recipes')
23
+ params.delete(TAB_PARAM);
24
+ else
25
+ params.set(TAB_PARAM, tab);
26
+ const out = params.toString().replace(/%2C/gi, ',');
27
+ return out ? `?${out}` : '';
28
+ }
@@ -0,0 +1,15 @@
1
+ import type { CatalogPackage } from '../catalog/types.ts';
2
+ /** The URL query parameter that carries the selection: `?p=products,sales`. */
3
+ export declare const SELECTION_PARAM = "p";
4
+ /** Parse the selection out of a query string, keeping only known package ids. */
5
+ export declare function parseSelection(search: string, known: ReadonlySet<string>): string[];
6
+ /** Sorted and de-duplicated, so the same selection is always the same URL. */
7
+ export declare function normalize(ids: Iterable<string>): string[];
8
+ /** `?p=a,b`, or the empty string for an empty selection. */
9
+ export declare function selectionQuery(ids: readonly string[]): string;
10
+ /** Append the selection to an in-app path so it survives navigation. */
11
+ export declare function withSelection(path: string, ids: readonly string[]): string;
12
+ /** `ids` plus everything they transitively depend on, as a sorted set. */
13
+ export declare function withDependencies(ids: Iterable<string>, packages: ReadonlyMap<string, CatalogPackage>): string[];
14
+ /** Ids of the selected packages that depend (directly) on `id`. */
15
+ export declare function requiredBy(id: string, selected: readonly string[], packages: ReadonlyMap<string, CatalogPackage>): string[];
@@ -0,0 +1,38 @@
1
+ /** The URL query parameter that carries the selection: `?p=products,sales`. */
2
+ export const SELECTION_PARAM = 'p';
3
+ /** Parse the selection out of a query string, keeping only known package ids. */
4
+ export function parseSelection(search, known) {
5
+ const value = new URLSearchParams(search).get(SELECTION_PARAM) ?? '';
6
+ return normalize(value.split(',').filter((id) => known.has(id)));
7
+ }
8
+ /** Sorted and de-duplicated, so the same selection is always the same URL. */
9
+ export function normalize(ids) {
10
+ return [...new Set(ids)].sort();
11
+ }
12
+ /** `?p=a,b`, or the empty string for an empty selection. */
13
+ export function selectionQuery(ids) {
14
+ return ids.length ? `?${SELECTION_PARAM}=${normalize(ids).join(',')}` : '';
15
+ }
16
+ /** Append the selection to an in-app path so it survives navigation. */
17
+ export function withSelection(path, ids) {
18
+ return `${path}${selectionQuery(ids)}`;
19
+ }
20
+ /** `ids` plus everything they transitively depend on, as a sorted set. */
21
+ export function withDependencies(ids, packages) {
22
+ const result = new Set();
23
+ const visit = (id) => {
24
+ const pkg = packages.get(id);
25
+ if (!pkg || result.has(id))
26
+ return;
27
+ result.add(id);
28
+ for (const dependency of pkg.dependencies)
29
+ visit(dependency);
30
+ };
31
+ for (const id of ids)
32
+ visit(id);
33
+ return normalize(result);
34
+ }
35
+ /** Ids of the selected packages that depend (directly) on `id`. */
36
+ export function requiredBy(id, selected, packages) {
37
+ return selected.filter((other) => other !== id && packages.get(other)?.dependencies.includes(id));
38
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The visitor's chosen packages: the one piece of state the control panel, the
3
+ * generated navigation and (later) the chat assistant all read and write.
4
+ *
5
+ * The URL (`?p=...`) is the persisted form; the layout keeps the two in sync.
6
+ * Anything that changes the selection goes through `add`, `remove` or
7
+ * `apply`, so a future chat transport can drive it exactly like the panel.
8
+ */
9
+ declare class Selection {
10
+ ids: string[];
11
+ has(id: string): boolean;
12
+ /** Selected packages that need `id`; non-empty means it cannot be removed. */
13
+ requiredBy(id: string): string[];
14
+ /** Replace the selection from a URL query string. */
15
+ fromSearch(search: string): void;
16
+ /** Select packages, pulling in their dependencies. */
17
+ add(...ids: string[]): void;
18
+ /** Deselect packages; ones other selected packages need are kept. */
19
+ remove(...ids: string[]): void;
20
+ toggle(id: string): void;
21
+ /** Apply an `{ add, remove }` change (the shape the chat assistant emits). */
22
+ apply(change: {
23
+ add?: string[];
24
+ remove?: string[];
25
+ }): void;
26
+ clear(): void;
27
+ }
28
+ export declare const selection: Selection;
29
+ export {};
@@ -0,0 +1,54 @@
1
+ import { catalog } from "../catalog/index.js";
2
+ import { normalize, parseSelection, requiredBy, withDependencies, } from "./selection.js";
3
+ const packages = new Map(catalog.packages.map((pkg) => [pkg.id, pkg]));
4
+ const known = new Set(packages.keys());
5
+ /**
6
+ * The visitor's chosen packages: the one piece of state the control panel, the
7
+ * generated navigation and (later) the chat assistant all read and write.
8
+ *
9
+ * The URL (`?p=...`) is the persisted form; the layout keeps the two in sync.
10
+ * Anything that changes the selection goes through `add`, `remove` or
11
+ * `apply`, so a future chat transport can drive it exactly like the panel.
12
+ */
13
+ class Selection {
14
+ ids = $state([]);
15
+ has(id) {
16
+ return this.ids.includes(id);
17
+ }
18
+ /** Selected packages that need `id`; non-empty means it cannot be removed. */
19
+ requiredBy(id) {
20
+ return requiredBy(id, this.ids, packages);
21
+ }
22
+ /** Replace the selection from a URL query string. */
23
+ fromSearch(search) {
24
+ this.ids = withDependencies(parseSelection(search, known), packages);
25
+ }
26
+ /** Select packages, pulling in their dependencies. */
27
+ add(...ids) {
28
+ this.ids = withDependencies([...this.ids, ...ids], packages);
29
+ }
30
+ /** Deselect packages; ones other selected packages need are kept. */
31
+ remove(...ids) {
32
+ const removing = new Set(ids);
33
+ let remaining = this.ids.filter((id) => !removing.has(id));
34
+ // A package whose dependency was just removed would be orphaned; keep the
35
+ // dependency instead of silently dropping the dependant.
36
+ remaining = withDependencies(remaining, packages);
37
+ this.ids = normalize(remaining);
38
+ }
39
+ toggle(id) {
40
+ if (this.has(id))
41
+ this.remove(id);
42
+ else
43
+ this.add(id);
44
+ }
45
+ /** Apply an `{ add, remove }` change (the shape the chat assistant emits). */
46
+ apply(change) {
47
+ this.add(...(change.add ?? []).filter((id) => known.has(id)));
48
+ this.remove(...(change.remove ?? []));
49
+ }
50
+ clear() {
51
+ this.ids = [];
52
+ }
53
+ }
54
+ export const selection = new Selection();
@@ -0,0 +1,11 @@
1
+ export declare const PLANNER_TABS: readonly ["cookbooks", "recipes", "features", "layout", "settings", "export"];
2
+ export type PlannerTab = (typeof PLANNER_TABS)[number];
3
+ /** `fallback` (Recipes) unless the query names another known tab. */
4
+ export declare function parseTab(search: string, fallback?: PlannerTab): PlannerTab;
5
+ /** The Planner page's active tab; the address bar mirrors it (`?tab=`). */
6
+ declare class PlannerTabState {
7
+ active: "export" | "settings" | "features" | "recipes" | "layout" | "cookbooks";
8
+ fromSearch(search: string, fallback?: PlannerTab): void;
9
+ }
10
+ export declare const plannerTab: PlannerTabState;
11
+ export {};