@agent-native/core 0.7.1 → 0.7.4

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 (358) hide show
  1. package/dist/action.d.ts +8 -0
  2. package/dist/action.d.ts.map +1 -1
  3. package/dist/action.js +18 -0
  4. package/dist/action.js.map +1 -1
  5. package/dist/agent/production-agent.d.ts +9 -0
  6. package/dist/agent/production-agent.d.ts.map +1 -1
  7. package/dist/agent/production-agent.js +148 -36
  8. package/dist/agent/production-agent.js.map +1 -1
  9. package/dist/agent/run-manager.d.ts.map +1 -1
  10. package/dist/agent/run-manager.js +20 -1
  11. package/dist/agent/run-manager.js.map +1 -1
  12. package/dist/agent/run-store.d.ts +14 -0
  13. package/dist/agent/run-store.d.ts.map +1 -1
  14. package/dist/agent/run-store.js +63 -6
  15. package/dist/agent/run-store.js.map +1 -1
  16. package/dist/agent/types.d.ts +2 -0
  17. package/dist/agent/types.d.ts.map +1 -1
  18. package/dist/cli/create.js +1 -1
  19. package/dist/cli/create.js.map +1 -1
  20. package/dist/cli/setup-agents.d.ts.map +1 -1
  21. package/dist/cli/setup-agents.js +0 -2
  22. package/dist/cli/setup-agents.js.map +1 -1
  23. package/dist/cli/templates-meta.d.ts +52 -0
  24. package/dist/cli/templates-meta.d.ts.map +1 -0
  25. package/dist/cli/templates-meta.js +165 -0
  26. package/dist/cli/templates-meta.js.map +1 -0
  27. package/dist/client/AgentPanel.d.ts +5 -1
  28. package/dist/client/AgentPanel.d.ts.map +1 -1
  29. package/dist/client/AgentPanel.js +279 -30
  30. package/dist/client/AgentPanel.js.map +1 -1
  31. package/dist/client/AssistantChat.d.ts +2 -1
  32. package/dist/client/AssistantChat.d.ts.map +1 -1
  33. package/dist/client/AssistantChat.js +172 -40
  34. package/dist/client/AssistantChat.js.map +1 -1
  35. package/dist/client/ConnectBuilderCard.d.ts +21 -0
  36. package/dist/client/ConnectBuilderCard.d.ts.map +1 -0
  37. package/dist/client/ConnectBuilderCard.js +196 -0
  38. package/dist/client/ConnectBuilderCard.js.map +1 -0
  39. package/dist/client/FeedbackButton.d.ts +17 -0
  40. package/dist/client/FeedbackButton.d.ts.map +1 -0
  41. package/dist/client/FeedbackButton.js +147 -0
  42. package/dist/client/FeedbackButton.js.map +1 -0
  43. package/dist/client/IframeEmbed.d.ts +17 -0
  44. package/dist/client/IframeEmbed.d.ts.map +1 -0
  45. package/dist/client/IframeEmbed.js +108 -0
  46. package/dist/client/IframeEmbed.js.map +1 -0
  47. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  48. package/dist/client/MultiTabAssistantChat.js +34 -7
  49. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  50. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  51. package/dist/client/agent-chat-adapter.js +34 -15
  52. package/dist/client/agent-chat-adapter.js.map +1 -1
  53. package/dist/client/agent-chat.d.ts +6 -0
  54. package/dist/client/agent-chat.d.ts.map +1 -1
  55. package/dist/client/agent-chat.js +7 -0
  56. package/dist/client/agent-chat.js.map +1 -1
  57. package/dist/client/composer/MentionPopover.d.ts.map +1 -1
  58. package/dist/client/composer/MentionPopover.js +27 -24
  59. package/dist/client/composer/MentionPopover.js.map +1 -1
  60. package/dist/client/composer/TiptapComposer.d.ts +3 -1
  61. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  62. package/dist/client/composer/TiptapComposer.js +21 -4
  63. package/dist/client/composer/TiptapComposer.js.map +1 -1
  64. package/dist/client/embed.d.ts +28 -0
  65. package/dist/client/embed.d.ts.map +1 -0
  66. package/dist/client/embed.js +50 -0
  67. package/dist/client/embed.js.map +1 -0
  68. package/dist/client/index.d.ts +5 -1
  69. package/dist/client/index.d.ts.map +1 -1
  70. package/dist/client/index.js +5 -1
  71. package/dist/client/index.js.map +1 -1
  72. package/dist/client/integrations/IntegrationsPanel.js +2 -2
  73. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  74. package/dist/client/onboarding/OnboardingBanner.js +2 -2
  75. package/dist/client/onboarding/OnboardingBanner.js.map +1 -1
  76. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  77. package/dist/client/onboarding/OnboardingPanel.js +139 -52
  78. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  79. package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
  80. package/dist/client/onboarding/SetupButton.js +13 -3
  81. package/dist/client/onboarding/SetupButton.js.map +1 -1
  82. package/dist/client/org/TeamPage.d.ts.map +1 -1
  83. package/dist/client/org/TeamPage.js +12 -7
  84. package/dist/client/org/TeamPage.js.map +1 -1
  85. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  86. package/dist/client/resources/ResourceEditor.js +57 -2
  87. package/dist/client/resources/ResourceEditor.js.map +1 -1
  88. package/dist/client/resources/ResourceTree.d.ts +5 -1
  89. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  90. package/dist/client/resources/ResourceTree.js +17 -10
  91. package/dist/client/resources/ResourceTree.js.map +1 -1
  92. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  93. package/dist/client/resources/ResourcesPanel.js +12 -10
  94. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  95. package/dist/client/settings/AgentsSection.d.ts.map +1 -1
  96. package/dist/client/settings/AgentsSection.js +6 -3
  97. package/dist/client/settings/AgentsSection.js.map +1 -1
  98. package/dist/client/settings/ComingSoonSection.js +1 -1
  99. package/dist/client/settings/ComingSoonSection.js.map +1 -1
  100. package/dist/client/settings/LLMSection.d.ts.map +1 -1
  101. package/dist/client/settings/LLMSection.js +1 -1
  102. package/dist/client/settings/LLMSection.js.map +1 -1
  103. package/dist/client/settings/SecretsSection.d.ts +12 -0
  104. package/dist/client/settings/SecretsSection.d.ts.map +1 -0
  105. package/dist/client/settings/SecretsSection.js +148 -0
  106. package/dist/client/settings/SecretsSection.js.map +1 -0
  107. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  108. package/dist/client/settings/SettingsPanel.js +114 -23
  109. package/dist/client/settings/SettingsPanel.js.map +1 -1
  110. package/dist/client/settings/SettingsSection.js +2 -2
  111. package/dist/client/settings/SettingsSection.js.map +1 -1
  112. package/dist/client/settings/UsageSection.d.ts +2 -0
  113. package/dist/client/settings/UsageSection.d.ts.map +1 -0
  114. package/dist/client/settings/UsageSection.js +70 -0
  115. package/dist/client/settings/UsageSection.js.map +1 -0
  116. package/dist/client/settings/index.d.ts +1 -0
  117. package/dist/client/settings/index.d.ts.map +1 -1
  118. package/dist/client/settings/index.js +1 -0
  119. package/dist/client/settings/index.js.map +1 -1
  120. package/dist/client/sharing/ShareButton.d.ts +14 -0
  121. package/dist/client/sharing/ShareButton.d.ts.map +1 -0
  122. package/dist/client/sharing/ShareButton.js +43 -0
  123. package/dist/client/sharing/ShareButton.js.map +1 -0
  124. package/dist/client/sharing/ShareDialog.d.ts +15 -0
  125. package/dist/client/sharing/ShareDialog.d.ts.map +1 -0
  126. package/dist/client/sharing/ShareDialog.js +209 -0
  127. package/dist/client/sharing/ShareDialog.js.map +1 -0
  128. package/dist/client/sharing/VisibilityBadge.d.ts +11 -0
  129. package/dist/client/sharing/VisibilityBadge.d.ts.map +1 -0
  130. package/dist/client/sharing/VisibilityBadge.js +20 -0
  131. package/dist/client/sharing/VisibilityBadge.js.map +1 -0
  132. package/dist/client/sharing/index.d.ts +4 -0
  133. package/dist/client/sharing/index.d.ts.map +1 -0
  134. package/dist/client/sharing/index.js +4 -0
  135. package/dist/client/sharing/index.js.map +1 -0
  136. package/dist/client/use-action.d.ts.map +1 -1
  137. package/dist/client/use-action.js +74 -6
  138. package/dist/client/use-action.js.map +1 -1
  139. package/dist/client/use-db-sync.d.ts +25 -2
  140. package/dist/client/use-db-sync.d.ts.map +1 -1
  141. package/dist/client/use-db-sync.js +62 -1
  142. package/dist/client/use-db-sync.js.map +1 -1
  143. package/dist/client/use-dev-mode.d.ts.map +1 -1
  144. package/dist/client/use-dev-mode.js +16 -1
  145. package/dist/client/use-dev-mode.js.map +1 -1
  146. package/dist/db/client.d.ts +12 -0
  147. package/dist/db/client.d.ts.map +1 -1
  148. package/dist/db/client.js +89 -2
  149. package/dist/db/client.js.map +1 -1
  150. package/dist/db/create-get-db.d.ts +11 -0
  151. package/dist/db/create-get-db.d.ts.map +1 -1
  152. package/dist/db/create-get-db.js +47 -3
  153. package/dist/db/create-get-db.js.map +1 -1
  154. package/dist/db/migrations.d.ts.map +1 -1
  155. package/dist/db/migrations.js +62 -5
  156. package/dist/db/migrations.js.map +1 -1
  157. package/dist/db/schema.d.ts +1 -0
  158. package/dist/db/schema.d.ts.map +1 -1
  159. package/dist/db/schema.js +4 -0
  160. package/dist/db/schema.js.map +1 -1
  161. package/dist/deploy/build.js +22 -3
  162. package/dist/deploy/build.js.map +1 -1
  163. package/dist/index.d.ts +2 -0
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js +6 -0
  166. package/dist/index.js.map +1 -1
  167. package/dist/jobs/scheduler.d.ts.map +1 -1
  168. package/dist/jobs/scheduler.js +7 -2
  169. package/dist/jobs/scheduler.js.map +1 -1
  170. package/dist/oauth-tokens/google-refresh.d.ts +31 -0
  171. package/dist/oauth-tokens/google-refresh.d.ts.map +1 -0
  172. package/dist/oauth-tokens/google-refresh.js +115 -0
  173. package/dist/oauth-tokens/google-refresh.js.map +1 -0
  174. package/dist/oauth-tokens/index.d.ts +1 -0
  175. package/dist/oauth-tokens/index.d.ts.map +1 -1
  176. package/dist/oauth-tokens/index.js +1 -0
  177. package/dist/oauth-tokens/index.js.map +1 -1
  178. package/dist/onboarding/default-steps.d.ts.map +1 -1
  179. package/dist/onboarding/default-steps.js +62 -18
  180. package/dist/onboarding/default-steps.js.map +1 -1
  181. package/dist/org/accept-pending.d.ts +22 -0
  182. package/dist/org/accept-pending.d.ts.map +1 -0
  183. package/dist/org/accept-pending.js +75 -0
  184. package/dist/org/accept-pending.js.map +1 -0
  185. package/dist/org/context.js +1 -1
  186. package/dist/org/handlers.d.ts +2 -0
  187. package/dist/org/handlers.d.ts.map +1 -1
  188. package/dist/org/handlers.js +87 -11
  189. package/dist/org/handlers.js.map +1 -1
  190. package/dist/org/index.d.ts +2 -0
  191. package/dist/org/index.d.ts.map +1 -1
  192. package/dist/org/index.js +1 -0
  193. package/dist/org/index.js.map +1 -1
  194. package/dist/org/plugin.d.ts.map +1 -1
  195. package/dist/org/plugin.js +37 -22
  196. package/dist/org/plugin.js.map +1 -1
  197. package/dist/resources/handlers.js +1 -1
  198. package/dist/resources/handlers.js.map +1 -1
  199. package/dist/resources/metadata.d.ts.map +1 -1
  200. package/dist/resources/metadata.js +2 -2
  201. package/dist/resources/metadata.js.map +1 -1
  202. package/dist/resources/store.d.ts.map +1 -1
  203. package/dist/resources/store.js +27 -1
  204. package/dist/resources/store.js.map +1 -1
  205. package/dist/scripts/db/patch.d.ts.map +1 -1
  206. package/dist/scripts/db/patch.js +273 -11
  207. package/dist/scripts/db/patch.js.map +1 -1
  208. package/dist/secrets/index.d.ts +15 -0
  209. package/dist/secrets/index.d.ts.map +1 -0
  210. package/dist/secrets/index.js +15 -0
  211. package/dist/secrets/index.js.map +1 -0
  212. package/dist/secrets/onboarding.d.ts +18 -0
  213. package/dist/secrets/onboarding.d.ts.map +1 -0
  214. package/dist/secrets/onboarding.js +87 -0
  215. package/dist/secrets/onboarding.js.map +1 -0
  216. package/dist/secrets/register.d.ts +63 -0
  217. package/dist/secrets/register.d.ts.map +1 -0
  218. package/dist/secrets/register.js +55 -0
  219. package/dist/secrets/register.js.map +1 -0
  220. package/dist/secrets/routes.d.ts +67 -0
  221. package/dist/secrets/routes.d.ts.map +1 -0
  222. package/dist/secrets/routes.js +275 -0
  223. package/dist/secrets/routes.js.map +1 -0
  224. package/dist/secrets/schema.d.ts +154 -0
  225. package/dist/secrets/schema.d.ts.map +1 -0
  226. package/dist/secrets/schema.js +41 -0
  227. package/dist/secrets/schema.js.map +1 -0
  228. package/dist/secrets/storage.d.ts +54 -0
  229. package/dist/secrets/storage.d.ts.map +1 -0
  230. package/dist/secrets/storage.js +181 -0
  231. package/dist/secrets/storage.js.map +1 -0
  232. package/dist/server/action-discovery.d.ts +18 -0
  233. package/dist/server/action-discovery.d.ts.map +1 -1
  234. package/dist/server/action-discovery.js +97 -0
  235. package/dist/server/action-discovery.js.map +1 -1
  236. package/dist/server/action-routes.d.ts.map +1 -1
  237. package/dist/server/action-routes.js +26 -0
  238. package/dist/server/action-routes.js.map +1 -1
  239. package/dist/server/agent-chat-plugin.d.ts +12 -0
  240. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  241. package/dist/server/agent-chat-plugin.js +507 -48
  242. package/dist/server/agent-chat-plugin.js.map +1 -1
  243. package/dist/server/agent-discovery.js +2 -2
  244. package/dist/server/agent-discovery.js.map +1 -1
  245. package/dist/server/agent-teams.d.ts.map +1 -1
  246. package/dist/server/agent-teams.js +21 -58
  247. package/dist/server/agent-teams.js.map +1 -1
  248. package/dist/server/app-name.d.ts +13 -0
  249. package/dist/server/app-name.d.ts.map +1 -0
  250. package/dist/server/app-name.js +41 -0
  251. package/dist/server/app-name.js.map +1 -0
  252. package/dist/server/app-url.d.ts +24 -0
  253. package/dist/server/app-url.d.ts.map +1 -0
  254. package/dist/server/app-url.js +68 -0
  255. package/dist/server/app-url.js.map +1 -0
  256. package/dist/server/auth.d.ts +6 -0
  257. package/dist/server/auth.d.ts.map +1 -1
  258. package/dist/server/auth.js +284 -41
  259. package/dist/server/auth.js.map +1 -1
  260. package/dist/server/better-auth-instance.d.ts +1 -1
  261. package/dist/server/better-auth-instance.d.ts.map +1 -1
  262. package/dist/server/better-auth-instance.js +102 -7
  263. package/dist/server/better-auth-instance.js.map +1 -1
  264. package/dist/server/builder-browser.d.ts +21 -0
  265. package/dist/server/builder-browser.d.ts.map +1 -1
  266. package/dist/server/builder-browser.js +67 -4
  267. package/dist/server/builder-browser.js.map +1 -1
  268. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  269. package/dist/server/core-routes-plugin.js +151 -4
  270. package/dist/server/core-routes-plugin.js.map +1 -1
  271. package/dist/server/desktop-sso.d.ts +30 -0
  272. package/dist/server/desktop-sso.d.ts.map +1 -0
  273. package/dist/server/desktop-sso.js +74 -0
  274. package/dist/server/desktop-sso.js.map +1 -0
  275. package/dist/server/email-template.d.ts +51 -0
  276. package/dist/server/email-template.d.ts.map +1 -0
  277. package/dist/server/email-template.js +146 -0
  278. package/dist/server/email-template.js.map +1 -0
  279. package/dist/server/email.d.ts +23 -0
  280. package/dist/server/email.d.ts.map +1 -0
  281. package/dist/server/email.js +105 -0
  282. package/dist/server/email.js.map +1 -0
  283. package/dist/server/framework-request-handler.d.ts.map +1 -1
  284. package/dist/server/framework-request-handler.js +29 -0
  285. package/dist/server/framework-request-handler.js.map +1 -1
  286. package/dist/server/google-oauth.d.ts.map +1 -1
  287. package/dist/server/google-oauth.js +19 -3
  288. package/dist/server/google-oauth.js.map +1 -1
  289. package/dist/server/index.d.ts +5 -1
  290. package/dist/server/index.d.ts.map +1 -1
  291. package/dist/server/index.js +5 -1
  292. package/dist/server/index.js.map +1 -1
  293. package/dist/server/local-migration.d.ts +9 -0
  294. package/dist/server/local-migration.d.ts.map +1 -1
  295. package/dist/server/local-migration.js +44 -14
  296. package/dist/server/local-migration.js.map +1 -1
  297. package/dist/server/oauth-helpers.d.ts +2 -0
  298. package/dist/server/oauth-helpers.d.ts.map +1 -1
  299. package/dist/server/oauth-helpers.js +2 -0
  300. package/dist/server/oauth-helpers.js.map +1 -1
  301. package/dist/server/onboarding-html.d.ts +6 -0
  302. package/dist/server/onboarding-html.d.ts.map +1 -1
  303. package/dist/server/onboarding-html.js +229 -25
  304. package/dist/server/onboarding-html.js.map +1 -1
  305. package/dist/server/poll.d.ts.map +1 -1
  306. package/dist/server/poll.js +48 -0
  307. package/dist/server/poll.js.map +1 -1
  308. package/dist/sharing/access.d.ts +56 -0
  309. package/dist/sharing/access.d.ts.map +1 -0
  310. package/dist/sharing/access.js +149 -0
  311. package/dist/sharing/access.js.map +1 -0
  312. package/dist/sharing/actions/list-resource-shares.d.ts +3 -0
  313. package/dist/sharing/actions/list-resource-shares.d.ts.map +1 -0
  314. package/dist/sharing/actions/list-resource-shares.js +38 -0
  315. package/dist/sharing/actions/list-resource-shares.js.map +1 -0
  316. package/dist/sharing/actions/set-resource-visibility.d.ts +3 -0
  317. package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -0
  318. package/dist/sharing/actions/set-resource-visibility.js +24 -0
  319. package/dist/sharing/actions/set-resource-visibility.js.map +1 -0
  320. package/dist/sharing/actions/share-resource.d.ts +3 -0
  321. package/dist/sharing/actions/share-resource.d.ts.map +1 -0
  322. package/dist/sharing/actions/share-resource.js +64 -0
  323. package/dist/sharing/actions/share-resource.js.map +1 -0
  324. package/dist/sharing/actions/unshare-resource.d.ts +3 -0
  325. package/dist/sharing/actions/unshare-resource.d.ts.map +1 -0
  326. package/dist/sharing/actions/unshare-resource.js +24 -0
  327. package/dist/sharing/actions/unshare-resource.js.map +1 -0
  328. package/dist/sharing/index.d.ts +11 -0
  329. package/dist/sharing/index.d.ts.map +1 -0
  330. package/dist/sharing/index.js +11 -0
  331. package/dist/sharing/index.js.map +1 -0
  332. package/dist/sharing/registry.d.ts +44 -0
  333. package/dist/sharing/registry.d.ts.map +1 -0
  334. package/dist/sharing/registry.js +54 -0
  335. package/dist/sharing/registry.js.map +1 -0
  336. package/dist/sharing/schema.d.ts +202 -0
  337. package/dist/sharing/schema.d.ts.map +1 -0
  338. package/dist/sharing/schema.js +88 -0
  339. package/dist/sharing/schema.js.map +1 -0
  340. package/dist/templates/default/.agents/skills/inline-embeds/SKILL.md +88 -0
  341. package/dist/usage/store.d.ts +74 -12
  342. package/dist/usage/store.d.ts.map +1 -1
  343. package/dist/usage/store.js +210 -44
  344. package/dist/usage/store.js.map +1 -1
  345. package/dist/vite/action-types-plugin.d.ts +5 -0
  346. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  347. package/dist/vite/action-types-plugin.js +129 -28
  348. package/dist/vite/action-types-plugin.js.map +1 -1
  349. package/dist/vite/client.d.ts.map +1 -1
  350. package/dist/vite/client.js +55 -0
  351. package/dist/vite/client.js.map +1 -1
  352. package/docs/content/deployment.md +59 -2
  353. package/docs/content/resources.md +9 -9
  354. package/docs/content/workspace-management.md +2 -2
  355. package/package.json +13 -5
  356. package/src/templates/default/.agents/skills/inline-embeds/SKILL.md +88 -0
  357. /package/dist/templates/workspace-core/{skills → .agents/skills}/company-policies/SKILL.md +0 -0
  358. /package/src/templates/workspace-core/{skills → .agents/skills}/company-policies/SKILL.md +0 -0
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: inline-embeds
3
+ description: >-
4
+ How to render interactive previews of app screens inline in agent chat via
5
+ sandboxed iframes. Covers the `embed` fence syntax, the `postNavigate` pop-out
6
+ helper, and when to prefer an embed over prose / a static image.
7
+ ---
8
+
9
+ # Inline Embeds
10
+
11
+ The chat renderer lets you embed a sandboxed iframe pointing at any same-origin
12
+ route of this app, rendered inline with your reply. Use this when a live,
13
+ interactive preview communicates more than prose or a static screenshot — a
14
+ chart, an email thread, a slide, a form, a ticket.
15
+
16
+ ## The `embed` fence
17
+
18
+ Emit a fenced code block with the language `embed`:
19
+
20
+ ````
21
+ ```embed
22
+ src: /email?id=msg_123
23
+ aspect: 4/3
24
+ title: Re: Q4 planning
25
+ ```
26
+ ````
27
+
28
+ Keys:
29
+
30
+ | Key | Required | Notes |
31
+ | -------- | -------- | ------------------------------------------------------------------ |
32
+ | `src` | yes | Same-origin path beginning with `/`. Cross-origin URLs are blocked |
33
+ | `aspect` | no | `16/9` (default), `4/3`, `3/2`, `2/1`, `21/9`, `1/1` |
34
+ | `title` | no | Accessible label + hover tooltip |
35
+ | `height` | no | Fixed pixel height when aspect ratio doesn't fit |
36
+
37
+ The rendered iframe is sandboxed (`allow-scripts allow-same-origin allow-forms
38
+ allow-popups`) and `referrerpolicy="same-origin"`. The browser enforces that
39
+ the iframe can't navigate the parent window.
40
+
41
+ ## When to reach for an embed
42
+
43
+ - A chart or visualization that benefits from tooltips / hover.
44
+ - A detail view the user might want to scan (email, ticket, event, slide).
45
+ - Anything where "here's a link to it" would force an extra click.
46
+
47
+ **Don't** embed when plain prose, a bulleted list, or a small table is enough.
48
+ **Don't** embed external sites — the renderer blocks cross-origin URLs.
49
+
50
+ ## "Open in main window" button — `postNavigate`
51
+
52
+ Every embed route should include a small "Open" button so the user can pop the
53
+ view out of the chat and into the full app. Import the helper from
54
+ `@agent-native/core/client`:
55
+
56
+ ```tsx
57
+ import { postNavigate, isInAgentEmbed } from "@agent-native/core/client";
58
+
59
+ export function OpenButton({ path }: { path: string }) {
60
+ if (!isInAgentEmbed()) return null;
61
+ return (
62
+ <button onClick={() => postNavigate(path)}>Open</button>
63
+ );
64
+ }
65
+ ```
66
+
67
+ `postNavigate` sends a `postMessage` to the parent chat window. The chat
68
+ renderer validates the message is same-origin, same-iframe, and the path is
69
+ relative, then updates the parent URL via `history.pushState` so react-router
70
+ navigates without a page reload.
71
+
72
+ When the page is loaded directly (not in an iframe), `postNavigate` falls back
73
+ to a same-window navigation, so the button works both ways.
74
+
75
+ ## Adding an embed route to a template
76
+
77
+ 1. Create a chromeless route (e.g. `app/routes/email.tsx`) that renders the
78
+ detail view without the app shell.
79
+ 2. Mark the route path as bare in `app/components/layout/Layout.tsx` so the
80
+ sidebar / header don't render inside the iframe.
81
+ 3. Render the existing detail component with a transparent background so it
82
+ blends into the chat theme.
83
+ 4. Include an `<OpenButton>` that calls `postNavigate("/path/to/detail")`.
84
+ 5. Document the embed URL in this template's `AGENTS.md` so the agent knows
85
+ what's embeddable.
86
+
87
+ The framework-level fence renderer and security enforcement apply
88
+ automatically — no per-template wiring beyond the route and layout bypass.
@@ -1,22 +1,33 @@
1
- /** Default usage limit per user in cents ($1.00) */
1
+ /** Default usage limit per user in cents ($1.00) for hosted prod mode */
2
2
  export declare const DEFAULT_USAGE_LIMIT_CENTS = 100;
3
+ export interface UsageRecord {
4
+ ownerEmail: string;
5
+ inputTokens: number;
6
+ outputTokens: number;
7
+ cacheReadTokens?: number;
8
+ cacheWriteTokens?: number;
9
+ model: string;
10
+ /** Category for this call — e.g. "chat", "automation", "job", "custom-agent". */
11
+ label?: string;
12
+ /** Optional template/app name (e.g. "mail"). Falls back to AGENT_APP env. */
13
+ app?: string;
14
+ }
3
15
  /**
4
- * Calculate cost in cents * 100 (for integer precision) given token counts and model.
5
- * Returns cost in "centicents" (1/100th of a cent) so we can store as integer.
16
+ * Calculate cost in centicents (1/100th of a cent).
17
+ * Accepts cache tokens so callers that use prompt caching are priced
18
+ * correctly. Non-cache-aware callers can pass 0 for the cache fields.
6
19
  */
7
- export declare function calculateCost(inputTokens: number, outputTokens: number, model: string): number;
20
+ export declare function calculateCost(inputTokens: number, outputTokens: number, model: string, cacheReadTokens?: number, cacheWriteTokens?: number): number;
8
21
  /**
9
- * Record token usage for a user after an agent run.
22
+ * Record token usage from an LLM call.
23
+ *
24
+ * Accepts an object with the full set of fields. A positional overload
25
+ * remains for backward compatibility with the older 4-arg signature.
10
26
  */
27
+ export declare function recordUsage(record: UsageRecord): Promise<void>;
11
28
  export declare function recordUsage(ownerEmail: string, inputTokens: number, outputTokens: number, model: string): Promise<void>;
12
- /**
13
- * Get total usage cost for a user in cents.
14
- */
29
+ /** Total cost (in cents) charged against a user, across all time. */
15
30
  export declare function getUserUsageCents(ownerEmail: string): Promise<number>;
16
- /**
17
- * Check if a user has exceeded their usage limit.
18
- * Returns { allowed: true } or { allowed: false, usageCents, limitCents }.
19
- */
20
31
  export declare function checkUsageLimit(ownerEmail: string, limitCents?: number): Promise<{
21
32
  allowed: true;
22
33
  usageCents: number;
@@ -26,4 +37,55 @@ export declare function checkUsageLimit(ownerEmail: string, limitCents?: number)
26
37
  usageCents: number;
27
38
  limitCents: number;
28
39
  }>;
40
+ export interface UsageSummaryOptions {
41
+ ownerEmail: string;
42
+ /** Inclusive lower bound (ms since epoch). Defaults to 30 days ago. */
43
+ sinceMs?: number;
44
+ }
45
+ export interface UsageBucket {
46
+ key: string;
47
+ inputTokens: number;
48
+ outputTokens: number;
49
+ cacheReadTokens: number;
50
+ cacheWriteTokens: number;
51
+ cents: number;
52
+ calls: number;
53
+ }
54
+ export interface DailyBucket {
55
+ /** YYYY-MM-DD (UTC) */
56
+ date: string;
57
+ cents: number;
58
+ calls: number;
59
+ }
60
+ export interface UsageRecentEntry {
61
+ id: number;
62
+ createdAt: number;
63
+ label: string;
64
+ app: string;
65
+ model: string;
66
+ inputTokens: number;
67
+ outputTokens: number;
68
+ cacheReadTokens: number;
69
+ cacheWriteTokens: number;
70
+ cents: number;
71
+ }
72
+ export interface UsageSummary {
73
+ totalCents: number;
74
+ totalCalls: number;
75
+ totalInputTokens: number;
76
+ totalOutputTokens: number;
77
+ totalCacheReadTokens: number;
78
+ totalCacheWriteTokens: number;
79
+ sinceMs: number;
80
+ byLabel: UsageBucket[];
81
+ byModel: UsageBucket[];
82
+ byApp: UsageBucket[];
83
+ byDay: DailyBucket[];
84
+ recent: UsageRecentEntry[];
85
+ }
86
+ /**
87
+ * Produce an aggregated spend view for the Usage admin panel.
88
+ * Scoped to the passed owner email; the UI always passes the session user.
89
+ */
90
+ export declare function getUsageSummary(options: UsageSummaryOptions): Promise<UsageSummary>;
29
91
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"AAOA,oDAAoD;AACpD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAkC7C;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CAeR;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU3E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAC7D,CAQA"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,37 @@
1
1
  /**
2
- * Token usage tracking and cost limits.
3
- * Tracks per-user API token consumption and enforces spending limits
4
- * for hosted production deployments.
2
+ * Token usage tracking and cost monitoring.
3
+ *
4
+ * Every LLM call made by the framework records a row here so users can
5
+ * see where their spend is going — chat vs automations vs background jobs
6
+ * vs whatever else a template labels its prompts as.
7
+ *
8
+ * Cost is stored as "centicents" (1/100th of a cent) for integer precision.
5
9
  */
6
- import { getDbExec, intType } from "../db/client.js";
7
- /** Default usage limit per user in cents ($1.00) */
10
+ import { getDbExec, intType, isPostgres } from "../db/client.js";
11
+ /** Default usage limit per user in cents ($1.00) for hosted prod mode */
8
12
  export const DEFAULT_USAGE_LIMIT_CENTS = 100;
9
- /** Cost per million tokens in cents — Haiku 4.5 pricing */
10
- const HAIKU_INPUT_COST_PER_MTOK = 80; // $0.80
11
- const HAIKU_OUTPUT_COST_PER_MTOK = 400; // $4.00
12
- /** Cost per million tokens in cents Sonnet pricing */
13
- const SONNET_INPUT_COST_PER_MTOK = 300; // $3.00
14
- const SONNET_OUTPUT_COST_PER_MTOK = 1500; // $15.00
13
+ const PRICING = [
14
+ {
15
+ match: /opus/i,
16
+ pricing: { input: 1500, output: 7500, cacheRead: 150, cacheWrite: 1875 },
17
+ },
18
+ {
19
+ match: /haiku/i,
20
+ pricing: { input: 100, output: 500, cacheRead: 10, cacheWrite: 125 },
21
+ },
22
+ // default → sonnet pricing
23
+ {
24
+ match: /.*/,
25
+ pricing: { input: 300, output: 1500, cacheRead: 30, cacheWrite: 375 },
26
+ },
27
+ ];
28
+ function pricingFor(model) {
29
+ for (const entry of PRICING) {
30
+ if (entry.match.test(model))
31
+ return entry.pricing;
32
+ }
33
+ return PRICING[PRICING.length - 1].pricing;
34
+ }
15
35
  let _initPromise;
16
36
  async function ensureUsageTable() {
17
37
  if (!_initPromise) {
@@ -23,58 +43,97 @@ async function ensureUsageTable() {
23
43
  owner_email TEXT NOT NULL,
24
44
  input_tokens ${intType()} NOT NULL DEFAULT 0,
25
45
  output_tokens ${intType()} NOT NULL DEFAULT 0,
46
+ cache_read_tokens ${intType()} NOT NULL DEFAULT 0,
47
+ cache_write_tokens ${intType()} NOT NULL DEFAULT 0,
26
48
  cost_cents_x100 ${intType()} NOT NULL DEFAULT 0,
27
49
  model TEXT NOT NULL DEFAULT '',
50
+ label TEXT NOT NULL DEFAULT 'chat',
51
+ app TEXT NOT NULL DEFAULT '',
28
52
  created_at ${intType()} NOT NULL
29
53
  )
30
54
  `);
31
- // For id generation on SQLite we rely on rowid; on Postgres use a sequence.
32
- // Using timestamp-based IDs to avoid needing AUTOINCREMENT.
55
+ // Add columns on older deployments that pre-date the label/cache
56
+ // fields. Each ALTER is wrapped so a dialect without IF NOT EXISTS
57
+ // (SQLite) still makes progress if only some columns are missing.
58
+ const additions = [
59
+ ["cache_read_tokens", `${intType()} NOT NULL DEFAULT 0`],
60
+ ["cache_write_tokens", `${intType()} NOT NULL DEFAULT 0`],
61
+ ["label", `TEXT NOT NULL DEFAULT 'chat'`],
62
+ ["app", `TEXT NOT NULL DEFAULT ''`],
63
+ ];
64
+ for (const [col, def] of additions) {
65
+ try {
66
+ if (isPostgres()) {
67
+ await client.execute(`ALTER TABLE token_usage ADD COLUMN IF NOT EXISTS ${col} ${def}`);
68
+ }
69
+ else {
70
+ await client.execute(`ALTER TABLE token_usage ADD COLUMN ${col} ${def}`);
71
+ }
72
+ }
73
+ catch {
74
+ // Column already exists — ignore
75
+ }
76
+ }
77
+ try {
78
+ await client.execute(`CREATE INDEX IF NOT EXISTS idx_token_usage_owner_created ON token_usage (owner_email, created_at)`);
79
+ }
80
+ catch { }
33
81
  })();
34
82
  }
35
83
  return _initPromise;
36
84
  }
37
85
  /**
38
- * Calculate cost in cents * 100 (for integer precision) given token counts and model.
39
- * Returns cost in "centicents" (1/100th of a cent) so we can store as integer.
86
+ * Calculate cost in centicents (1/100th of a cent).
87
+ * Accepts cache tokens so callers that use prompt caching are priced
88
+ * correctly. Non-cache-aware callers can pass 0 for the cache fields.
40
89
  */
41
- export function calculateCost(inputTokens, outputTokens, model) {
42
- const isHaiku = model.includes("haiku");
43
- const inputCost = isHaiku
44
- ? HAIKU_INPUT_COST_PER_MTOK
45
- : SONNET_INPUT_COST_PER_MTOK;
46
- const outputCost = isHaiku
47
- ? HAIKU_OUTPUT_COST_PER_MTOK
48
- : SONNET_OUTPUT_COST_PER_MTOK;
49
- // cost_cents_x100 = (tokens / 1_000_000) * cost_per_mtok * 100
50
- const inputCostX100 = Math.round((inputTokens / 1_000_000) * inputCost * 100);
51
- const outputCostX100 = Math.round((outputTokens / 1_000_000) * outputCost * 100);
52
- return inputCostX100 + outputCostX100;
90
+ export function calculateCost(inputTokens, outputTokens, model, cacheReadTokens = 0, cacheWriteTokens = 0) {
91
+ const p = pricingFor(model);
92
+ const toX100 = (tokens, costPerM) => Math.round((tokens / 1_000_000) * costPerM * 100);
93
+ return (toX100(inputTokens, p.input) +
94
+ toX100(outputTokens, p.output) +
95
+ toX100(cacheReadTokens, p.cacheRead) +
96
+ toX100(cacheWriteTokens, p.cacheWrite));
53
97
  }
54
- /**
55
- * Record token usage for a user after an agent run.
56
- */
57
- export async function recordUsage(ownerEmail, inputTokens, outputTokens, model) {
98
+ export async function recordUsage(recordOrOwner, inputTokens, outputTokens, model) {
99
+ const record = typeof recordOrOwner === "string"
100
+ ? {
101
+ ownerEmail: recordOrOwner,
102
+ inputTokens: inputTokens ?? 0,
103
+ outputTokens: outputTokens ?? 0,
104
+ model: model ?? "",
105
+ }
106
+ : recordOrOwner;
107
+ const { ownerEmail, inputTokens: inTok, outputTokens: outTok, cacheReadTokens = 0, cacheWriteTokens = 0, model: modelName, label, app, } = record;
108
+ // Skip no-op writes (e.g. a stream aborted before any tokens flowed)
109
+ if (!inTok && !outTok && !cacheReadTokens && !cacheWriteTokens)
110
+ return;
58
111
  await ensureUsageTable();
59
112
  const client = getDbExec();
60
- const costX100 = calculateCost(inputTokens, outputTokens, model);
113
+ const costX100 = calculateCost(inTok, outTok, modelName, cacheReadTokens, cacheWriteTokens);
61
114
  const id = Date.now() * 1000 + Math.floor(Math.random() * 1000);
115
+ const resolvedApp = app ?? process.env.AGENT_APP ?? "";
116
+ const resolvedLabel = label ?? "chat";
62
117
  await client.execute({
63
- sql: `INSERT INTO token_usage (id, owner_email, input_tokens, output_tokens, cost_cents_x100, model, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)`,
118
+ sql: `INSERT INTO token_usage
119
+ (id, owner_email, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, cost_cents_x100, model, label, app, created_at)
120
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
64
121
  args: [
65
122
  id,
66
123
  ownerEmail,
67
- inputTokens,
68
- outputTokens,
124
+ inTok,
125
+ outTok,
126
+ cacheReadTokens,
127
+ cacheWriteTokens,
69
128
  costX100,
70
- model,
129
+ modelName,
130
+ resolvedLabel,
131
+ resolvedApp,
71
132
  Date.now(),
72
133
  ],
73
134
  });
74
135
  }
75
- /**
76
- * Get total usage cost for a user in cents.
77
- */
136
+ /** Total cost (in cents) charged against a user, across all time. */
78
137
  export async function getUserUsageCents(ownerEmail) {
79
138
  await ensureUsageTable();
80
139
  const client = getDbExec();
@@ -83,13 +142,8 @@ export async function getUserUsageCents(ownerEmail) {
83
142
  args: [ownerEmail],
84
143
  });
85
144
  const total = Number(rows[0]?.total ?? 0);
86
- // Convert from centicents to cents
87
145
  return total / 100;
88
146
  }
89
- /**
90
- * Check if a user has exceeded their usage limit.
91
- * Returns { allowed: true } or { allowed: false, usageCents, limitCents }.
92
- */
93
147
  export async function checkUsageLimit(ownerEmail, limitCents) {
94
148
  const limit = limitCents ?? DEFAULT_USAGE_LIMIT_CENTS;
95
149
  const usageCents = await getUserUsageCents(ownerEmail);
@@ -99,4 +153,116 @@ export async function checkUsageLimit(ownerEmail, limitCents) {
99
153
  limitCents: limit,
100
154
  };
101
155
  }
156
+ const DAY_MS = 86_400_000;
157
+ /**
158
+ * Produce an aggregated spend view for the Usage admin panel.
159
+ * Scoped to the passed owner email; the UI always passes the session user.
160
+ */
161
+ export async function getUsageSummary(options) {
162
+ await ensureUsageTable();
163
+ const client = getDbExec();
164
+ const sinceMs = options.sinceMs ?? Date.now() - 30 * DAY_MS;
165
+ const totalRow = await client.execute({
166
+ sql: `SELECT
167
+ COALESCE(SUM(cost_cents_x100), 0) AS cents,
168
+ COUNT(*) AS calls,
169
+ COALESCE(SUM(input_tokens), 0) AS in_tok,
170
+ COALESCE(SUM(output_tokens), 0) AS out_tok,
171
+ COALESCE(SUM(cache_read_tokens), 0) AS cr_tok,
172
+ COALESCE(SUM(cache_write_tokens), 0) AS cw_tok
173
+ FROM token_usage WHERE owner_email = ? AND created_at >= ?`,
174
+ args: [options.ownerEmail, sinceMs],
175
+ });
176
+ const t = (totalRow.rows[0] ?? {});
177
+ const bucketSql = (col) => ({
178
+ sql: `SELECT ${col} AS k,
179
+ COALESCE(SUM(cost_cents_x100), 0) AS cents,
180
+ COUNT(*) AS calls,
181
+ COALESCE(SUM(input_tokens), 0) AS in_tok,
182
+ COALESCE(SUM(output_tokens), 0) AS out_tok,
183
+ COALESCE(SUM(cache_read_tokens), 0) AS cr_tok,
184
+ COALESCE(SUM(cache_write_tokens), 0) AS cw_tok
185
+ FROM token_usage
186
+ WHERE owner_email = ? AND created_at >= ?
187
+ GROUP BY ${col}
188
+ ORDER BY cents DESC`,
189
+ args: [options.ownerEmail, sinceMs],
190
+ });
191
+ const mapBuckets = (rows) => rows.map((r) => {
192
+ const row = r;
193
+ return {
194
+ key: String(row.k ?? ""),
195
+ cents: Number(row.cents ?? 0) / 100,
196
+ calls: Number(row.calls ?? 0),
197
+ inputTokens: Number(row.in_tok ?? 0),
198
+ outputTokens: Number(row.out_tok ?? 0),
199
+ cacheReadTokens: Number(row.cr_tok ?? 0),
200
+ cacheWriteTokens: Number(row.cw_tok ?? 0),
201
+ };
202
+ });
203
+ const [byLabelR, byModelR, byAppR] = await Promise.all([
204
+ client.execute(bucketSql("label")),
205
+ client.execute(bucketSql("model")),
206
+ client.execute(bucketSql("app")),
207
+ ]);
208
+ // By-day aggregation — done in JS so we don't depend on dialect-specific
209
+ // date functions (SQLite `strftime`, Postgres `to_char`). Cheap enough
210
+ // for a 30-day window; if this grows, swap for a dialect-aware query.
211
+ const dayRows = await client.execute({
212
+ sql: `SELECT created_at, cost_cents_x100 FROM token_usage
213
+ WHERE owner_email = ? AND created_at >= ?`,
214
+ args: [options.ownerEmail, sinceMs],
215
+ });
216
+ const dayMap = new Map();
217
+ for (const row of dayRows.rows) {
218
+ const date = new Date(Number(row.created_at)).toISOString().slice(0, 10);
219
+ const prev = dayMap.get(date) ?? { cents: 0, calls: 0 };
220
+ prev.cents += Number(row.cost_cents_x100 ?? 0);
221
+ prev.calls += 1;
222
+ dayMap.set(date, prev);
223
+ }
224
+ const byDay = [...dayMap.entries()]
225
+ .map(([date, v]) => ({
226
+ date,
227
+ cents: v.cents / 100,
228
+ calls: v.calls,
229
+ }))
230
+ .sort((a, b) => a.date.localeCompare(b.date));
231
+ const recentRows = await client.execute({
232
+ sql: `SELECT id, created_at, label, app, model,
233
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens,
234
+ cost_cents_x100
235
+ FROM token_usage
236
+ WHERE owner_email = ?
237
+ ORDER BY created_at DESC
238
+ LIMIT 50`,
239
+ args: [options.ownerEmail],
240
+ });
241
+ const recent = recentRows.rows.map((row) => ({
242
+ id: Number(row.id),
243
+ createdAt: Number(row.created_at),
244
+ label: String(row.label ?? "chat"),
245
+ app: String(row.app ?? ""),
246
+ model: String(row.model ?? ""),
247
+ inputTokens: Number(row.input_tokens ?? 0),
248
+ outputTokens: Number(row.output_tokens ?? 0),
249
+ cacheReadTokens: Number(row.cache_read_tokens ?? 0),
250
+ cacheWriteTokens: Number(row.cache_write_tokens ?? 0),
251
+ cents: Number(row.cost_cents_x100 ?? 0) / 100,
252
+ }));
253
+ return {
254
+ totalCents: Number(t.cents ?? 0) / 100,
255
+ totalCalls: Number(t.calls ?? 0),
256
+ totalInputTokens: Number(t.in_tok ?? 0),
257
+ totalOutputTokens: Number(t.out_tok ?? 0),
258
+ totalCacheReadTokens: Number(t.cr_tok ?? 0),
259
+ totalCacheWriteTokens: Number(t.cw_tok ?? 0),
260
+ sinceMs,
261
+ byLabel: mapBuckets(byLabelR.rows),
262
+ byModel: mapBuckets(byModelR.rows),
263
+ byApp: mapBuckets(byAppR.rows),
264
+ byDay,
265
+ recent,
266
+ };
267
+ }
102
268
  //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/usage/store.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,9 @@ import type { Plugin } from "vite";
10
10
  * ```
11
11
  */
12
12
  export declare function actionTypesPlugin(): Plugin;
13
+ /**
14
+ * Public helper to regenerate the types + registry from a non-Vite context
15
+ * (e.g. the Nitro deploy build, where Vite plugins don't run).
16
+ */
17
+ export declare function generateActionRegistryForProject(projectRoot: string): void;
13
18
  //# sourceMappingURL=action-types-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-types-plugin.d.ts","sourceRoot":"","sources":["../../src/vite/action-types-plugin.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAmFnC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAgC1C"}
1
+ {"version":3,"file":"action-types-plugin.d.ts","sourceRoot":"","sources":["../../src/vite/action-types-plugin.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAiLnC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAgC1C;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG1E"}