@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,231 @@
1
+ import { isShellLayoutEmpty, } from '@happyvertical/smrt-svelte/workspace/layout';
2
+ import { setSampleTaxRate } from "../data/packs.js";
3
+ import { recipeState } from "../recipes/state.svelte.js";
4
+ import { hasTaxRateRow, readSettings, writeSettings, } from "../settings/app-settings.js";
5
+ import { compactTheme } from "../theme/theme.js";
6
+ import { assembleCookbook } from "./assemble.js";
7
+ import { cookbookFromLegacySearch, hasLegacyState } from "./legacy.js";
8
+ import { BACKUP_KEY, browserStorage, loadCookbook, PREVIOUS_STORAGE_KEY, removeKey, saveCookbook, writeKey, } from "./storage.js";
9
+ import { parseCookbookText } from "./validate.js";
10
+ /** Where the planner's AppShell keeps its own settings (panel states, sizes). */
11
+ export const SHELL_STORAGE_KEY = 'smrt-planner:shell';
12
+ export const SAVE_DELAY_MS = 300;
13
+ /**
14
+ * The single source of truth for what a visitor has built. Recipes and
15
+ * options stay in `recipeState` (the one store views read); this adds the
16
+ * `layout` field and the persistence around both. `snapshot()` is the
17
+ * Cookbook, whether it is saved, exported or compared.
18
+ */
19
+ export class CookbookStore {
20
+ /** The shell layout, owned here and passed to `AppShell`. */
21
+ layout = $state();
22
+ /** The app's name and description (`set_name`); not shown in the UI yet. */
23
+ name = $state();
24
+ description = $state();
25
+ /** The app's theme; undefined is the default. The shell applies it live. */
26
+ theme = $state();
27
+ /**
28
+ * Customised overview pages by overview id, canonical overrides only. Each
29
+ * page's `createOverview` reads its entry and writes edits back here.
30
+ */
31
+ overviews = $state.raw({});
32
+ persist = $state('unknown');
33
+ /** False until the saved cookbook has been read; nothing saves before. */
34
+ loaded = $state(false);
35
+ /** Why the saved cookbook was not used, if it was not. */
36
+ loadNotice = $state('');
37
+ /**
38
+ * True when saving would destroy the only copy of something (an unreadable
39
+ * value that could not be kept aside, or a saved cookbook a legacy link
40
+ * replaced without a backup). Nothing is written until the visitor imports
41
+ * or resets.
42
+ */
43
+ saveBlocked = false;
44
+ /** A migrated legacy link whose data is not safely stored: keep the URL. */
45
+ keepLegacyUrl = $state(false);
46
+ /** A cookbook was chosen (cookbook, import) before the saved one was read. */
47
+ replacedBeforeLoad = false;
48
+ /** The pre-rename key still holds a backup; the next good save removes it. */
49
+ previousKept = false;
50
+ storage = null;
51
+ timer;
52
+ snapshot() {
53
+ return assembleCookbook(recipeState.data, {
54
+ layout: this.layout,
55
+ theme: $state.snapshot(this.theme),
56
+ overviews: this.overviews,
57
+ name: this.name,
58
+ description: this.description,
59
+ });
60
+ }
61
+ /** A page's stored override, or `null` when it is on its defaults. */
62
+ overview(id) {
63
+ return Object.hasOwn(this.overviews, id) ? this.overviews[id] : null;
64
+ }
65
+ /**
66
+ * An edit from an overview page: the controller's canonical override, or
67
+ * `null` (back to the defaults), which removes the page's key.
68
+ */
69
+ setOverview(id, override) {
70
+ const next = Object.fromEntries(Object.entries(this.overviews).filter(([key]) => key !== id));
71
+ if (override)
72
+ next[id] = override;
73
+ this.overviews = next;
74
+ }
75
+ /** An edit from the shell or its layout editor; an empty one clears it. */
76
+ setLayout(next) {
77
+ this.layout = isShellLayoutEmpty(next) ? undefined : next;
78
+ }
79
+ /** Replace everything from a validated cookbook. */
80
+ apply(cookbook) {
81
+ recipeState.load(cookbook);
82
+ this.layout = cookbook.layout;
83
+ this.theme = cookbook.theme;
84
+ this.name = cookbook.name;
85
+ this.description = cookbook.description;
86
+ this.overviews = { ...(cookbook.overviews ?? {}) };
87
+ setSampleTaxRate(hasTaxRateRow(cookbook) ? readSettings(cookbook).taxRate : undefined);
88
+ }
89
+ /**
90
+ * A sentence naming recipes and features the loaded cookbook has that this
91
+ * version does not know (they are kept, not applied), or ''.
92
+ */
93
+ get unavailableNotice() {
94
+ const ids = [
95
+ ...recipeState.unavailableRecipes,
96
+ ...recipeState.unavailableFeatures,
97
+ ];
98
+ if (!ids.length)
99
+ return '';
100
+ const n = ids.length;
101
+ return `${n} ${n === 1 ? 'recipe' : 'recipes'} in this cookbook ${n === 1 ? "isn't" : "aren't"} available in this version: ${ids.join(', ')}. They are kept when you save or export.`;
102
+ }
103
+ /** Remove the unavailable ids from the cookbook, on the visitor's say. */
104
+ removeUnavailable() {
105
+ recipeState.removeUnavailable();
106
+ this.scheduleSave();
107
+ }
108
+ /** Change the theme; the default (or an empty one) clears it. */
109
+ setTheme(next) {
110
+ this.theme = compactTheme(next);
111
+ }
112
+ /** The app settings (currency, tax rate, payment terms), read from the policy rows. */
113
+ settings() {
114
+ return readSettings(this.snapshot());
115
+ }
116
+ /** Write the settings as policy rows. Existing records are untouched. */
117
+ setSettings(settings) {
118
+ const next = writeSettings(this.snapshot(), settings);
119
+ recipeState.rows = next.policies.map((row) => ({ ...row }));
120
+ setSampleTaxRate(hasTaxRateRow(next) ? readSettings(next).taxRate : undefined);
121
+ }
122
+ /** Replace on the visitor's say-so (an import): saving is allowed again. */
123
+ replace(cookbook) {
124
+ this.apply(cookbook);
125
+ if (!this.loaded)
126
+ this.replacedBeforeLoad = true;
127
+ this.saveBlocked = false;
128
+ this.keepLegacyUrl = false;
129
+ }
130
+ /** Back to an empty cookbook, and the shell's own settings to defaults. */
131
+ reset() {
132
+ recipeState.clear();
133
+ this.layout = undefined;
134
+ this.theme = undefined;
135
+ this.name = undefined;
136
+ this.description = undefined;
137
+ this.overviews = {};
138
+ try {
139
+ globalThis.localStorage?.removeItem(SHELL_STORAGE_KEY);
140
+ }
141
+ catch {
142
+ // Storage may be unavailable (private mode); the cookbook still resets.
143
+ }
144
+ this.saveBlocked = false;
145
+ this.keepLegacyUrl = false;
146
+ }
147
+ /** Validate and apply JSON text, e.g. a chosen file. Applies nothing on failure. */
148
+ importText(text) {
149
+ const result = parseCookbookText(text);
150
+ if (result.ok)
151
+ this.replace(result.cookbook);
152
+ return result;
153
+ }
154
+ /**
155
+ * Read the saved cookbook, then migrate a legacy `?r=` / `?o=` link into it.
156
+ * Call once in the browser, before `loaded` lets saving start. Returns true
157
+ * when a legacy link was imported, so the caller can clean the URL.
158
+ */
159
+ hydrate(search, storage = browserStorage()) {
160
+ this.storage = storage;
161
+ const outcome = loadCookbook(storage);
162
+ if (outcome.status === 'loaded')
163
+ this.previousKept = outcome.previousKept;
164
+ // What the visitor chose a moment ago (before the first navigation settled)
165
+ // wins over what was saved; the next save keeps it.
166
+ if (outcome.status === 'loaded' && !this.replacedBeforeLoad) {
167
+ this.apply(outcome.cookbook);
168
+ if (outcome.dropped?.length) {
169
+ this.loadNotice = `Some saved page customisations could not be used and were removed: ${outcome.dropped.join(' ')}`;
170
+ }
171
+ }
172
+ else if (outcome.status === 'unreadable') {
173
+ this.saveBlocked = !outcome.keptAside;
174
+ this.loadNotice = outcome.keptAside
175
+ ? `The saved cookbook could not be read (${outcome.reason}) and was kept aside; starting empty.`
176
+ : `The saved cookbook could not be read (${outcome.reason}). Starting empty without overwriting it; import or reset to save again.`;
177
+ }
178
+ let migrated = false;
179
+ if (hasLegacyState(search)) {
180
+ // An explicit link wins, but what it replaces is backed up first.
181
+ if (outcome.status === 'loaded' &&
182
+ !writeKey(storage, BACKUP_KEY, JSON.stringify(outcome.cookbook))) {
183
+ this.saveBlocked = true;
184
+ }
185
+ this.apply(cookbookFromLegacySearch(search));
186
+ migrated = true;
187
+ }
188
+ this.persist = outcome.status === 'unavailable' ? 'memory' : 'unknown';
189
+ this.loaded = true;
190
+ // Persist a migration at once: the URL is about to lose its copy.
191
+ if (migrated) {
192
+ const saved = this.save();
193
+ // The URL held the only copy unless it is now safely stored.
194
+ this.keepLegacyUrl = !saved;
195
+ }
196
+ return migrated;
197
+ }
198
+ /** Save now. Falls back to memory-only (and says so) if storage refuses. */
199
+ save() {
200
+ clearTimeout(this.timer);
201
+ this.timer = undefined;
202
+ if (!this.loaded)
203
+ return false;
204
+ if (this.saveBlocked) {
205
+ this.persist = 'memory';
206
+ return false;
207
+ }
208
+ const saved = saveCookbook(this.storage, this.snapshot());
209
+ this.persist = saved ? 'ok' : 'memory';
210
+ if (saved && this.previousKept) {
211
+ this.previousKept = !removeKey(this.storage, PREVIOUS_STORAGE_KEY);
212
+ }
213
+ // Once stored, the legacy parameters are redundant and may be cleaned.
214
+ if (saved)
215
+ this.keepLegacyUrl = false;
216
+ return saved;
217
+ }
218
+ /** Save soon; many quick edits make one write. */
219
+ scheduleSave() {
220
+ if (!this.loaded)
221
+ return;
222
+ clearTimeout(this.timer);
223
+ this.timer = setTimeout(() => this.save(), SAVE_DELAY_MS);
224
+ }
225
+ /** Save any pending change now (page hide). */
226
+ flush() {
227
+ if (this.timer !== undefined)
228
+ this.save();
229
+ }
230
+ }
231
+ export const cookbookStore = new CookbookStore();
@@ -0,0 +1,76 @@
1
+ import type { OverviewOverride } from '@happyvertical/smrt-svelte/overview/server';
2
+ import type { ShellLayout } from '@happyvertical/smrt-svelte/workspace/layout';
3
+ import type { FieldPolicyRow } from '../recipes/policy.ts';
4
+ import type { ExposureSurface } from '../recipes/types.ts';
5
+ import type { ThemeSetting } from '../theme/theme.ts';
6
+ /**
7
+ * Placeholder until happyvertical/smrt#3604 publishes the real schema URL.
8
+ * The planner writes it so a file says what it is; it does not fetch it.
9
+ */
10
+ export declare const COOKBOOK_SCHEMA = "https://s-m-r-t.dev/schemas/cookbook/v1.json";
11
+ /**
12
+ * The URL files carried while the document was called a blueprint. Import
13
+ * still accepts it; nothing writes it.
14
+ */
15
+ export declare const PREVIOUS_SCHEMA = "https://s-m-r-t.dev/schemas/blueprint/v1.json";
16
+ export declare const COOKBOOK_VERSION = 1;
17
+ /**
18
+ * Everything a visitor builds, in one portable document. This is the first
19
+ * concrete instance of the format happyvertical/smrt#3604 will pin; the
20
+ * planner's saved state, its JSON export and the localStorage value are all
21
+ * this one shape.
22
+ *
23
+ * Sample or created records are NOT part of it: they are demo data the
24
+ * in-memory `DataSource` reseeds, not something that scaffolds an app.
25
+ */
26
+ export interface Cookbook {
27
+ $schema: string;
28
+ version: typeof COOKBOOK_VERSION;
29
+ /** The app's name (`set_name`); absent means the applied cookbook's, else `my-app`. */
30
+ name?: string;
31
+ /** A line about the app (`set_name`). */
32
+ description?: string;
33
+ /** Added recipe ids, sorted; requirements are already included. */
34
+ recipes: string[];
35
+ /**
36
+ * Added feature models (qualified names), sorted and unique: exposed
37
+ * catalog models no recipe covers. Absent in older files, read as `[]`.
38
+ */
39
+ features: string[];
40
+ /** App-scope smrt-fields policy rows (the recipe options). */
41
+ policies: FieldPolicyRow[];
42
+ /**
43
+ * Surfaces switched off per model, keyed by qualified model name. Omitted
44
+ * when nothing is narrowed.
45
+ */
46
+ exposure?: Record<string, ExposureSurface[]>;
47
+ /** The shell layout (smrt-svelte `ShellLayout`), applied by `AppShell`. */
48
+ layout?: ShellLayout;
49
+ /**
50
+ * The app's look: a smrt-ui preset, colour scheme and optional brand colour.
51
+ * Absent in older files, read as the default theme.
52
+ */
53
+ theme?: ThemeSetting;
54
+ /**
55
+ * Customised overview pages (smrt#3727), keyed by overview id: a section
56
+ * page's id is its layout id (`section:sales`, `custom:shop-2`). Each value
57
+ * is smrt-svelte's sparse `OverviewOverride` exactly, stored canonical (as
58
+ * `checkOverviewOverride` returns it) and validated against the page's
59
+ * definition on every load and import. Omitted when no page is customised;
60
+ * a page on its defaults has no key. Additive in version 1: older readers
61
+ * ignore unknown keys.
62
+ */
63
+ overviews?: Record<string, OverviewOverride>;
64
+ }
65
+ export type CookbookResult = {
66
+ ok: true;
67
+ cookbook: Cookbook;
68
+ /**
69
+ * What was dropped while reading (an invalid or unknown overview
70
+ * widget), one sentence each. Absent when nothing was.
71
+ */
72
+ dropped?: string[];
73
+ } | {
74
+ ok: false;
75
+ error: string;
76
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Placeholder until happyvertical/smrt#3604 publishes the real schema URL.
3
+ * The planner writes it so a file says what it is; it does not fetch it.
4
+ */
5
+ export const COOKBOOK_SCHEMA = 'https://s-m-r-t.dev/schemas/cookbook/v1.json';
6
+ /**
7
+ * The URL files carried while the document was called a blueprint. Import
8
+ * still accepts it; nothing writes it.
9
+ */
10
+ export const PREVIOUS_SCHEMA = 'https://s-m-r-t.dev/schemas/blueprint/v1.json';
11
+ export const COOKBOOK_VERSION = 1;
@@ -0,0 +1,14 @@
1
+ import { type ParseCookbookOptions } from './parse.ts';
2
+ import type { CookbookResult } from './types.ts';
3
+ /**
4
+ * Check an unknown value (a parsed file or stored JSON) and return a
5
+ * normalised cookbook, or one clear sentence saying why not. Strict on
6
+ * purpose: nothing is silently dropped, so a bad file never half-applies.
7
+ * Page customisations are checked against the planner's widget registry; a
8
+ * host without it uses `parseCookbookWith` (`./parse.ts`).
9
+ */
10
+ export declare function parseCookbook(input: unknown, options?: Omit<ParseCookbookOptions, 'overviews'>): CookbookResult;
11
+ /** Parse JSON text, then `parseCookbook` it. */
12
+ export declare function parseCookbookText(text: string, options?: {
13
+ dropUnknownRecipes?: boolean;
14
+ }): CookbookResult;
@@ -0,0 +1,29 @@
1
+ import { parseOverviews } from "../overviews/validate.js";
2
+ import { parseCookbookWith } from "./parse.js";
3
+ const fail = (error) => ({ ok: false, error });
4
+ /**
5
+ * Check an unknown value (a parsed file or stored JSON) and return a
6
+ * normalised cookbook, or one clear sentence saying why not. Strict on
7
+ * purpose: nothing is silently dropped, so a bad file never half-applies.
8
+ * Page customisations are checked against the planner's widget registry; a
9
+ * host without it uses `parseCookbookWith` (`./parse.ts`).
10
+ */
11
+ export function parseCookbook(input, options = {}) {
12
+ return parseCookbookWith(input, { ...options, overviews: parseOverviews });
13
+ }
14
+ /** Parse JSON text, then `parseCookbook` it. */
15
+ export function parseCookbookText(text, options = {}) {
16
+ let value;
17
+ try {
18
+ value = JSON.parse(text);
19
+ }
20
+ catch {
21
+ return fail('This file is not valid JSON.');
22
+ }
23
+ try {
24
+ return parseCookbook(value, options);
25
+ }
26
+ catch {
27
+ return fail('This file is not a valid cookbook.');
28
+ }
29
+ }
@@ -0,0 +1,37 @@
1
+ import type { InferenceConfig } from '../inference/config.ts';
2
+ import type { KitchenEndpoint } from '../kitchen/client.ts';
3
+ /**
4
+ * Absolute path of the root-built prerendered planner app inside this package.
5
+ * Node only; kept out of `./core` so that entry stays free of Node built-ins.
6
+ * Serve it at `/`, or use `materializeApp` for a supported subpath artifact.
7
+ */
8
+ export declare const appDir: string;
9
+ /** Absolute path of one packaged app file, e.g. `appFile('index.html')`. */
10
+ export declare function appFile(relativePath: string): string;
11
+ export interface PlannerAppConfig {
12
+ inference?: InferenceConfig;
13
+ kitchen?: KitchenEndpoint;
14
+ }
15
+ export interface MaterializeAppOptions {
16
+ /** New or empty directory that receives the app root. */
17
+ outDir: string;
18
+ /** Canonical mount prefix: leading slash, no trailing slash, e.g. `/plan`. */
19
+ basePath: string;
20
+ /** Written as `planner.config.json` after validation and normalization. */
21
+ config: PlannerAppConfig;
22
+ }
23
+ export interface MaterializedApp {
24
+ outDir: string;
25
+ configFile: string;
26
+ fallbackFile: string;
27
+ }
28
+ /** Validate and canonicalize a non-root app mount prefix. */
29
+ export declare function normalizeAppBasePath(basePath: string): string;
30
+ /** Validate config strictly enough for an immutable public artifact. */
31
+ export declare function normalizePlannerAppConfig(config: PlannerAppConfig): PlannerAppConfig;
32
+ /**
33
+ * Copy the published static app into a deterministic, prefix-safe deployment
34
+ * artifact. The copy is assembled beside `outDir` and renamed only after its
35
+ * fallback and config validate, so callers never receive a partial tree.
36
+ */
37
+ export declare function materializeApp(options: MaterializeAppOptions): MaterializedApp;
@@ -0,0 +1,119 @@
1
+ import { cpSync, existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmdirSync, rmSync, statSync, writeFileSync, } from 'node:fs';
2
+ import { dirname, relative, resolve, sep } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { validateInferenceConfig } from "../inference/config.js";
5
+ import { parseKitchenConfig } from "../kitchen/client.js";
6
+ /**
7
+ * Absolute path of the root-built prerendered planner app inside this package.
8
+ * Node only; kept out of `./core` so that entry stays free of Node built-ins.
9
+ * Serve it at `/`, or use `materializeApp` for a supported subpath artifact.
10
+ */
11
+ export const appDir = fileURLToPath(new URL('../../app/', import.meta.url));
12
+ /** Absolute path of one packaged app file, e.g. `appFile('index.html')`. */
13
+ export function appFile(relativePath) {
14
+ return fileURLToPath(new URL(relativePath, new URL('../../app/', import.meta.url)));
15
+ }
16
+ const sensitiveName = /^(?:api[-_]?key|key|token|authorization|secret|password)$/i;
17
+ /** Validate and canonicalize a non-root app mount prefix. */
18
+ export function normalizeAppBasePath(basePath) {
19
+ if (typeof basePath !== 'string' ||
20
+ !/^\/[A-Za-z0-9._~-]+(?:\/[A-Za-z0-9._~-]+)*$/.test(basePath) ||
21
+ basePath.split('/').some((segment) => segment === '.' || segment === '..')) {
22
+ throw new Error('basePath must start with /, contain URL-safe path segments, and have no trailing slash');
23
+ }
24
+ return basePath;
25
+ }
26
+ function assertCredentialFree(value, path = 'config') {
27
+ if (!value || typeof value !== 'object')
28
+ return;
29
+ if (Array.isArray(value)) {
30
+ value.forEach((entry, index) => {
31
+ assertCredentialFree(entry, `${path}[${index}]`);
32
+ });
33
+ return;
34
+ }
35
+ for (const [name, entry] of Object.entries(value)) {
36
+ if (sensitiveName.test(name)) {
37
+ throw new Error(`${path}.${name} is a credential field and cannot be built into the app`);
38
+ }
39
+ assertCredentialFree(entry, `${path}.${name}`);
40
+ }
41
+ }
42
+ /** Validate config strictly enough for an immutable public artifact. */
43
+ export function normalizePlannerAppConfig(config) {
44
+ if (!config || typeof config !== 'object' || Array.isArray(config)) {
45
+ throw new Error('config must be an object');
46
+ }
47
+ const unknown = Object.keys(config).filter((name) => name !== 'inference' && name !== 'kitchen');
48
+ if (unknown.length)
49
+ throw new Error(`unknown app config field: ${unknown[0]}`);
50
+ assertCredentialFree(config);
51
+ const inference = validateInferenceConfig({
52
+ inference: config.inference,
53
+ });
54
+ if (inference.notice)
55
+ throw new Error(inference.notice);
56
+ let kitchen;
57
+ if (config.kitchen !== undefined) {
58
+ kitchen = parseKitchenConfig(config.kitchen);
59
+ if (!kitchen) {
60
+ throw new Error('kitchen.endpoint must be a usable http(s) URL');
61
+ }
62
+ }
63
+ return {
64
+ inference: inference.config,
65
+ ...(kitchen ? { kitchen } : {}),
66
+ };
67
+ }
68
+ function patchFallback(file, basePath) {
69
+ const source = readFileSync(file, 'utf8');
70
+ if (!source.includes('/_app/') || !/base:\s*""/.test(source)) {
71
+ throw new Error('packaged 404.html does not match the supported root fallback');
72
+ }
73
+ const patched = source
74
+ .replaceAll('/_app/', `${basePath}/_app/`)
75
+ .replace(/base:\s*""/, `base: ${JSON.stringify(basePath)}`);
76
+ if (patched.includes('"/_app/') || /base:\s*""/.test(patched)) {
77
+ throw new Error('could not make the fallback prefix-safe');
78
+ }
79
+ writeFileSync(file, patched);
80
+ }
81
+ /**
82
+ * Copy the published static app into a deterministic, prefix-safe deployment
83
+ * artifact. The copy is assembled beside `outDir` and renamed only after its
84
+ * fallback and config validate, so callers never receive a partial tree.
85
+ */
86
+ export function materializeApp(options) {
87
+ const basePath = normalizeAppBasePath(options.basePath);
88
+ const config = normalizePlannerAppConfig(options.config);
89
+ const outDir = resolve(options.outDir);
90
+ const source = resolve(appDir);
91
+ const relation = relative(source, outDir);
92
+ if (!relation || (!relation.startsWith(`..${sep}`) && relation !== '..')) {
93
+ throw new Error('outDir must be outside the packaged app directory');
94
+ }
95
+ if (existsSync(outDir)) {
96
+ if (!statSync(outDir).isDirectory() || readdirSync(outDir).length > 0) {
97
+ throw new Error('outDir must be new or empty');
98
+ }
99
+ }
100
+ mkdirSync(dirname(outDir), { recursive: true });
101
+ const temporary = mkdtempSync(resolve(dirname(outDir), '.smrt-planner-'));
102
+ try {
103
+ cpSync(source, temporary, { recursive: true });
104
+ patchFallback(resolve(temporary, '404.html'), basePath);
105
+ writeFileSync(resolve(temporary, 'planner.config.json'), `${JSON.stringify(config, null, 2)}\n`);
106
+ if (existsSync(outDir))
107
+ rmdirSync(outDir);
108
+ renameSync(temporary, outDir);
109
+ }
110
+ catch (error) {
111
+ rmSync(temporary, { recursive: true, force: true });
112
+ throw error;
113
+ }
114
+ return {
115
+ outDir,
116
+ configFile: resolve(outDir, 'planner.config.json'),
117
+ fallbackFile: resolve(outDir, '404.html'),
118
+ };
119
+ }
@@ -0,0 +1,19 @@
1
+ import type { CookbookBrief } from '../assistant/prompt.ts';
2
+ import type { Recipe } from '../recipes/types.ts';
3
+ /**
4
+ * What the assistant's prompt and reply schema are built from: the recipes it
5
+ * may add and the cookbooks it may offer. A host with its own subset passes
6
+ * one to `buildHostPrompt` / `buildReplySchema`; the default is the planner's
7
+ * own library.
8
+ */
9
+ export interface PromptCatalog {
10
+ recipes: readonly Recipe[];
11
+ cookbooks: readonly CookbookBrief[];
12
+ }
13
+ /** Every recipe and every library cookbook, as the browser assistant sees them. */
14
+ export declare const defaultCatalog: PromptCatalog;
15
+ export type { CookbookBrief } from '../assistant/prompt.ts';
16
+ export { getLibraryCookbook, libraryCookbooks } from '../library/index.ts';
17
+ export type { LibraryCookbook } from '../library/types.ts';
18
+ export { getRecipe, recipes, recipesById } from '../recipes/index.ts';
19
+ export type { Recipe } from '../recipes/types.ts';
@@ -0,0 +1,9 @@
1
+ import { libraryCookbooks } from "../library/index.js";
2
+ import { recipes } from "../recipes/index.js";
3
+ /** Every recipe and every library cookbook, as the browser assistant sees them. */
4
+ export const defaultCatalog = {
5
+ recipes,
6
+ cookbooks: libraryCookbooks,
7
+ };
8
+ export { getLibraryCookbook, libraryCookbooks } from "../library/index.js";
9
+ export { getRecipe, recipes, recipesById } from "../recipes/index.js";
@@ -0,0 +1,52 @@
1
+ import type { Cookbook } from '../cookbook/types.ts';
2
+ import type { CommandTool } from '../planner/commands/schemas.ts';
3
+ import type { BatchResult, CommandResult, PlannerCommand, PlanSnapshot, RunOptions } from '../planner/commands/types.ts';
4
+ import type { PromptCatalog } from './catalog.ts';
5
+ export interface HeadlessPlannerOptions {
6
+ /**
7
+ * Restrict the recipes and library cookbooks this plan may name (the same
8
+ * shape `buildHostPrompt` takes). Ids outside it fail validation as
9
+ * `invalid_input`, exactly as a bad enum value does. Default: the whole
10
+ * library.
11
+ */
12
+ catalog?: PromptCatalog;
13
+ }
14
+ /**
15
+ * One plan held in plain objects, driven by the same commands as the browser
16
+ * planner. Runs in plain Node; any number may coexist.
17
+ */
18
+ export interface HeadlessPlanner {
19
+ /**
20
+ * Run one command: same names, input schemas, validation, error codes and
21
+ * receipts as the browser controller. Never throws.
22
+ */
23
+ run(command: PlannerCommand, options?: RunOptions): CommandResult;
24
+ /** Untyped form for commands that arrive as data (a model's tool call). */
25
+ run(command: unknown, options?: RunOptions): CommandResult;
26
+ /** Several commands, all or nothing (the engine's `batch`). */
27
+ batch(batch: unknown): BatchResult;
28
+ /** The current plan, read-only and compact. */
29
+ snapshot(): PlanSnapshot;
30
+ /** The plan as a cookbook document (what `export_cookbook` writes). */
31
+ cookbook(): Cookbook;
32
+ /**
33
+ * Undo the most recent undoable change. `not_found` when there is none; the
34
+ * command `undo` with an explicit `undoId` is available through `run`.
35
+ */
36
+ undo(): CommandResult;
37
+ /** Call `listener` with the snapshot now and after every command. */
38
+ subscribe(listener: (snapshot: PlanSnapshot) => void): () => void;
39
+ /** The command tools this plan validates against (a restricted catalog narrows the enums). */
40
+ readonly tools: readonly CommandTool[];
41
+ }
42
+ /**
43
+ * A planner with no UI, no runes and no module state: the command set over a
44
+ * plain-object plan, for a Node server (an MCP server holds one per plan id).
45
+ * It is smrt's cookbook command engine (`createCookbookEngine`) behind the
46
+ * planner's names, plus `focus`.
47
+ *
48
+ * `cookbook` is the starting document; it goes through the strict import
49
+ * check and the call throws on a document that fails it. Everything after that
50
+ * reports errors through `run`'s result instead.
51
+ */
52
+ export declare function createHeadlessPlanner(cookbook?: Cookbook, options?: HeadlessPlannerOptions): HeadlessPlanner;
@@ -0,0 +1,39 @@
1
+ import { parseCookbookWith } from "../cookbook/parse.js";
2
+ import { createPlannerAdapter, } from "../planner/commands/adapter.js";
3
+ import { engineCatalog, restrictCatalog } from "../planner/commands/catalog.js";
4
+ /**
5
+ * A planner with no UI, no runes and no module state: the command set over a
6
+ * plain-object plan, for a Node server (an MCP server holds one per plan id).
7
+ * It is smrt's cookbook command engine (`createCookbookEngine`) behind the
8
+ * planner's names, plus `focus`.
9
+ *
10
+ * `cookbook` is the starting document; it goes through the strict import
11
+ * check and the call throws on a document that fails it. Everything after that
12
+ * reports errors through `run`'s result instead.
13
+ */
14
+ export function createHeadlessPlanner(cookbook, options = {}) {
15
+ let initial;
16
+ if (cookbook !== undefined) {
17
+ const parsed = parseCookbookWith(cookbook);
18
+ if (!parsed.ok)
19
+ throw new Error(parsed.error);
20
+ initial = parsed.cookbook;
21
+ }
22
+ const base = engineCatalog();
23
+ const adapter = createPlannerAdapter({
24
+ catalog: options.catalog ? restrictCatalog(base, options.catalog) : base,
25
+ cookbook: initial,
26
+ port: { prepareImport: (document) => parseCookbookWith(document) },
27
+ });
28
+ return {
29
+ run: adapter.run,
30
+ batch: adapter.batch,
31
+ snapshot: adapter.snapshot,
32
+ subscribe: adapter.subscribe,
33
+ cookbook: adapter.cookbook,
34
+ undo: adapter.undo,
35
+ get tools() {
36
+ return adapter.tools;
37
+ },
38
+ };
39
+ }