@happyvertical/smrt-planner 0.57.6 → 0.57.8

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 (566) hide show
  1. package/agents/assistant.md +29 -2
  2. package/agents/shell.md +13 -0
  3. package/app/404.html +26 -29
  4. package/app/_app/immutable/assets/0.BaRFeYGU.css +1 -0
  5. package/app/_app/immutable/assets/AppShell.BkKNrxND.css +1 -0
  6. package/app/_app/immutable/assets/{ModelPage.FEM0ZnPM.css → ModelPage.SIoeO-AU.css} +1 -1
  7. package/app/_app/immutable/assets/app.BHwMQ9Zv.css +1 -0
  8. package/app/_app/immutable/assets/{forms.DXOeP4wZ.css → forms.BRdbPdvs.css} +1 -1
  9. package/app/_app/immutable/assets/icons.BDx21rPt.css +1 -0
  10. package/app/_app/immutable/assets/labels.Dxa6EyRI.css +1 -0
  11. package/app/_app/immutable/assets/planner.DOQVfcOi.css +1 -0
  12. package/app/_app/immutable/assets/state.C0UZEhxS.css +1 -0
  13. package/app/_app/immutable/chunks/{CoXf-L_3.js → B45qMR8U.js} +25 -25
  14. package/app/_app/immutable/chunks/{DypPefJO.js → BU0vd8nA.js} +1 -1
  15. package/app/_app/immutable/chunks/BWd9iJf7.js +1 -0
  16. package/app/_app/immutable/chunks/BeJxxDXZ.js +1 -0
  17. package/app/_app/immutable/chunks/BfeotTF9.js +4 -0
  18. package/app/_app/immutable/chunks/BlJ-05MM.js +11 -0
  19. package/app/_app/immutable/chunks/{GdHEbDDH.js → BxyJ_Q7v.js} +1 -1
  20. package/app/_app/immutable/chunks/C6HSENij.js +1 -0
  21. package/app/_app/immutable/chunks/C7boms_S.js +4 -0
  22. package/app/_app/immutable/chunks/{0as86J1A.js → C8kJ-wTn.js} +6 -6
  23. package/app/_app/immutable/chunks/CKd9O-eU.js +1 -0
  24. package/app/_app/immutable/chunks/{BSYvnYu8.js → COQVmnKJ.js} +1 -1
  25. package/app/_app/immutable/chunks/CTlovRev.js +1 -0
  26. package/app/_app/immutable/chunks/{DrjdLb0M.js → CaiMTXlW.js} +2 -2
  27. package/app/_app/immutable/chunks/{exPME6UK.js → CiNYyHrL.js} +1 -1
  28. package/app/_app/immutable/chunks/{BPsie9Wr.js → Cmh0yR4f.js} +1 -1
  29. package/app/_app/immutable/chunks/CsaWd8kG.js +2 -0
  30. package/app/_app/immutable/chunks/{D2Ykv2Y3.js → Ct5r3XV1.js} +1 -1
  31. package/app/_app/immutable/chunks/D0m3WNVh.js +1 -0
  32. package/app/_app/immutable/chunks/DF-0MxNw.js +1 -0
  33. package/app/_app/immutable/chunks/DKi2uwTq.js +2 -0
  34. package/app/_app/immutable/chunks/{PsiVGwJV.js → DWeCJh9N.js} +1 -1
  35. package/app/_app/immutable/chunks/{D8rEUyzO.js → D_xoWitl.js} +1 -1
  36. package/app/_app/immutable/chunks/Dg4KRWOz.js +1 -0
  37. package/app/_app/immutable/chunks/{CdlkzC7D.js → DmvHEN1v.js} +1 -1
  38. package/app/_app/immutable/chunks/{eNZ3ToP2.js → DoGeTgSe.js} +1 -1
  39. package/app/_app/immutable/chunks/DqrQeG8L.js +26 -0
  40. package/app/_app/immutable/chunks/{Dyf3Cj8R.js → DziaAoFY.js} +1 -1
  41. package/app/_app/immutable/chunks/{Dzh-1KQR.js → QJX7BlhI.js} +1 -1
  42. package/app/_app/immutable/chunks/Ywu-998J.js +2 -0
  43. package/app/_app/immutable/chunks/nB-x9BEp.js +16 -0
  44. package/app/_app/immutable/chunks/{CwNhmq3e.js → ptmcJq5j.js} +1 -1
  45. package/app/_app/immutable/entry/app.g4Bu04a3.js +2 -0
  46. package/app/_app/immutable/entry/start.C4bzxGdW.js +1 -0
  47. package/app/_app/immutable/nodes/0.C6N6B83E.js +7 -0
  48. package/app/_app/immutable/nodes/{1.CTatAlE5.js → 1.9pTjyJp5.js} +1 -1
  49. package/app/_app/immutable/nodes/{10.DHnK3kbB.js → 10.BkbBDSaP.js} +1 -1
  50. package/app/_app/immutable/nodes/{11.Ck1kcQLu.js → 11.BcVi4XqZ.js} +1 -1
  51. package/app/_app/immutable/nodes/{12.oK17D56_.js → 12.j9PkVob2.js} +1 -1
  52. package/app/_app/immutable/nodes/{13.DlEsuw6F.js → 13.BOUYEx8n.js} +1 -1
  53. package/app/_app/immutable/nodes/14.CuMuuCU7.js +1 -0
  54. package/app/_app/immutable/nodes/2.BHCkcrHF.js +24 -0
  55. package/app/_app/immutable/nodes/{3.DOL1VeVM.js → 3.D6l9gEJu.js} +1 -1
  56. package/app/_app/immutable/nodes/{4.CiKq5-ek.js → 4.BUHWJvB3.js} +1 -1
  57. package/app/_app/immutable/nodes/{5.nKUg_W9L.js → 5.C1jfy8Yg.js} +1 -1
  58. package/app/_app/immutable/nodes/{6.CVGw-hLa.js → 6.LSyNtBLJ.js} +1 -1
  59. package/app/_app/immutable/nodes/{7.Clo6kG4w.js → 7.CC7rRIn7.js} +1 -1
  60. package/app/_app/immutable/nodes/{8.C3moca98.js → 8.S9H6LDRX.js} +1 -1
  61. package/app/_app/immutable/nodes/{9.BnVJx5kW.js → 9.BPt57fDH.js} +1 -1
  62. package/app/_app/version.json +1 -1
  63. package/app/advanced-styles/index.html +32 -33
  64. package/app/ai/index.html +37 -38
  65. package/app/blueprint/index.html +27 -30
  66. package/app/cookbook/index.html +27 -30
  67. package/app/index.html +36 -39
  68. package/app/m/ads/AdDeliveryTier/index.html +34 -35
  69. package/app/m/ads/AdEvent/index.html +34 -35
  70. package/app/m/ads/AdFormat/index.html +34 -35
  71. package/app/m/ads/AdGroup/index.html +34 -35
  72. package/app/m/ads/AdVariation/index.html +34 -35
  73. package/app/m/analytics/AnalyticsDataStream/index.html +34 -35
  74. package/app/m/analytics/AnalyticsEvent/index.html +34 -35
  75. package/app/m/analytics/AnalyticsProperty/index.html +34 -35
  76. package/app/m/analytics/AnalyticsReport/index.html +34 -35
  77. package/app/m/approvals/ApprovalEvent/index.html +34 -35
  78. package/app/m/approvals/ApprovalPolicy/index.html +34 -35
  79. package/app/m/approvals/ApprovalRequest/index.html +34 -35
  80. package/app/m/assets/Asset/attachments/index.html +36 -37
  81. package/app/m/assets/Asset/index.html +34 -35
  82. package/app/m/assets/AssetAssociation/index.html +35 -36
  83. package/app/m/assets/AssetMetafield/index.html +34 -35
  84. package/app/m/assets/AssetStatus/index.html +34 -35
  85. package/app/m/assets/AssetType/index.html +34 -35
  86. package/app/m/assets/Folder/index.html +34 -35
  87. package/app/m/chat/AgentSession/index.html +34 -35
  88. package/app/m/chat/ChatMessage/index.html +35 -36
  89. package/app/m/chat/ChatParticipant/index.html +35 -36
  90. package/app/m/chat/ChatReaction/index.html +34 -35
  91. package/app/m/chat/ChatRoom/index.html +34 -35
  92. package/app/m/chat/ChatThread/index.html +35 -36
  93. package/app/m/chat/VoiceGatewayTurn/index.html +34 -35
  94. package/app/m/chat/VoiceSession/index.html +34 -35
  95. package/app/m/commerce/Agreement/index.html +34 -35
  96. package/app/m/commerce/Cart/index.html +34 -35
  97. package/app/m/commerce/Contract/index.html +34 -35
  98. package/app/m/commerce/ContractLineItem/index.html +35 -36
  99. package/app/m/commerce/Customer/index.html +34 -35
  100. package/app/m/commerce/DocumentTax/index.html +34 -35
  101. package/app/m/commerce/Estimate/index.html +34 -35
  102. package/app/m/commerce/Fulfillment/index.html +34 -35
  103. package/app/m/commerce/FulfillmentLineItem/index.html +35 -36
  104. package/app/m/commerce/HistoricalCustomerFunds/index.html +34 -35
  105. package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +34 -35
  106. package/app/m/commerce/HistoricalSalesLine/index.html +34 -35
  107. package/app/m/commerce/Invoice/index.html +34 -35
  108. package/app/m/commerce/InvoiceLineItem/index.html +35 -36
  109. package/app/m/commerce/Lease/index.html +34 -35
  110. package/app/m/commerce/LicenseSale/index.html +34 -35
  111. package/app/m/commerce/Order/index.html +34 -35
  112. package/app/m/commerce/Payment/index.html +34 -35
  113. package/app/m/commerce/PaymentAllocation/index.html +35 -36
  114. package/app/m/commerce/PaymentInstrument/index.html +34 -35
  115. package/app/m/commerce/PaymentIntent/index.html +34 -35
  116. package/app/m/commerce/Payout/index.html +34 -35
  117. package/app/m/commerce/ProductionOrder/index.html +34 -35
  118. package/app/m/commerce/PurchaseContract/index.html +34 -35
  119. package/app/m/commerce/PurchaseOrder/index.html +34 -35
  120. package/app/m/commerce/SalesContract/index.html +34 -35
  121. package/app/m/commerce/SupplierQuote/index.html +34 -35
  122. package/app/m/commerce/TaxCode/index.html +34 -35
  123. package/app/m/commerce/TaxComponent/index.html +34 -35
  124. package/app/m/commerce/TaxSettings/index.html +34 -35
  125. package/app/m/commerce/TaxSummaryReport/index.html +34 -35
  126. package/app/m/commerce/Vendor/index.html +34 -35
  127. package/app/m/commerce/WholesaleOrder/index.html +34 -35
  128. package/app/m/content/Content/index.html +34 -35
  129. package/app/m/content/ContentContribution/index.html +34 -35
  130. package/app/m/content/ContentContributionAttachment/index.html +34 -35
  131. package/app/m/content/ContentContributionRevision/index.html +34 -35
  132. package/app/m/content/ContentContributionType/index.html +34 -35
  133. package/app/m/content/ContentContributor/index.html +34 -35
  134. package/app/m/content/ContentCorrection/index.html +34 -35
  135. package/app/m/content/ContentFeedSource/index.html +34 -35
  136. package/app/m/content/ContentGovernanceAssignment/index.html +34 -35
  137. package/app/m/content/ContentGovernancePolicy/index.html +34 -35
  138. package/app/m/content/ContentGovernanceProfile/index.html +34 -35
  139. package/app/m/content/ContentReference/index.html +34 -35
  140. package/app/m/content/ContentReview/index.html +34 -35
  141. package/app/m/content/ContentVersion/index.html +34 -35
  142. package/app/m/events/Event/index.html +34 -35
  143. package/app/m/events/EventParticipant/index.html +35 -36
  144. package/app/m/events/EventSeries/index.html +34 -35
  145. package/app/m/events/EventType/index.html +34 -35
  146. package/app/m/expenses/Expense/index.html +34 -35
  147. package/app/m/facts/Fact/index.html +34 -35
  148. package/app/m/facts/FactContent/index.html +34 -35
  149. package/app/m/facts/FactEvidence/index.html +34 -35
  150. package/app/m/facts/FactSource/index.html +34 -35
  151. package/app/m/facts/FactSubject/index.html +34 -35
  152. package/app/m/facts/FactTag/index.html +34 -35
  153. package/app/m/fields/FieldPolicy/index.html +34 -35
  154. package/app/m/fields/FieldPolicySuggestion/index.html +34 -35
  155. package/app/m/fields/FieldUsageCounter/index.html +34 -35
  156. package/app/m/images/Image/index.html +34 -35
  157. package/app/m/inventory/InventoryLocation/index.html +34 -35
  158. package/app/m/inventory/StockLevel/index.html +34 -35
  159. package/app/m/inventory/StockMovement/index.html +34 -35
  160. package/app/m/ledgers/Account/index.html +34 -35
  161. package/app/m/ledgers/Journal/index.html +34 -35
  162. package/app/m/ledgers/JournalEntry/index.html +35 -36
  163. package/app/m/ledgers/Ledger/index.html +34 -35
  164. package/app/m/manufacturing/Assembly/index.html +34 -35
  165. package/app/m/manufacturing/BillOfMaterials/index.html +34 -35
  166. package/app/m/manufacturing/BomLine/index.html +34 -35
  167. package/app/m/manufacturing/Operation/index.html +34 -35
  168. package/app/m/manufacturing/ProductionRun/index.html +34 -35
  169. package/app/m/manufacturing/ProductionRunCompletion/index.html +34 -35
  170. package/app/m/manufacturing/RoutingStep/index.html +34 -35
  171. package/app/m/marketing/Campaign/index.html +34 -35
  172. package/app/m/marketing/CampaignChannel/index.html +34 -35
  173. package/app/m/marketing/CampaignMetricSnapshot/index.html +34 -35
  174. package/app/m/messages/Account/index.html +34 -35
  175. package/app/m/messages/Attachment/index.html +34 -35
  176. package/app/m/messages/Blacklist/index.html +34 -35
  177. package/app/m/messages/Email/failed-sends/index.html +36 -37
  178. package/app/m/messages/Email/index.html +34 -35
  179. package/app/m/messages/Email/mailbox/index.html +36 -37
  180. package/app/m/messages/EmailAccount/index.html +34 -35
  181. package/app/m/messages/EmailAttachment/index.html +34 -35
  182. package/app/m/messages/EmailFolder/index.html +34 -35
  183. package/app/m/messages/Message/index.html +34 -35
  184. package/app/m/messages/MessagingEndpoint/index.html +34 -35
  185. package/app/m/messages/PersonaMessageRoute/index.html +34 -35
  186. package/app/m/messages/SlackAccount/index.html +34 -35
  187. package/app/m/messages/SlackMessage/index.html +34 -35
  188. package/app/m/messages/TelegramAccount/index.html +34 -35
  189. package/app/m/messages/Tweet/index.html +34 -35
  190. package/app/m/messages/TwitterAccount/index.html +34 -35
  191. package/app/m/messages/Whitelist/index.html +34 -35
  192. package/app/m/messages/ZulipAccount/index.html +34 -35
  193. package/app/m/places/Place/index.html +34 -35
  194. package/app/m/places/PlaceType/index.html +34 -35
  195. package/app/m/products/Category/index.html +34 -35
  196. package/app/m/products/Material/index.html +34 -35
  197. package/app/m/products/Product/index.html +34 -35
  198. package/app/m/products/Product/ingredients/index.html +36 -37
  199. package/app/m/products/ProductVariant/index.html +35 -36
  200. package/app/m/products/Sku/index.html +35 -36
  201. package/app/m/profiles/ApiKey/index.html +34 -35
  202. package/app/m/profiles/Bot/index.html +34 -35
  203. package/app/m/profiles/MagicLinkToken/index.html +34 -35
  204. package/app/m/profiles/NostrIdentity/index.html +34 -35
  205. package/app/m/profiles/OidcIdentity/index.html +34 -35
  206. package/app/m/profiles/Organization/index.html +34 -35
  207. package/app/m/profiles/Person/index.html +34 -35
  208. package/app/m/profiles/Profile/index.html +34 -35
  209. package/app/m/profiles/ProfileMetadata/index.html +34 -35
  210. package/app/m/profiles/ProfileMetafield/index.html +34 -35
  211. package/app/m/profiles/ProfileRelationship/index.html +34 -35
  212. package/app/m/profiles/ProfileRelationshipTerm/index.html +34 -35
  213. package/app/m/profiles/ProfileRelationshipType/index.html +34 -35
  214. package/app/m/profiles/ProfileType/index.html +34 -35
  215. package/app/m/projects/Comment/index.html +35 -36
  216. package/app/m/projects/Issue/index.html +34 -35
  217. package/app/m/projects/Label/index.html +34 -35
  218. package/app/m/projects/Project/index.html +34 -35
  219. package/app/m/projects/ProjectIntegration/index.html +34 -35
  220. package/app/m/projects/PullRequest/index.html +34 -35
  221. package/app/m/projects/Repository/index.html +34 -35
  222. package/app/m/properties/Property/index.html +34 -35
  223. package/app/m/properties/Zone/index.html +34 -35
  224. package/app/m/reports/RuntimeReport/index.html +38 -36
  225. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +34 -35
  226. package/app/m/reports/SmrtReportLock/index.html +34 -35
  227. package/app/m/reports/SmrtReportRefreshTask/index.html +34 -35
  228. package/app/m/reports/SmrtReportRun/index.html +34 -35
  229. package/app/m/reports/SmrtReportSchedule/index.html +34 -35
  230. package/app/m/reports/SmrtReportWatermark/index.html +34 -35
  231. package/app/m/sales/Agreement/index.html +34 -35
  232. package/app/m/sales/AttributionException/index.html +34 -35
  233. package/app/m/sales/AttributionPolicy/index.html +34 -35
  234. package/app/m/sales/Commission/index.html +34 -35
  235. package/app/m/sales/CommissionAdjustment/index.html +34 -35
  236. package/app/m/sales/CommissionPayout/index.html +34 -35
  237. package/app/m/sales/CommissionPlan/index.html +34 -35
  238. package/app/m/sales/Earner/index.html +34 -35
  239. package/app/m/sales/EarnerSourceAttribution/index.html +34 -35
  240. package/app/m/sales/EarningEvent/index.html +34 -35
  241. package/app/m/sales/ExecutedAgreement/index.html +34 -35
  242. package/app/m/sales/Lead/index.html +34 -35
  243. package/app/m/sales/Opportunity/index.html +34 -35
  244. package/app/m/sales/OpportunityConversion/index.html +34 -35
  245. package/app/m/sales/PipelineDefinition/index.html +34 -35
  246. package/app/m/sales/PipelineStage/index.html +35 -36
  247. package/app/m/sales/Referral/index.html +34 -35
  248. package/app/m/sales/ReferralAgreement/index.html +34 -35
  249. package/app/m/sales/ReferralLink/index.html +34 -35
  250. package/app/m/sales/ReferralProgram/index.html +34 -35
  251. package/app/m/sales/ReferralTermSnapshot/index.html +34 -35
  252. package/app/m/sales/ReferralTouch/index.html +34 -35
  253. package/app/m/sales/Referrer/index.html +34 -35
  254. package/app/m/sales/SalesActivity/index.html +34 -35
  255. package/app/m/sales/SalesRepresentative/index.html +34 -35
  256. package/app/m/sites/Site/index.html +34 -35
  257. package/app/m/sites/SiteAgentBinding/index.html +34 -35
  258. package/app/m/social/OAuthState/index.html +34 -35
  259. package/app/m/social/SocialAccount/index.html +34 -35
  260. package/app/m/social/SocialPost/index.html +34 -35
  261. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +34 -35
  262. package/app/m/subscriptions/BillingAdjustment/index.html +34 -35
  263. package/app/m/subscriptions/ClientCharge/index.html +34 -35
  264. package/app/m/subscriptions/CreditGrant/index.html +34 -35
  265. package/app/m/subscriptions/PricingRule/index.html +34 -35
  266. package/app/m/subscriptions/RetailCharge/index.html +34 -35
  267. package/app/m/subscriptions/SpendingPolicy/index.html +34 -35
  268. package/app/m/subscriptions/SubscriptionPlan/index.html +34 -35
  269. package/app/m/subscriptions/TenantSubscription/index.html +34 -35
  270. package/app/m/subscriptions/TenantUsageMetric/index.html +34 -35
  271. package/app/m/support/ServiceTimeEntry/index.html +34 -35
  272. package/app/m/support/SupportAiRun/index.html +34 -35
  273. package/app/m/support/SupportAvailability/index.html +34 -35
  274. package/app/m/support/SupportCase/index.html +34 -35
  275. package/app/m/support/SupportCaseEvent/index.html +34 -35
  276. package/app/m/support/SupportChannelBinding/index.html +34 -35
  277. package/app/m/support/SupportCharge/index.html +34 -35
  278. package/app/m/support/SupportCompensation/index.html +34 -35
  279. package/app/m/support/SupportCompensationPlan/index.html +34 -35
  280. package/app/m/support/SupportEscalation/index.html +34 -35
  281. package/app/m/support/SupportInteraction/index.html +34 -35
  282. package/app/m/support/SupportPlan/index.html +34 -35
  283. package/app/m/support/SupportPolicy/index.html +34 -35
  284. package/app/m/support/SupportQualification/index.html +34 -35
  285. package/app/m/support/SupportServiceTarget/index.html +34 -35
  286. package/app/m/support/SupportSpecialist/index.html +34 -35
  287. package/app/m/support/SupportWorkLink/index.html +34 -35
  288. package/app/m/tags/Tag/index.html +34 -35
  289. package/app/m/tags/TagAlias/index.html +34 -35
  290. package/app/m/timesheets/AttendanceBreak/index.html +34 -35
  291. package/app/m/timesheets/AttendancePunch/index.html +34 -35
  292. package/app/m/timesheets/AttendanceSegment/index.html +34 -35
  293. package/app/m/timesheets/ServiceChargeSnapshot/index.html +34 -35
  294. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +34 -35
  295. package/app/m/timesheets/ServiceTimeEntry/index.html +34 -35
  296. package/app/m/users/Group/index.html +34 -35
  297. package/app/m/users/GroupMember/index.html +34 -35
  298. package/app/m/users/GroupRole/index.html +34 -35
  299. package/app/m/users/Membership/index.html +35 -36
  300. package/app/m/users/MembershipOverride/index.html +34 -35
  301. package/app/m/users/Permission/index.html +34 -35
  302. package/app/m/users/Role/index.html +34 -35
  303. package/app/m/users/RolePermission/index.html +34 -35
  304. package/app/m/users/Session/index.html +34 -35
  305. package/app/m/users/Tenant/index.html +34 -35
  306. package/app/m/users/TenantIntegration/index.html +34 -35
  307. package/app/m/users/TenantPermissionOverride/index.html +34 -35
  308. package/app/m/users/User/index.html +34 -35
  309. package/app/m/video/Character/index.html +34 -35
  310. package/app/m/video/CharacterAsset/index.html +34 -35
  311. package/app/m/video/CompositeJob/index.html +34 -35
  312. package/app/m/video/Performer/index.html +34 -35
  313. package/app/m/video/PerformerAsset/index.html +34 -35
  314. package/app/m/video/Scene/index.html +34 -35
  315. package/app/m/video/SceneAsset/index.html +34 -35
  316. package/app/m/video/VideoComposition/index.html +34 -35
  317. package/app/m/video/VideoCompositionAsset/index.html +34 -35
  318. package/app/m/video/VideoSequence/index.html +34 -35
  319. package/app/m/video/VideoSequenceAsset/index.html +34 -35
  320. package/app/m/video/VideoShot/index.html +34 -35
  321. package/app/m/video/VideoShotAsset/index.html +34 -35
  322. package/app/m/video/VideoShotCharacter/index.html +34 -35
  323. package/app/m/video/VideoWorkflow/index.html +34 -35
  324. package/app/m/voice/VoiceOutput/index.html +34 -35
  325. package/app/m/voice/VoiceProfile/index.html +34 -35
  326. package/app/m/voice/VoiceSample/index.html +34 -35
  327. package/app/mcp.html +2 -2
  328. package/app/packages/ads/index.html +29 -32
  329. package/app/packages/analytics/index.html +29 -32
  330. package/app/packages/approvals/index.html +29 -32
  331. package/app/packages/assets/index.html +29 -32
  332. package/app/packages/chat/index.html +29 -32
  333. package/app/packages/comments/index.html +29 -32
  334. package/app/packages/commerce/index.html +29 -32
  335. package/app/packages/content/index.html +29 -32
  336. package/app/packages/events/index.html +29 -32
  337. package/app/packages/expenses/index.html +29 -32
  338. package/app/packages/facts/index.html +29 -32
  339. package/app/packages/fields/index.html +29 -32
  340. package/app/packages/human-resources/index.html +29 -32
  341. package/app/packages/images/index.html +29 -32
  342. package/app/packages/index.html +28 -31
  343. package/app/packages/ingestion/index.html +29 -32
  344. package/app/packages/inventory/index.html +29 -32
  345. package/app/packages/ledgers/index.html +29 -32
  346. package/app/packages/manufacturing/index.html +29 -32
  347. package/app/packages/marketing/index.html +29 -32
  348. package/app/packages/messages/index.html +29 -32
  349. package/app/packages/places/index.html +29 -32
  350. package/app/packages/preferences/index.html +29 -32
  351. package/app/packages/products/index.html +29 -32
  352. package/app/packages/profiles/index.html +29 -32
  353. package/app/packages/projects/index.html +29 -32
  354. package/app/packages/properties/index.html +29 -32
  355. package/app/packages/reports/index.html +29 -32
  356. package/app/packages/sales/index.html +29 -32
  357. package/app/packages/sites/index.html +29 -32
  358. package/app/packages/social/index.html +29 -32
  359. package/app/packages/subscriptions/index.html +29 -32
  360. package/app/packages/support/index.html +29 -32
  361. package/app/packages/tags/index.html +29 -32
  362. package/app/packages/timesheets/index.html +29 -32
  363. package/app/packages/users/index.html +29 -32
  364. package/app/packages/video/index.html +29 -32
  365. package/app/packages/voice/index.html +29 -32
  366. package/app/packages/webhooks/index.html +29 -32
  367. package/app/recipes/account-access/help/index.html +31 -34
  368. package/app/recipes/account-access/index.html +34 -36
  369. package/app/recipes/activity/help/index.html +30 -33
  370. package/app/recipes/activity/index.html +34 -36
  371. package/app/recipes/agreements/help/index.html +30 -33
  372. package/app/recipes/agreements/index.html +34 -36
  373. package/app/recipes/analytics.reports/help/index.html +30 -33
  374. package/app/recipes/analytics.reports/index.html +34 -36
  375. package/app/recipes/assets/help/index.html +30 -33
  376. package/app/recipes/assets/index.html +34 -36
  377. package/app/recipes/billing/help/index.html +30 -33
  378. package/app/recipes/billing/index.html +34 -36
  379. package/app/recipes/chat.assistant/help/index.html +30 -33
  380. package/app/recipes/chat.assistant/index.html +34 -36
  381. package/app/recipes/comments/help/index.html +30 -33
  382. package/app/recipes/comments/index.html +34 -36
  383. package/app/recipes/commerce.customers/help/index.html +30 -33
  384. package/app/recipes/commerce.customers/index.html +34 -36
  385. package/app/recipes/commerce.estimates/help/index.html +30 -33
  386. package/app/recipes/commerce.estimates/index.html +34 -36
  387. package/app/recipes/commerce.purchases/help/index.html +30 -33
  388. package/app/recipes/commerce.purchases/index.html +34 -36
  389. package/app/recipes/commerce.sales/help/index.html +30 -33
  390. package/app/recipes/commerce.sales/index.html +34 -36
  391. package/app/recipes/commerce.vendors/help/index.html +30 -33
  392. package/app/recipes/commerce.vendors/index.html +34 -36
  393. package/app/recipes/commerce.wholesale/help/index.html +30 -33
  394. package/app/recipes/commerce.wholesale/index.html +34 -36
  395. package/app/recipes/events.calendar/help/index.html +30 -33
  396. package/app/recipes/events.calendar/index.html +34 -36
  397. package/app/recipes/expenses.tracking/help/index.html +30 -33
  398. package/app/recipes/expenses.tracking/index.html +34 -36
  399. package/app/recipes/fields.form-customization/help/index.html +30 -33
  400. package/app/recipes/fields.form-customization/index.html +34 -36
  401. package/app/recipes/ingestion/help/index.html +30 -33
  402. package/app/recipes/ingestion/index.html +34 -36
  403. package/app/recipes/integrations/help/index.html +30 -33
  404. package/app/recipes/integrations/index.html +34 -36
  405. package/app/recipes/inventory.stock/help/index.html +30 -33
  406. package/app/recipes/inventory.stock/index.html +34 -36
  407. package/app/recipes/ledgers.bookkeeping/help/index.html +30 -33
  408. package/app/recipes/ledgers.bookkeeping/index.html +34 -36
  409. package/app/recipes/messages/help/index.html +30 -33
  410. package/app/recipes/messages/index.html +34 -36
  411. package/app/recipes/products/help/index.html +30 -33
  412. package/app/recipes/products/index.html +34 -36
  413. package/app/recipes/projects.tracker/help/index.html +30 -33
  414. package/app/recipes/projects.tracker/index.html +34 -36
  415. package/app/recipes/reports.materialized/help/index.html +30 -33
  416. package/app/recipes/reports.materialized/index.html +34 -36
  417. package/app/recipes/reports.runtime/help/index.html +31 -34
  418. package/app/recipes/reports.runtime/index.html +35 -37
  419. package/app/recipes/sales.pipeline/help/index.html +30 -33
  420. package/app/recipes/sales.pipeline/index.html +34 -36
  421. package/app/recipes/tags.taxonomy/help/index.html +30 -33
  422. package/app/recipes/tags.taxonomy/index.html +34 -36
  423. package/app/recipes/team-collaboration/help/index.html +30 -33
  424. package/app/recipes/team-collaboration/index.html +34 -36
  425. package/app/recipes/timesheets.time-entries/help/index.html +30 -33
  426. package/app/recipes/timesheets.time-entries/index.html +34 -36
  427. package/app/s/custom-accounts/index.html +27 -30
  428. package/app/s/custom-appointments/index.html +27 -30
  429. package/app/s/custom-billing/index.html +27 -30
  430. package/app/s/custom-bookings/index.html +27 -30
  431. package/app/s/custom-buying/index.html +27 -30
  432. package/app/s/custom-checkout/index.html +27 -30
  433. package/app/s/custom-classes/index.html +27 -30
  434. package/app/s/custom-clients/index.html +27 -30
  435. package/app/s/custom-events/index.html +27 -30
  436. package/app/s/custom-fleet/index.html +27 -30
  437. package/app/s/custom-gigs/index.html +27 -30
  438. package/app/s/custom-giving/index.html +27 -30
  439. package/app/s/custom-instruments/index.html +27 -30
  440. package/app/s/custom-jobs/index.html +27 -30
  441. package/app/s/custom-kitchen/index.html +27 -30
  442. package/app/s/custom-lessons/index.html +27 -30
  443. package/app/s/custom-material/index.html +27 -30
  444. package/app/s/custom-meetings/index.html +27 -30
  445. package/app/s/custom-members/index.html +27 -30
  446. package/app/s/custom-merch/index.html +27 -30
  447. package/app/s/custom-money/index.html +27 -30
  448. package/app/s/custom-paint/index.html +27 -30
  449. package/app/s/custom-parts/index.html +27 -30
  450. package/app/s/custom-rentals/index.html +27 -30
  451. package/app/s/custom-roastery/index.html +27 -30
  452. package/app/s/custom-schedule/index.html +27 -30
  453. package/app/s/custom-shelf/index.html +27 -30
  454. package/app/s/custom-shop/index.html +27 -30
  455. package/app/s/custom-students/index.html +27 -30
  456. package/app/s/custom-wholesale/index.html +27 -30
  457. package/app/s/custom-work/index.html +27 -30
  458. package/app/s/custom-yard/index.html +27 -30
  459. package/app/s/section-access-control/index.html +27 -30
  460. package/app/s/section-account-security/index.html +27 -30
  461. package/app/s/section-accounting/index.html +27 -30
  462. package/app/s/section-activity/index.html +27 -30
  463. package/app/s/section-agreements/index.html +27 -30
  464. package/app/s/section-analytics/index.html +27 -30
  465. package/app/s/section-assets/index.html +27 -30
  466. package/app/s/section-billing/index.html +27 -30
  467. package/app/s/section-calendar/index.html +27 -30
  468. package/app/s/section-catalog/index.html +27 -30
  469. package/app/s/section-chat.assistant/index.html +27 -30
  470. package/app/s/section-comments/index.html +27 -30
  471. package/app/s/section-fields.form-customization/index.html +27 -30
  472. package/app/s/section-ingestion/index.html +27 -30
  473. package/app/s/section-integrations/index.html +27 -30
  474. package/app/s/section-messages/index.html +27 -30
  475. package/app/s/section-more/index.html +27 -30
  476. package/app/s/section-operations/index.html +27 -30
  477. package/app/s/section-projects/index.html +27 -30
  478. package/app/s/section-purchasing/index.html +27 -30
  479. package/app/s/section-reports.materialized/index.html +27 -30
  480. package/app/s/section-reports.runtime/index.html +27 -30
  481. package/app/s/section-sales/index.html +27 -30
  482. package/app/s/section-taxonomy/index.html +27 -30
  483. package/app/s/section-team/index.html +27 -30
  484. package/app/s/section-work/index.html +27 -30
  485. package/dist/assistant/change.d.ts +10 -1
  486. package/dist/assistant/change.d.ts.map +1 -1
  487. package/dist/assistant/change.js +6 -1
  488. package/dist/assistant/prompt.d.ts +10 -1
  489. package/dist/assistant/prompt.d.ts.map +1 -1
  490. package/dist/assistant/prompt.js +42 -7
  491. package/dist/assistant/session.svelte.d.ts +6 -0
  492. package/dist/assistant/session.svelte.d.ts.map +1 -1
  493. package/dist/assistant/session.svelte.js +6 -0
  494. package/dist/assistant/transport.d.ts +23 -3
  495. package/dist/assistant/transport.d.ts.map +1 -1
  496. package/dist/assistant/transport.js +356 -13
  497. package/dist/catalog/catalog.json +119 -41
  498. package/dist/components/BrowserAssistant.svelte +26 -0
  499. package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -1
  500. package/dist/components/ModelPage.svelte +36 -4
  501. package/dist/components/ModelPage.svelte.d.ts.map +1 -1
  502. package/dist/components/PlannerReports.svelte +61 -0
  503. package/dist/components/PlannerReports.svelte.d.ts +10 -0
  504. package/dist/components/PlannerReports.svelte.d.ts.map +1 -0
  505. package/dist/components/PlannerSavedReportsWidget.svelte +38 -0
  506. package/dist/components/PlannerSavedReportsWidget.svelte.d.ts +9 -0
  507. package/dist/components/PlannerSavedReportsWidget.svelte.d.ts.map +1 -0
  508. package/dist/components/ReportProposalCard.svelte +63 -0
  509. package/dist/components/ReportProposalCard.svelte.d.ts +17 -0
  510. package/dist/components/ReportProposalCard.svelte.d.ts.map +1 -0
  511. package/dist/components/SectionOverview.svelte +22 -1
  512. package/dist/components/SectionOverview.svelte.d.ts.map +1 -1
  513. package/dist/core/prompt.d.ts.map +1 -1
  514. package/dist/core/prompt.js +7 -1
  515. package/dist/core/reply.d.ts +6 -0
  516. package/dist/core/reply.d.ts.map +1 -1
  517. package/dist/core/reply.js +11 -0
  518. package/dist/data/planner-source.d.ts.map +1 -1
  519. package/dist/data/planner-source.js +4 -1
  520. package/dist/overviews/definitions.d.ts.map +1 -1
  521. package/dist/overviews/definitions.js +6 -1
  522. package/dist/overviews/registry.d.ts.map +1 -1
  523. package/dist/overviews/registry.js +9 -5
  524. package/dist/planner/Planner.svelte +17 -0
  525. package/dist/planner/Planner.svelte.d.ts.map +1 -1
  526. package/dist/planner/instance.d.ts +6 -0
  527. package/dist/planner/instance.d.ts.map +1 -1
  528. package/dist/planner/shell.d.ts.map +1 -1
  529. package/dist/planner/shell.js +3 -1
  530. package/dist/reports/intent.d.ts +106 -0
  531. package/dist/reports/intent.d.ts.map +1 -0
  532. package/dist/reports/intent.js +667 -0
  533. package/dist/reports/planner.d.ts +33 -0
  534. package/dist/reports/planner.d.ts.map +1 -0
  535. package/dist/reports/planner.js +60 -0
  536. package/dist/reports/sources.d.ts +36 -0
  537. package/dist/reports/sources.d.ts.map +1 -0
  538. package/dist/reports/sources.js +125 -0
  539. package/dist/reports/store.d.ts +64 -0
  540. package/dist/reports/store.d.ts.map +1 -0
  541. package/dist/reports/store.js +214 -0
  542. package/dist/smrt-version.d.ts +1 -1
  543. package/dist/smrt-version.js +1 -1
  544. package/package.json +54 -54
  545. package/app/_app/immutable/assets/0.C8CwV4Fz.css +0 -1
  546. package/app/_app/immutable/assets/AppShell.DrL8T9I9.css +0 -1
  547. package/app/_app/immutable/assets/app.4ScdTV_S.css +0 -1
  548. package/app/_app/immutable/assets/labels.AVmg4hBz.css +0 -1
  549. package/app/_app/immutable/assets/state.CkVocVUJ.css +0 -1
  550. package/app/_app/immutable/chunks/B7d7dGCP.js +0 -1
  551. package/app/_app/immutable/chunks/C3nKLKKd.js +0 -1
  552. package/app/_app/immutable/chunks/CXKa_xdk.js +0 -4
  553. package/app/_app/immutable/chunks/CdBvpdnq.js +0 -4
  554. package/app/_app/immutable/chunks/D31rqKs1.js +0 -1
  555. package/app/_app/immutable/chunks/DBp81N-t.js +0 -24
  556. package/app/_app/immutable/chunks/DzRTyOpH.js +0 -1
  557. package/app/_app/immutable/chunks/GVQNHDp5.js +0 -1
  558. package/app/_app/immutable/chunks/M-CuJzQN.js +0 -1
  559. package/app/_app/immutable/chunks/ORlJSBRk.js +0 -1
  560. package/app/_app/immutable/chunks/gMSmS-_y.js +0 -2
  561. package/app/_app/immutable/chunks/jol435F5.js +0 -11
  562. package/app/_app/immutable/entry/app.C_C191oT.js +0 -2
  563. package/app/_app/immutable/entry/start.C01jT-Kj.js +0 -1
  564. package/app/_app/immutable/nodes/0._tbUx7Ky.js +0 -9
  565. package/app/_app/immutable/nodes/14.sDZ3z4Zh.js +0 -1
  566. package/app/_app/immutable/nodes/2.GYBHfqdI.js +0 -24
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/lib/reports/planner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAYlE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The app's runtime reports: `createPlannerReports` over the planner's sample
3
+ * data, the recipes that are on and the sample clock. The assistant, the
4
+ * Saved reports page and a saved report's page all use one of these per
5
+ * data source.
6
+ */
7
+ import { announceShellNavigation } from '@happyvertical/smrt-svelte/workspace';
8
+ import { EPOCH } from "../data/fakes.js";
9
+ import { plannerRuntime } from "../planner/instance.js";
10
+ import { recipes } from "../recipes/index.js";
11
+ import { recipeState } from "../recipes/state.svelte.js";
12
+ import { createPlannerReports, reportPath, } from "./store.js";
13
+ const bound = new WeakMap();
14
+ /**
15
+ * Reports over `data`. Periods ("last month") are relative to the sample
16
+ * data's clock (`EPOCH`), as the overview charts are, so they find the rows
17
+ * the sample records carry.
18
+ */
19
+ export function plannerReportsFor(data) {
20
+ let reports = bound.get(data);
21
+ if (!reports) {
22
+ reports = createPlannerReports({
23
+ data,
24
+ recipeIds: () => recipeState.ids,
25
+ recipes,
26
+ now: () => new Date(EPOCH),
27
+ });
28
+ bound.set(data, reports);
29
+ }
30
+ return reports;
31
+ }
32
+ /**
33
+ * After the person approved a report: open it under Saved reports, through
34
+ * the running app's own navigation (the static layout's router or a mounted
35
+ * planner's fragment). Unset, the confirmation card's link still reaches it.
36
+ */
37
+ export async function openSavedReport(report) {
38
+ await plannerRuntime.openPath?.(reportPath(report.id));
39
+ }
40
+ /**
41
+ * Open a saved report, then announce the navigation from `from` (inside the
42
+ * dock) so the shell closes an overlaying dock and focuses the report's own
43
+ * heading. Announced only once the app's navigation has finished: a router
44
+ * that resets focus when it lands (SvelteKit's `goto`) would otherwise undo
45
+ * the shell's focus, most visibly when the report is already open.
46
+ */
47
+ export async function openSavedReportFrom(from, report) {
48
+ try {
49
+ await openSavedReport(report);
50
+ }
51
+ catch {
52
+ // An aborted navigation still leaves the card's link to the report.
53
+ }
54
+ if (from?.isConnected) {
55
+ announceShellNavigation(from, {
56
+ // This report's own heading: never the page the person approved from.
57
+ focus: `[data-smrt-component="ReportDetail"][data-report-id="${CSS.escape(report.id)}"] h1`,
58
+ });
59
+ }
60
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Runtime report sources in the planner (#4100): the browser counterpart of a
3
+ * generated app's `packages.reports.runtime.sources`.
4
+ *
5
+ * A generated app lists its report sources in `smrt.config.ts`; the planner
6
+ * has no config, so it offers the models the app's menu shows (the nav entries
7
+ * of the recipes that are on), each described from the catalog. The in-memory
8
+ * runner (`@happyvertical/smrt-reports/spec`) evaluates specs over their sample
9
+ * rows. Nothing here is an authority boundary: it is sample data.
10
+ */
11
+ import { type RuntimeReportMemorySource } from '@happyvertical/smrt-reports/spec';
12
+ import type { CatalogModel } from '../catalog/types.ts';
13
+ import { type Recipe } from '../recipes/index.ts';
14
+ /** The RuntimeReport model saved reports are rows of. */
15
+ export declare const RUNTIME_REPORT_MODEL = "@happyvertical/smrt-reports:RuntimeReport";
16
+ /** The recipe that brings Reports (Saved reports). */
17
+ export declare const REPORTS_RECIPE = "reports.runtime";
18
+ /** A source the planner offers, with what the assistant needs to fill gaps. */
19
+ export interface PlannerReportSource extends RuntimeReportMemorySource {
20
+ label: string;
21
+ /** The catalog model the rows come from. */
22
+ model: CatalogModel;
23
+ /** The natural date (smrt-reports' `defaultTimeField`), for ranking. */
24
+ dateField?: string;
25
+ /** The money field a "summary" or "total" sums by default. */
26
+ amountField?: string;
27
+ }
28
+ /** Describe one catalog model as an in-memory report source. */
29
+ export declare function reportSourceFor(model: CatalogModel, label: string, id?: string): PlannerReportSource;
30
+ /**
31
+ * The report sources of an app: one per model its menu lists (recipe nav
32
+ * entries of the recipes that are on), labelled as the menu labels it, in menu
33
+ * order. Saved reports themselves are never a source.
34
+ */
35
+ export declare function plannerReportSources(recipeIds: readonly string[], recipes: readonly Recipe[]): PlannerReportSource[];
36
+ //# sourceMappingURL=sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/lib/reports/sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,qBAAqB,CAAC;AAE7D,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,8CAA8C,CAAC;AAEhF,sDAAsD;AACtD,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,KAAK,EAAE,YAAY,CAAC;IACpB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiCD,gEAAgE;AAChE,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,SAAuB,GACxB,mBAAmB,CAyCrB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,mBAAmB,EAAE,CA0BvB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Runtime report sources in the planner (#4100): the browser counterpart of a
3
+ * generated app's `packages.reports.runtime.sources`.
4
+ *
5
+ * A generated app lists its report sources in `smrt.config.ts`; the planner
6
+ * has no config, so it offers the models the app's menu shows (the nav entries
7
+ * of the recipes that are on), each described from the catalog. The in-memory
8
+ * runner (`@happyvertical/smrt-reports/spec`) evaluates specs over their sample
9
+ * rows. Nothing here is an authority boundary: it is sample data.
10
+ */
11
+ import { describeRuntimeReportMemorySource, } from '@happyvertical/smrt-reports/spec';
12
+ import { isMoneyField } from "../data/fakes.js";
13
+ import { fieldLabel } from "../data/format.js";
14
+ import { recipeNav } from "../recipes/index.js";
15
+ /** The RuntimeReport model saved reports are rows of. */
16
+ export const RUNTIME_REPORT_MODEL = '@happyvertical/smrt-reports:RuntimeReport';
17
+ /** The recipe that brings Reports (Saved reports). */
18
+ export const REPORTS_RECIPE = 'reports.runtime';
19
+ function columnType(field) {
20
+ switch (field.type) {
21
+ case 'text':
22
+ return 'string';
23
+ case 'integer':
24
+ return 'integer';
25
+ case 'decimal':
26
+ return 'decimal';
27
+ case 'boolean':
28
+ return 'boolean';
29
+ case 'datetime':
30
+ return 'datetime';
31
+ case 'foreignKey':
32
+ case 'crossPackageRef':
33
+ return 'id';
34
+ default:
35
+ return null;
36
+ }
37
+ }
38
+ /** Snake-case plural of a class name: `TaxCode` -> `tax_codes`. */
39
+ function sourceId(name) {
40
+ const snake = name.replace(/([a-z\d])([A-Z])/g, '$1_$2').toLowerCase();
41
+ if (/(series|species)$/.test(snake))
42
+ return snake;
43
+ if (/[^aeiou]y$/.test(snake))
44
+ return `${snake.slice(0, -1)}ies`;
45
+ if (/(s|x|z|ch|sh)$/.test(snake))
46
+ return `${snake}es`;
47
+ return `${snake}s`;
48
+ }
49
+ const PREFERRED_AMOUNTS = ['totalAmount', 'total', 'amount'];
50
+ /** Describe one catalog model as an in-memory report source. */
51
+ export function reportSourceFor(model, label, id = sourceId(model.name)) {
52
+ const schema = [{ name: 'id', type: 'string' }];
53
+ for (const field of model.fields) {
54
+ const type = columnType(field);
55
+ // System fields (tenant, snapshots, sync state) are framework plumbing;
56
+ // a person never reports on them.
57
+ if (!type || field.system || schema.some((f) => f.name === field.name)) {
58
+ continue;
59
+ }
60
+ // The catalog's field metadata is what smrt-reports reads its time and
61
+ // grouping hints from: `ui.format` ('money', 'date') and `enum`.
62
+ const format = isMoneyField(field)
63
+ ? 'money'
64
+ : type === 'datetime' && field.ui?.format === 'date'
65
+ ? 'date'
66
+ : undefined;
67
+ schema.push({
68
+ name: field.name,
69
+ type,
70
+ label: fieldLabel(field),
71
+ ...(format ? { format } : {}),
72
+ ...(type === 'string' && field.enum?.length ? { enum: field.enum } : {}),
73
+ });
74
+ }
75
+ const money = schema.filter((field) => field.format === 'money');
76
+ // Only a document's own total is "how much" by default; a customer's credit
77
+ // limit or a product's price is not, so those sources default to a count.
78
+ const amount = PREFERRED_AMOUNTS.map((name) => money.find((f) => f.name === name)).find(Boolean);
79
+ const source = {
80
+ id,
81
+ label,
82
+ ...(model.description ? { description: model.description } : {}),
83
+ schema,
84
+ model,
85
+ ...(amount ? { amountField: amount.name } : {}),
86
+ };
87
+ // The natural date comes from smrt-reports' descriptor, not a guess here.
88
+ const date = describeRuntimeReportMemorySource([source], id).defaultTimeField;
89
+ return date ? { ...source, dateField: date } : source;
90
+ }
91
+ /**
92
+ * The report sources of an app: one per model its menu lists (recipe nav
93
+ * entries of the recipes that are on), labelled as the menu labels it, in menu
94
+ * order. Saved reports themselves are never a source.
95
+ */
96
+ export function plannerReportSources(recipeIds, recipes) {
97
+ const on = new Set(recipeIds);
98
+ const entries = new Map();
99
+ for (const recipe of recipes) {
100
+ if (!on.has(recipe.id))
101
+ continue;
102
+ for (const entry of recipeNav(recipe)) {
103
+ if (entry.model.id === RUNTIME_REPORT_MODEL)
104
+ continue;
105
+ entries.set(entry.model.id, [
106
+ ...(entries.get(entry.model.id) ?? []),
107
+ entry,
108
+ ]);
109
+ }
110
+ }
111
+ const seen = new Map();
112
+ const ids = new Set();
113
+ for (const [modelId, list] of entries) {
114
+ // A filtered entry ("Sales orders") shows part of the rows; the source is
115
+ // the whole model, so the unfiltered entry's label names it when there is one.
116
+ const entry = list.find((e) => !e.filter) ?? list[0];
117
+ let id = sourceId(entry.model.name);
118
+ // Two packages with one class name: keep both, told apart by package.
119
+ if (ids.has(id))
120
+ id = `${entry.packageId}.${id}`;
121
+ ids.add(id);
122
+ seen.set(modelId, reportSourceFor(entry.model, entry.label, id));
123
+ }
124
+ return [...seen.values()];
125
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Runtime reports over the planner's sample data (#4100): the browser
3
+ * equivalent of a generated app's report tools and its confirmed save.
4
+ *
5
+ * - `sources()` is `reports.runtime.sources`: the app's menu models.
6
+ * - `define(intent)` is `reports.runtime.define` (preview): build the spec,
7
+ * validate it with smrt-reports' own parser and run a preview with its
8
+ * in-memory runner. It returns the same `awaiting_confirmation` proposal a
9
+ * generated app returns; nothing is saved.
10
+ * - `save(proposal)` is the confirmed save (`saveRuntimeReport`): only a
11
+ * person's approval calls it. It re-parses the spec, checks the hash and
12
+ * runs it again against the current sources, then stores a RuntimeReport
13
+ * row in the plan's sample data.
14
+ * - `client` is the `RuntimeReportsClient` smrt-reports' `SavedReports` and
15
+ * `ReportDetail` read: list, get, run (afresh, every time), archive.
16
+ *
17
+ * Sample data carries no principal, tenant or permission, so none of this is
18
+ * an authority boundary; a generated app's server owns those.
19
+ */
20
+ import { type RuntimeReportResult, type RuntimeReportSpec } from '@happyvertical/smrt-reports/spec';
21
+ import type { ReportFieldInfo, ReportSourceInfo, RuntimeReportProposal, RuntimeReportsClient, SavedRuntimeReport } from '@happyvertical/smrt-reports/svelte';
22
+ import type { DataSource } from '../data/source.ts';
23
+ import type { Recipe } from '../recipes/types.ts';
24
+ import { type ReportFollowUp, type ReportIntent } from './intent.ts';
25
+ import { type PlannerReportSource } from './sources.ts';
26
+ /** Who saves reports in the planner: there is one visitor and no accounts. */
27
+ export declare const PLANNER_REPORT_AUTHOR = "planner";
28
+ /** Where a generated app's confirmation posts; recorded on the proposal as there. */
29
+ export declare const CONFIRM_PATH = "/api/_reports/runtime/confirm";
30
+ /** The in-app path of a saved report (the RuntimeReport record page). */
31
+ /** Saved reports, the RuntimeReport list. */
32
+ export declare const REPORT_LIST_PATH = "/m/reports/RuntimeReport/";
33
+ export declare function reportPath(id: string): string;
34
+ export interface PlannerReportsOptions {
35
+ data: DataSource;
36
+ /** The recipes that are on now; the sources follow them. */
37
+ recipeIds: () => readonly string[];
38
+ recipes: readonly Recipe[];
39
+ /** The clock periods are relative to: the sample data's, so they hold rows. */
40
+ now: () => Date;
41
+ }
42
+ export type DefineResult = {
43
+ ok: true;
44
+ proposal: RuntimeReportProposal;
45
+ source: PlannerReportSource;
46
+ } | {
47
+ ok: false;
48
+ question: string;
49
+ followUp?: ReportFollowUp;
50
+ };
51
+ export interface PlannerReports {
52
+ sources(): PlannerReportSource[];
53
+ /** `text` is what the person said; its time words fill gaps in the intent. */
54
+ define(intent: ReportIntent, text?: string): Promise<DefineResult>;
55
+ run(spec: RuntimeReportSpec): Promise<RuntimeReportResult>;
56
+ save(proposal: RuntimeReportProposal): Promise<SavedRuntimeReport>;
57
+ /** A source's described fields (labels, money format) for a confirmation card. */
58
+ fieldsFor(sourceId: string): ReportFieldInfo[];
59
+ /** Every offered source by label with its fields, for the report screens. */
60
+ sourceInfo(): ReportSourceInfo[];
61
+ client: RuntimeReportsClient;
62
+ }
63
+ export declare function createPlannerReports(options: PlannerReportsOptions): PlannerReports;
64
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lib/reports/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAIvB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,YAAY,EAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,cAAc,CAAC;AAEtB,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,qFAAqF;AACrF,eAAO,MAAM,YAAY,kCAAkC,CAAC;AAE5D,yEAAyE;AACzE,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAE5D,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACnC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,qBAAqB,CAAC;IAChC,MAAM,EAAE,mBAAmB,CAAC;CAC7B,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACjC,8EAA8E;IAC9E,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,GAAG,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE,kFAAkF;IAClF,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;IAC/C,6EAA6E;IAC7E,UAAU,IAAI,gBAAgB,EAAE,CAAC;IACjC,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AA4CD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,cAAc,CA6JhB"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Runtime reports over the planner's sample data (#4100): the browser
3
+ * equivalent of a generated app's report tools and its confirmed save.
4
+ *
5
+ * - `sources()` is `reports.runtime.sources`: the app's menu models.
6
+ * - `define(intent)` is `reports.runtime.define` (preview): build the spec,
7
+ * validate it with smrt-reports' own parser and run a preview with its
8
+ * in-memory runner. It returns the same `awaiting_confirmation` proposal a
9
+ * generated app returns; nothing is saved.
10
+ * - `save(proposal)` is the confirmed save (`saveRuntimeReport`): only a
11
+ * person's approval calls it. It re-parses the spec, checks the hash and
12
+ * runs it again against the current sources, then stores a RuntimeReport
13
+ * row in the plan's sample data.
14
+ * - `client` is the `RuntimeReportsClient` smrt-reports' `SavedReports` and
15
+ * `ReportDetail` read: list, get, run (afresh, every time), archive.
16
+ *
17
+ * Sample data carries no principal, tenant or permission, so none of this is
18
+ * an authority boundary; a generated app's server owns those.
19
+ */
20
+ import { describeRuntimeReportMemorySource, parseRuntimeReportSpec, RuntimeReportError, runRuntimeReportInMemory, runtimeReportSpecDigest, serializeRuntimeReportSpec, } from '@happyvertical/smrt-reports/spec';
21
+ import { getModelByQualifiedName } from "../catalog/index.js";
22
+ import { questionForError, specFromIntent, } from "./intent.js";
23
+ import { plannerReportSources, RUNTIME_REPORT_MODEL, } from "./sources.js";
24
+ /** Who saves reports in the planner: there is one visitor and no accounts. */
25
+ export const PLANNER_REPORT_AUTHOR = 'planner';
26
+ /** Where a generated app's confirmation posts; recorded on the proposal as there. */
27
+ export const CONFIRM_PATH = '/api/_reports/runtime/confirm';
28
+ /** The in-app path of a saved report (the RuntimeReport record page). */
29
+ /** Saved reports, the RuntimeReport list. */
30
+ export const REPORT_LIST_PATH = '/m/reports/RuntimeReport/';
31
+ export function reportPath(id) {
32
+ return `${REPORT_LIST_PATH}${encodeURIComponent(id)}/`;
33
+ }
34
+ /** A refusal shaped like the HTTP client's, so the components word it the same. */
35
+ class PlannerReportError extends Error {
36
+ status;
37
+ code;
38
+ constructor(status, code) {
39
+ super(`Report request failed (${code})`);
40
+ this.status = status;
41
+ this.code = code;
42
+ this.name = 'PlannerReportError';
43
+ }
44
+ }
45
+ function reportModel() {
46
+ const found = getModelByQualifiedName(RUNTIME_REPORT_MODEL);
47
+ if (!found)
48
+ throw new Error(`${RUNTIME_REPORT_MODEL} is not in the catalog`);
49
+ return found.model;
50
+ }
51
+ /** A stored row as the browser projection; null when its spec no longer parses. */
52
+ function savedFrom(row) {
53
+ if (typeof row.spec !== 'string')
54
+ return null;
55
+ let spec;
56
+ try {
57
+ spec = parseRuntimeReportSpec(row.spec);
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ return {
63
+ id: row.id,
64
+ title: spec.title,
65
+ ...(spec.description ? { description: spec.description } : {}),
66
+ sourceId: spec.source,
67
+ createdByUserId: typeof row.createdByUserId === 'string' ? row.createdByUserId : '',
68
+ status: row.status === 'archived' ? 'archived' : 'active',
69
+ spec,
70
+ ...(typeof row.createdAt === 'string' && row.createdAt
71
+ ? { savedAt: row.createdAt }
72
+ : {}),
73
+ canArchive: true,
74
+ };
75
+ }
76
+ export function createPlannerReports(options) {
77
+ const sources = () => plannerReportSources(options.recipeIds(), options.recipes);
78
+ /** `reports.runtime.run`: always against the sources and rows of now. */
79
+ async function run(spec) {
80
+ const offered = sources();
81
+ const source = offered.find((s) => s.id === spec.source);
82
+ const rows = source ? await options.data.list(source.model) : [];
83
+ // `ranAt` is when it really ran; periods use the sample clock in `define`.
84
+ return runRuntimeReportInMemory(spec, rows, { sources: offered });
85
+ }
86
+ async function define(intent, text = '') {
87
+ const built = specFromIntent(intent, sources(), options.now(), text);
88
+ if (!built.ok)
89
+ return built;
90
+ try {
91
+ const preview = await run(built.spec);
92
+ return {
93
+ ok: true,
94
+ source: built.source,
95
+ proposal: {
96
+ status: 'awaiting_confirmation',
97
+ specHash: preview.specHash,
98
+ spec: built.spec,
99
+ sourceLabel: built.source.label,
100
+ confirmPath: CONFIRM_PATH,
101
+ preview,
102
+ },
103
+ };
104
+ }
105
+ catch (error) {
106
+ if (error instanceof RuntimeReportError) {
107
+ return { ok: false, question: questionForError(error, built.source) };
108
+ }
109
+ throw error;
110
+ }
111
+ }
112
+ async function rows() {
113
+ const stored = await options.data.list(reportModel());
114
+ return stored.flatMap((row) => savedFrom(row) ?? []).reverse();
115
+ }
116
+ async function find(id) {
117
+ const row = await options.data.get(reportModel(), id);
118
+ const saved = row ? savedFrom(row) : null;
119
+ if (!saved)
120
+ throw new PlannerReportError(404, 'not_found');
121
+ return saved;
122
+ }
123
+ /** The confirmed save. Recomputes everything; the proposal carries no authority. */
124
+ async function save(proposal) {
125
+ let spec;
126
+ try {
127
+ spec = parseRuntimeReportSpec(proposal.spec);
128
+ }
129
+ catch {
130
+ throw new PlannerReportError(422, 'invalid_spec');
131
+ }
132
+ const specHash = await runtimeReportSpecDigest(spec);
133
+ if (specHash !== proposal.specHash) {
134
+ throw new PlannerReportError(422, 'spec_hash_mismatch');
135
+ }
136
+ // As a server recompiles for the confirming principal: the source and
137
+ // fields must still be offered now (a recipe may have been switched off).
138
+ try {
139
+ await run(spec);
140
+ }
141
+ catch (error) {
142
+ if (error instanceof RuntimeReportError) {
143
+ throw new PlannerReportError(422, error.code);
144
+ }
145
+ throw error;
146
+ }
147
+ const existing = (await rows()).find((report) => report.status === 'active' &&
148
+ report.createdByUserId === PLANNER_REPORT_AUTHOR &&
149
+ serializeRuntimeReportSpec(report.spec) ===
150
+ serializeRuntimeReportSpec(spec));
151
+ if (existing)
152
+ return existing; // A retry of the same approval saves once.
153
+ const row = await options.data.create(reportModel(), {
154
+ title: spec.title,
155
+ description: spec.description ?? '',
156
+ sourceId: spec.source,
157
+ spec: serializeRuntimeReportSpec(spec),
158
+ specHash,
159
+ status: 'active',
160
+ createdByUserId: PLANNER_REPORT_AUTHOR,
161
+ // When it was approved: real time, not the sample clock.
162
+ createdAt: new Date().toISOString(),
163
+ });
164
+ const saved = savedFrom(row);
165
+ if (!saved)
166
+ throw new PlannerReportError(500, 'invalid_result');
167
+ return saved;
168
+ }
169
+ const client = {
170
+ async list({ onlyMine, includeArchived }) {
171
+ return (await rows()).filter((report) => (includeArchived || report.status === 'active') &&
172
+ (!onlyMine || report.createdByUserId === PLANNER_REPORT_AUTHOR));
173
+ },
174
+ get: find,
175
+ async run(id) {
176
+ const report = await find(id);
177
+ if (report.status === 'archived') {
178
+ throw new PlannerReportError(409, 'report_archived');
179
+ }
180
+ return run(report.spec);
181
+ },
182
+ async archive(id, archived) {
183
+ await find(id);
184
+ await options.data.update(reportModel(), id, {
185
+ status: archived ? 'archived' : 'active',
186
+ });
187
+ },
188
+ confirm: save,
189
+ };
190
+ const fieldInfo = (fields) => fields.map(({ name, label, type, format }) => ({
191
+ name,
192
+ label,
193
+ type,
194
+ ...(format ? { format } : {}),
195
+ }));
196
+ function fieldsFor(sourceId) {
197
+ const offered = sources();
198
+ if (!offered.some((s) => s.id === sourceId))
199
+ return [];
200
+ return fieldInfo(describeRuntimeReportMemorySource(offered, sourceId).fields);
201
+ }
202
+ function sourceInfo() {
203
+ const offered = sources();
204
+ return offered.map((source) => {
205
+ const described = describeRuntimeReportMemorySource(offered, source.id);
206
+ return {
207
+ id: described.id,
208
+ label: described.label,
209
+ fields: fieldInfo(described.fields),
210
+ };
211
+ });
212
+ }
213
+ return { sources, define, run, save, client, fieldsFor, sourceInfo };
214
+ }
@@ -1,3 +1,3 @@
1
1
  /** The released smrt line the planner is built against (the `smrt` CLI version its commands name). */
2
- export declare const SMRT_VERSION = "0.57.6";
2
+ export declare const SMRT_VERSION = "0.57.8";
3
3
  //# sourceMappingURL=smrt-version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Generated by scripts/write-smrt-version.ts from the installed
2
2
  // @happyvertical/smrt-core; do not edit. `pnpm version:smrt` refreshes it.
3
3
  /** The released smrt line the planner is built against (the `smrt` CLI version its commands name). */
4
- export const SMRT_VERSION = '0.57.6';
4
+ export const SMRT_VERSION = '0.57.8';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-planner",
3
- "version": "0.57.6",
3
+ "version": "0.57.8",
4
4
  "type": "module",
5
5
  "description": "The smrt planner as a mountable Svelte component with a typed command set and plan snapshot.",
6
6
  "license": "MIT",
@@ -43,12 +43,13 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@happyvertical/ai": "^0.105.2",
46
- "@happyvertical/smrt-assets": "0.57.6",
47
- "@happyvertical/smrt-chat": "0.57.6",
48
- "@happyvertical/smrt-commerce": "0.57.6",
49
- "@happyvertical/smrt-core": "0.57.6",
50
- "@happyvertical/smrt-svelte": "0.57.6",
51
- "@happyvertical/smrt-ui": "0.57.6",
46
+ "@happyvertical/smrt-assets": "0.57.8",
47
+ "@happyvertical/smrt-chat": "0.57.8",
48
+ "@happyvertical/smrt-commerce": "0.57.8",
49
+ "@happyvertical/smrt-core": "0.57.8",
50
+ "@happyvertical/smrt-reports": "0.57.8",
51
+ "@happyvertical/smrt-svelte": "0.57.8",
52
+ "@happyvertical/smrt-ui": "0.57.8",
52
53
  "@happyvertical/speech": "^0.105.2",
53
54
  "@huggingface/transformers": "^4.3.0",
54
55
  "@mlc-ai/web-llm": "^0.2.85"
@@ -63,53 +64,52 @@
63
64
  }
64
65
  },
65
66
  "devDependencies": {
66
- "@happyvertical/smrt-ads": "0.57.6",
67
- "@happyvertical/smrt-affiliates": "0.57.6",
68
- "@happyvertical/smrt-agents": "0.57.6",
69
- "@happyvertical/smrt-analytics": "0.57.6",
70
- "@happyvertical/smrt-approvals": "0.57.6",
71
- "@happyvertical/smrt-comments": "0.57.6",
72
- "@happyvertical/smrt-content": "0.57.6",
73
- "@happyvertical/smrt-education": "0.57.6",
74
- "@happyvertical/smrt-events": "0.57.6",
75
- "@happyvertical/smrt-expenses": "0.57.6",
76
- "@happyvertical/smrt-facts": "0.57.6",
77
- "@happyvertical/smrt-features": "0.57.6",
78
- "@happyvertical/smrt-fields": "0.57.6",
79
- "@happyvertical/smrt-gnode": "0.57.6",
80
- "@happyvertical/smrt-human-resources": "0.57.6",
81
- "@happyvertical/smrt-images": "0.57.6",
82
- "@happyvertical/smrt-ingestion": "0.57.6",
83
- "@happyvertical/smrt-inventory": "0.57.6",
84
- "@happyvertical/smrt-jobs": "0.57.6",
85
- "@happyvertical/smrt-languages": "0.57.6",
86
- "@happyvertical/smrt-ledgers": "0.57.6",
87
- "@happyvertical/smrt-manufacturing": "0.57.6",
88
- "@happyvertical/smrt-marketing": "0.57.6",
89
- "@happyvertical/smrt-messages": "0.57.6",
90
- "@happyvertical/smrt-personas": "0.57.6",
91
- "@happyvertical/smrt-places": "0.57.6",
92
- "@happyvertical/smrt-playbooks": "0.57.6",
93
- "@happyvertical/smrt-preferences": "0.57.6",
94
- "@happyvertical/smrt-products": "0.57.6",
95
- "@happyvertical/smrt-profiles": "0.57.6",
96
- "@happyvertical/smrt-projects": "0.57.6",
97
- "@happyvertical/smrt-prompts": "0.57.6",
98
- "@happyvertical/smrt-properties": "0.57.6",
99
- "@happyvertical/smrt-reports": "0.57.6",
100
- "@happyvertical/smrt-sales": "0.57.6",
101
- "@happyvertical/smrt-secrets": "0.57.6",
102
- "@happyvertical/smrt-sites": "0.57.6",
103
- "@happyvertical/smrt-social": "0.57.6",
104
- "@happyvertical/smrt-subscriptions": "0.57.6",
105
- "@happyvertical/smrt-support": "0.57.6",
106
- "@happyvertical/smrt-tags": "0.57.6",
107
- "@happyvertical/smrt-tenancy": "0.57.6",
108
- "@happyvertical/smrt-timesheets": "0.57.6",
109
- "@happyvertical/smrt-users": "0.57.6",
110
- "@happyvertical/smrt-video": "0.57.6",
111
- "@happyvertical/smrt-voice": "0.57.6",
112
- "@happyvertical/smrt-webhooks": "0.57.6",
67
+ "@happyvertical/smrt-ads": "0.57.8",
68
+ "@happyvertical/smrt-affiliates": "0.57.8",
69
+ "@happyvertical/smrt-agents": "0.57.8",
70
+ "@happyvertical/smrt-analytics": "0.57.8",
71
+ "@happyvertical/smrt-approvals": "0.57.8",
72
+ "@happyvertical/smrt-comments": "0.57.8",
73
+ "@happyvertical/smrt-content": "0.57.8",
74
+ "@happyvertical/smrt-education": "0.57.8",
75
+ "@happyvertical/smrt-events": "0.57.8",
76
+ "@happyvertical/smrt-expenses": "0.57.8",
77
+ "@happyvertical/smrt-facts": "0.57.8",
78
+ "@happyvertical/smrt-features": "0.57.8",
79
+ "@happyvertical/smrt-fields": "0.57.8",
80
+ "@happyvertical/smrt-gnode": "0.57.8",
81
+ "@happyvertical/smrt-human-resources": "0.57.8",
82
+ "@happyvertical/smrt-images": "0.57.8",
83
+ "@happyvertical/smrt-ingestion": "0.57.8",
84
+ "@happyvertical/smrt-inventory": "0.57.8",
85
+ "@happyvertical/smrt-jobs": "0.57.8",
86
+ "@happyvertical/smrt-languages": "0.57.8",
87
+ "@happyvertical/smrt-ledgers": "0.57.8",
88
+ "@happyvertical/smrt-manufacturing": "0.57.8",
89
+ "@happyvertical/smrt-marketing": "0.57.8",
90
+ "@happyvertical/smrt-messages": "0.57.8",
91
+ "@happyvertical/smrt-personas": "0.57.8",
92
+ "@happyvertical/smrt-places": "0.57.8",
93
+ "@happyvertical/smrt-playbooks": "0.57.8",
94
+ "@happyvertical/smrt-preferences": "0.57.8",
95
+ "@happyvertical/smrt-products": "0.57.8",
96
+ "@happyvertical/smrt-profiles": "0.57.8",
97
+ "@happyvertical/smrt-projects": "0.57.8",
98
+ "@happyvertical/smrt-prompts": "0.57.8",
99
+ "@happyvertical/smrt-properties": "0.57.8",
100
+ "@happyvertical/smrt-sales": "0.57.8",
101
+ "@happyvertical/smrt-secrets": "0.57.8",
102
+ "@happyvertical/smrt-sites": "0.57.8",
103
+ "@happyvertical/smrt-social": "0.57.8",
104
+ "@happyvertical/smrt-subscriptions": "0.57.8",
105
+ "@happyvertical/smrt-support": "0.57.8",
106
+ "@happyvertical/smrt-tags": "0.57.8",
107
+ "@happyvertical/smrt-tenancy": "0.57.8",
108
+ "@happyvertical/smrt-timesheets": "0.57.8",
109
+ "@happyvertical/smrt-users": "0.57.8",
110
+ "@happyvertical/smrt-video": "0.57.8",
111
+ "@happyvertical/smrt-voice": "0.57.8",
112
+ "@happyvertical/smrt-webhooks": "0.57.8",
113
113
  "@sveltejs/adapter-static": "^3.0.10",
114
114
  "@sveltejs/kit": "2.70.3",
115
115
  "@sveltejs/package": "^3.0.0",