@agent-native/core 0.191.0 → 0.192.0-nightly-20260926045737

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 (78) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/CHANGELOG.md +4 -0
  3. package/corpus/templates/analytics/app/components/layout/Layout.tsx +41 -12
  4. package/corpus/templates/analytics/app/lib/chat-handoff.ts +62 -0
  5. package/corpus/templates/analytics/changelog/2026-09-25-chat-sidebar-stays-closed-in-settings.md +6 -0
  6. package/corpus/templates/analytics/changelog/2026-09-25-show-one-recent-prompt-per-chat-turn.md +6 -0
  7. package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +74 -11
  8. package/corpus/templates/clips/app/i18n/en-US.ts +6 -0
  9. package/corpus/templates/clips/changelog/2026-09-25-one-click-builder-storage.md +6 -0
  10. package/corpus/templates/design/actions/get-design.schema.ts +19 -0
  11. package/corpus/templates/design/actions/get-design.ts +16 -19
  12. package/corpus/templates/mail/actions/apply-ai-filter.ts +8 -0
  13. package/corpus/templates/mail/actions/create-automation.ts +7 -1
  14. package/corpus/templates/mail/actions/manage-ai-filter-rule-undo.ts +34 -0
  15. package/corpus/templates/mail/actions/manage-automations.ts +21 -44
  16. package/corpus/templates/mail/app/components/email/EmailList.tsx +35 -0
  17. package/corpus/templates/mail/app/components/onboarding/AiInboxSetup.tsx +116 -34
  18. package/corpus/templates/mail/app/components/settings/AiFilterSection.tsx +108 -70
  19. package/corpus/templates/mail/app/components/settings/AiRulePromptField.tsx +8 -1
  20. package/corpus/templates/mail/app/components/settings/JevConnectionPrompt.tsx +171 -0
  21. package/corpus/templates/mail/app/hooks/use-automations.ts +24 -0
  22. package/corpus/templates/mail/app/i18n/en-US.ts +8 -2
  23. package/corpus/templates/mail/app/pages/InboxPage.tsx +12 -2
  24. package/corpus/templates/mail/changelog/2026-09-25-mail-now-guides-users-to-connect-jev-before-setting-up-triag.md +6 -0
  25. package/corpus/templates/mail/server/db/schema.ts +17 -0
  26. package/corpus/templates/mail/server/lib/ai-filter-rule-undo.ts +151 -0
  27. package/corpus/templates/mail/server/lib/automations.ts +34 -0
  28. package/corpus/templates/mail/server/plugins/db.ts +18 -0
  29. package/corpus/templates/mail/server/plugins/mail-jobs.ts +6 -0
  30. package/dist/client/AssistantChat.js +20 -3
  31. package/dist/client/BuilderReferralInviteRow.d.ts +3 -0
  32. package/dist/client/BuilderReferralInviteRow.js +16 -0
  33. package/dist/client/agent-chat-adapter.js +6 -5
  34. package/dist/client/chat/run-recovery.js +6 -5
  35. package/dist/client/settings/UsageSection.js +2 -1
  36. package/dist/client/settings/index.d.ts +1 -1
  37. package/dist/client/settings/index.js +1 -1
  38. package/dist/client/settings/useBuilderStatus.d.ts +4 -1
  39. package/dist/client/settings/useBuilderStatus.js +32 -16
  40. package/dist/client/use-agent-chat-running-threads.d.ts +2 -0
  41. package/dist/collab/struct-routes.d.ts +1 -1
  42. package/dist/framework-tools.d.ts +3 -1
  43. package/dist/framework-tools.js +2 -0
  44. package/dist/localization/core-messages/ar-SA.js +4 -0
  45. package/dist/localization/core-messages/de-DE.js +4 -0
  46. package/dist/localization/core-messages/en-US.d.ts +4 -0
  47. package/dist/localization/core-messages/en-US.js +4 -0
  48. package/dist/localization/core-messages/es-ES.js +4 -0
  49. package/dist/localization/core-messages/fr-FR.js +4 -0
  50. package/dist/localization/core-messages/hi-IN.js +4 -0
  51. package/dist/localization/core-messages/ja-JP.js +4 -0
  52. package/dist/localization/core-messages/ko-KR.js +4 -0
  53. package/dist/localization/core-messages/pt-BR.js +4 -0
  54. package/dist/localization/core-messages/zh-CN.js +4 -0
  55. package/dist/localization/core-messages/zh-TW.js +4 -0
  56. package/dist/localization/core-messages.d.ts +4 -0
  57. package/dist/notifications/routes.d.ts +3 -3
  58. package/dist/observability/routes.d.ts +5 -5
  59. package/dist/progress/routes.d.ts +1 -1
  60. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  61. package/dist/provider-api/actions/provider-api.d.ts +14 -14
  62. package/dist/secrets/routes.d.ts +3 -3
  63. package/dist/server/action-discovery.js +4 -0
  64. package/dist/server/agent-chat/plugin-options.d.ts +1 -1
  65. package/dist/server/agent-chat-plugin.js +6 -4
  66. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  67. package/dist/server/agent-engine-ollama-models-route.d.ts +1 -1
  68. package/dist/server/core-routes-plugin.d.ts +1 -1
  69. package/dist/server/fusion-app.d.ts +3 -0
  70. package/dist/server/fusion-app.js +17 -0
  71. package/dist/shared/builder-referrals.d.ts +10 -0
  72. package/dist/shared/builder-referrals.js +29 -0
  73. package/dist/usage/actions/get-builder-referral-info.d.ts +9 -0
  74. package/dist/usage/actions/get-builder-referral-info.js +26 -0
  75. package/dist/usage/metrics-store.js +142 -30
  76. package/dist/vite/action-types-plugin.js +4 -0
  77. package/docs/content/actions-agent-tools.mdx +2 -1
  78. package/package.json +3 -2
@@ -766,6 +766,10 @@ const messages = {
766
766
  "settings.emailNewLabel": "البريد الإلكتروني الجديد",
767
767
  "settings.emailNewPlaceholder": "أدخل بريدًا إلكترونيًا جديدًا",
768
768
  "usage.builderCredits": "أرصدة Builder",
769
+ "usage.inviteFriends": "ادعُ الأصدقاء",
770
+ "usage.inviteCredits": "احصل على {{amount}} من أرصدة Builder عندما يشترك صديق.",
771
+ "usage.copyInviteLink": "نسخ رابط الدعوة",
772
+ "usage.inviteLinkCopied": "تم نسخ رابط الدعوة",
769
773
  "usage.creditBalance": "رصيد مساحة العمل",
770
774
  "usage.monthlyPlan": "الخطة الشهرية",
771
775
  "usage.dailyFreeLimit": "الحد اليومي المجاني",
@@ -738,6 +738,10 @@ const messages = {
738
738
  "settings.emailNewLabel": "Neue E-Mail-Adresse",
739
739
  "settings.emailNewPlaceholder": "Neue E-Mail-Adresse eingeben",
740
740
  "usage.builderCredits": "Builder-Credits",
741
+ "usage.inviteFriends": "Freunde einladen",
742
+ "usage.inviteCredits": "Erhalte {{amount}} Builder-Credits, wenn sich ein Freund anmeldet.",
743
+ "usage.copyInviteLink": "Einladungslink kopieren",
744
+ "usage.inviteLinkCopied": "Einladungslink kopiert",
741
745
  "usage.creditBalance": "Workspace-Guthaben",
742
746
  "usage.monthlyPlan": "Monatsplan",
743
747
  "usage.dailyFreeLimit": "Tägliches Gratislimit",
@@ -738,6 +738,10 @@ declare const messages: {
738
738
  readonly "settings.emailNewLabel": "New email";
739
739
  readonly "settings.emailNewPlaceholder": "Enter new email";
740
740
  readonly "usage.builderCredits": "Builder credits";
741
+ readonly "usage.inviteFriends": "Invite friends";
742
+ readonly "usage.inviteCredits": "Earn {{amount}} Builder credits when a friend subscribes.";
743
+ readonly "usage.copyInviteLink": "Copy invite link";
744
+ readonly "usage.inviteLinkCopied": "Invite link copied";
741
745
  readonly "usage.creditBalance": "Workspace balance";
742
746
  readonly "usage.monthlyPlan": "Monthly plan";
743
747
  readonly "usage.dailyFreeLimit": "Free daily limit";
@@ -738,6 +738,10 @@ const messages = {
738
738
  "settings.emailNewLabel": "New email",
739
739
  "settings.emailNewPlaceholder": "Enter new email",
740
740
  "usage.builderCredits": "Builder credits",
741
+ "usage.inviteFriends": "Invite friends",
742
+ "usage.inviteCredits": "Earn {{amount}} Builder credits when a friend subscribes.",
743
+ "usage.copyInviteLink": "Copy invite link",
744
+ "usage.inviteLinkCopied": "Invite link copied",
741
745
  "usage.creditBalance": "Workspace balance",
742
746
  "usage.monthlyPlan": "Monthly plan",
743
747
  "usage.dailyFreeLimit": "Free daily limit",
@@ -745,6 +745,10 @@ const messages = {
745
745
  "settings.emailNewLabel": "Correo electrónico nuevo",
746
746
  "settings.emailNewPlaceholder": "Introduce un correo nuevo",
747
747
  "usage.builderCredits": "Créditos de Builder",
748
+ "usage.inviteFriends": "Invita a tus amigos",
749
+ "usage.inviteCredits": "Gana {{amount}} créditos de Builder cuando un amigo se suscriba.",
750
+ "usage.copyInviteLink": "Copiar enlace de invitación",
751
+ "usage.inviteLinkCopied": "Enlace de invitación copiado",
748
752
  "usage.creditBalance": "Saldo del espacio de trabajo",
749
753
  "usage.monthlyPlan": "Plan mensual",
750
754
  "usage.dailyFreeLimit": "Límite diario gratuito",
@@ -745,6 +745,10 @@ const messages = {
745
745
  "settings.emailNewLabel": "Nouvelle adresse e-mail",
746
746
  "settings.emailNewPlaceholder": "Saisissez une nouvelle adresse e-mail",
747
747
  "usage.builderCredits": "Crédits Builder",
748
+ "usage.inviteFriends": "Inviter des amis",
749
+ "usage.inviteCredits": "Gagnez {{amount}} crédits Builder lorsqu’un ami s’abonne.",
750
+ "usage.copyInviteLink": "Copier le lien d’invitation",
751
+ "usage.inviteLinkCopied": "Lien d’invitation copié",
748
752
  "usage.creditBalance": "Solde de l’espace de travail",
749
753
  "usage.monthlyPlan": "Forfait mensuel",
750
754
  "usage.dailyFreeLimit": "Limite quotidienne gratuite",
@@ -738,6 +738,10 @@ const messages = {
738
738
  "settings.emailNewLabel": "नया ईमेल",
739
739
  "settings.emailNewPlaceholder": "नया ईमेल दर्ज करें",
740
740
  "usage.builderCredits": "Builder क्रेडिट",
741
+ "usage.inviteFriends": "दोस्तों को आमंत्रित करें",
742
+ "usage.inviteCredits": "दोस्त के सदस्यता लेने पर {{amount}} Builder क्रेडिट पाएं।",
743
+ "usage.copyInviteLink": "आमंत्रण लिंक कॉपी करें",
744
+ "usage.inviteLinkCopied": "आमंत्रण लिंक कॉपी हो गया",
741
745
  "usage.creditBalance": "वर्कस्पेस बैलेंस",
742
746
  "usage.monthlyPlan": "मासिक प्लान",
743
747
  "usage.dailyFreeLimit": "मुफ़्त दैनिक सीमा",
@@ -731,6 +731,10 @@ const messages = {
731
731
  "settings.emailNewLabel": "新しいメールアドレス",
732
732
  "settings.emailNewPlaceholder": "新しいメールアドレスを入力",
733
733
  "usage.builderCredits": "Builder クレジット",
734
+ "usage.inviteFriends": "友だちを招待",
735
+ "usage.inviteCredits": "友だちが登録すると Builder クレジットを {{amount}} 獲得できます。",
736
+ "usage.copyInviteLink": "招待リンクをコピー",
737
+ "usage.inviteLinkCopied": "招待リンクをコピーしました",
734
738
  "usage.creditBalance": "ワークスペース残高",
735
739
  "usage.monthlyPlan": "月間プラン",
736
740
  "usage.dailyFreeLimit": "無料の日次上限",
@@ -731,6 +731,10 @@ const messages = {
731
731
  "settings.emailNewLabel": "새 이메일",
732
732
  "settings.emailNewPlaceholder": "새 이메일 입력",
733
733
  "usage.builderCredits": "Builder 크레딧",
734
+ "usage.inviteFriends": "친구 초대",
735
+ "usage.inviteCredits": "친구가 구독하면 Builder 크레딧 {{amount}}개를 받을 수 있습니다.",
736
+ "usage.copyInviteLink": "초대 링크 복사",
737
+ "usage.inviteLinkCopied": "초대 링크를 복사했습니다",
734
738
  "usage.creditBalance": "워크스페이스 잔액",
735
739
  "usage.monthlyPlan": "월간 플랜",
736
740
  "usage.dailyFreeLimit": "무료 일일 한도",
@@ -745,6 +745,10 @@ const messages = {
745
745
  "settings.emailNewLabel": "Novo e-mail",
746
746
  "settings.emailNewPlaceholder": "Digite o novo e-mail",
747
747
  "usage.builderCredits": "Créditos do Builder",
748
+ "usage.inviteFriends": "Convide amigos",
749
+ "usage.inviteCredits": "Ganhe {{amount}} créditos do Builder quando um amigo assinar.",
750
+ "usage.copyInviteLink": "Copiar link de convite",
751
+ "usage.inviteLinkCopied": "Link de convite copiado",
748
752
  "usage.creditBalance": "Saldo do workspace",
749
753
  "usage.monthlyPlan": "Plano mensal",
750
754
  "usage.dailyFreeLimit": "Limite diário gratuito",
@@ -731,6 +731,10 @@ const messages = {
731
731
  "settings.emailNewLabel": "新电子邮件",
732
732
  "settings.emailNewPlaceholder": "输入新电子邮件",
733
733
  "usage.builderCredits": "Builder 积分",
734
+ "usage.inviteFriends": "邀请好友",
735
+ "usage.inviteCredits": "好友订阅后可获得 {{amount}} 个 Builder 积分。",
736
+ "usage.copyInviteLink": "复制邀请链接",
737
+ "usage.inviteLinkCopied": "邀请链接已复制",
734
738
  "usage.creditBalance": "工作区余额",
735
739
  "usage.monthlyPlan": "月度套餐",
736
740
  "usage.dailyFreeLimit": "免费每日上限",
@@ -731,6 +731,10 @@ const messages = {
731
731
  "settings.emailNewLabel": "新電子郵件",
732
732
  "settings.emailNewPlaceholder": "輸入新電子郵件",
733
733
  "usage.builderCredits": "Builder 點數",
734
+ "usage.inviteFriends": "邀請朋友",
735
+ "usage.inviteCredits": "朋友訂閱後可獲得 {{amount}} 點 Builder 點數。",
736
+ "usage.copyInviteLink": "複製邀請連結",
737
+ "usage.inviteLinkCopied": "邀請連結已複製",
734
738
  "usage.creditBalance": "工作區餘額",
735
739
  "usage.monthlyPlan": "月度方案",
736
740
  "usage.dailyFreeLimit": "免費每日上限",
@@ -740,6 +740,10 @@ export declare const englishAgentChatMessages: {
740
740
  readonly "settings.emailNewLabel": "New email";
741
741
  readonly "settings.emailNewPlaceholder": "Enter new email";
742
742
  readonly "usage.builderCredits": "Builder credits";
743
+ readonly "usage.inviteFriends": "Invite friends";
744
+ readonly "usage.inviteCredits": "Earn {{amount}} Builder credits when a friend subscribes.";
745
+ readonly "usage.copyInviteLink": "Copy invite link";
746
+ readonly "usage.inviteLinkCopied": "Invite link copied";
743
747
  readonly "usage.creditBalance": "Workspace balance";
744
748
  readonly "usage.monthlyPlan": "Monthly plan";
745
749
  readonly "usage.dailyFreeLimit": "Free daily limit";
@@ -17,17 +17,17 @@ export declare function createNotificationsHandler(): import("h3").EventHandlerW
17
17
  ok?: undefined;
18
18
  } | {
19
19
  error?: undefined;
20
+ count?: undefined;
20
21
  updated: number;
21
22
  ok?: undefined;
22
- count?: undefined;
23
23
  } | {
24
+ count?: undefined;
24
25
  updated?: undefined;
25
26
  error: string;
26
27
  ok?: undefined;
27
- count?: undefined;
28
28
  } | {
29
29
  error?: undefined;
30
+ count?: undefined;
30
31
  updated?: undefined;
31
32
  ok: boolean;
32
- count?: undefined;
33
33
  }>>;
@@ -41,27 +41,27 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
41
41
  thumbsUpRate: number;
42
42
  avgEvalScore: number;
43
43
  } | {
44
+ error?: undefined;
45
+ ok?: undefined;
44
46
  summary: import("./types.js").TraceSummary;
45
47
  spans: import("./types.js").TraceSpan[];
46
48
  id?: undefined;
49
+ } | {
47
50
  error?: undefined;
48
51
  ok?: undefined;
49
- } | {
50
52
  summary?: undefined;
51
53
  spans?: undefined;
52
54
  id: string;
53
- error?: undefined;
54
- ok?: undefined;
55
55
  } | {
56
+ ok?: undefined;
56
57
  summary?: undefined;
57
58
  spans?: undefined;
58
59
  id?: undefined;
59
60
  error: any;
60
- ok?: undefined;
61
61
  } | {
62
+ error?: undefined;
62
63
  summary?: undefined;
63
64
  spans?: undefined;
64
65
  id?: undefined;
65
- error?: undefined;
66
66
  ok: boolean;
67
67
  }>>;
@@ -15,6 +15,6 @@ export declare function createProgressHandler(): import("h3").EventHandlerWithFe
15
15
  error: string;
16
16
  ok?: undefined;
17
17
  } | {
18
- ok: boolean;
19
18
  error?: undefined;
19
+ ok: boolean;
20
20
  }>>;
@@ -76,8 +76,8 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
76
76
  }>>;
77
77
  }, z.core.$strip>>, {
78
78
  id?: undefined;
79
+ provider?: undefined;
79
80
  deleted?: undefined;
80
- found?: undefined;
81
81
  providers: {
82
82
  id: string;
83
83
  label: string;
@@ -88,7 +88,7 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
88
88
  updatedAt: number;
89
89
  }[];
90
90
  count: number;
91
- provider?: undefined;
91
+ found?: undefined;
92
92
  registered?: undefined;
93
93
  label?: undefined;
94
94
  message?: undefined;
@@ -103,31 +103,31 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
103
103
  label?: undefined;
104
104
  message?: undefined;
105
105
  } | {
106
+ provider?: undefined;
106
107
  deleted?: undefined;
107
108
  count?: undefined;
108
109
  providers?: undefined;
109
- provider?: undefined;
110
110
  found: boolean;
111
111
  id: string;
112
112
  registered?: undefined;
113
113
  label?: undefined;
114
114
  message?: undefined;
115
115
  } | {
116
+ provider?: undefined;
116
117
  count?: undefined;
117
- found?: undefined;
118
118
  providers?: undefined;
119
- provider?: undefined;
119
+ found?: undefined;
120
120
  deleted: boolean;
121
121
  id: string;
122
122
  registered?: undefined;
123
123
  label?: undefined;
124
124
  message?: undefined;
125
125
  } | {
126
+ provider?: undefined;
126
127
  deleted?: undefined;
127
128
  count?: undefined;
128
- found?: undefined;
129
129
  providers?: undefined;
130
- provider?: undefined;
130
+ found?: undefined;
131
131
  registered: boolean;
132
132
  id: string;
133
133
  label: string;
@@ -311,10 +311,9 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
311
311
  notes?: string | undefined;
312
312
  scope?: "org" | "user" | undefined;
313
313
  }, {
314
- message?: undefined;
315
314
  id?: undefined;
316
315
  deleted?: undefined;
317
- found?: undefined;
316
+ provider?: undefined;
318
317
  providers: {
319
318
  id: string;
320
319
  label: string;
@@ -325,45 +324,46 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
325
324
  updatedAt: number;
326
325
  }[];
327
326
  count: number;
328
- provider?: undefined;
327
+ found?: undefined;
329
328
  registered?: undefined;
330
329
  label?: undefined;
331
- } | {
332
330
  message?: undefined;
331
+ } | {
333
332
  id?: undefined;
334
- count?: undefined;
335
333
  deleted?: undefined;
336
334
  providers?: undefined;
335
+ count?: undefined;
337
336
  found: boolean;
338
337
  provider: import("../custom-registry.js").CustomProviderConfig;
339
338
  registered?: undefined;
340
339
  label?: undefined;
341
- } | {
342
340
  message?: undefined;
343
- count?: undefined;
341
+ } | {
344
342
  deleted?: undefined;
345
- providers?: undefined;
346
343
  provider?: undefined;
344
+ providers?: undefined;
345
+ count?: undefined;
347
346
  found: boolean;
348
347
  id: string;
349
348
  registered?: undefined;
350
349
  label?: undefined;
351
- } | {
352
350
  message?: undefined;
351
+ } | {
352
+ provider?: undefined;
353
+ providers?: undefined;
353
354
  count?: undefined;
354
355
  found?: undefined;
355
- providers?: undefined;
356
- provider?: undefined;
357
356
  deleted: boolean;
358
357
  id: string;
359
358
  registered?: undefined;
360
359
  label?: undefined;
360
+ message?: undefined;
361
361
  } | {
362
- count?: undefined;
363
362
  deleted?: undefined;
364
- found?: undefined;
365
- providers?: undefined;
366
363
  provider?: undefined;
364
+ providers?: undefined;
365
+ count?: undefined;
366
+ found?: undefined;
367
367
  registered: boolean;
368
368
  id: string;
369
369
  label: string;
@@ -57,16 +57,16 @@ export declare function createListSecretsHandler(): import("h3").EventHandlerWit
57
57
  /** POST /_agent-native/secrets/:key — write a secret. */
58
58
  export declare function createWriteSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
59
59
  error: string;
60
- status?: undefined;
61
60
  ok?: undefined;
61
+ status?: undefined;
62
62
  } | {
63
63
  ok: boolean;
64
64
  status: string;
65
65
  error?: undefined;
66
66
  } | {
67
+ ok?: undefined;
67
68
  error: string;
68
69
  removed?: undefined;
69
- ok?: undefined;
70
70
  } | {
71
71
  ok: boolean;
72
72
  removed: boolean;
@@ -77,9 +77,9 @@ export declare function createWriteSecretHandler(): import("h3").EventHandlerWit
77
77
  * or the current stored value without changing anything.
78
78
  */
79
79
  export declare function createTestSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
80
+ ok?: undefined;
80
81
  error: string;
81
82
  note?: undefined;
82
- ok?: undefined;
83
83
  } | {
84
84
  ok: boolean;
85
85
  note?: undefined;
@@ -716,6 +716,10 @@ export async function mergeCoreSharingActions(registry) {
716
716
  "get-builder-credit-usage",
717
717
  () => import("../usage/actions/get-builder-credit-usage.js"),
718
718
  ],
719
+ [
720
+ "get-builder-referral-info",
721
+ () => import("../usage/actions/get-builder-referral-info.js"),
722
+ ],
719
723
  [
720
724
  "context-manifest-get",
721
725
  () => import("../agent/context-xray/actions/context-manifest-get.js"),
@@ -280,7 +280,7 @@ export interface AgentChatPluginOptions {
280
280
  * Which of the framework's OWN agent tools this app exposes — raw SQL,
281
281
  * extensions, sharing, review comments, version history, feature flags,
282
282
  * localization, audit, context X-Ray, profile, automations, docs, resources,
283
- * web, cross-app delegation, chat, email.
283
+ * browser-session controls, web, cross-app delegation, chat, email.
284
284
  *
285
285
  * Every group defaults to today's behavior, so omitting this leaves the tool
286
286
  * surface unchanged. `"minimal"` (or `{ preset: "minimal" }`) turns them all
@@ -1223,10 +1223,12 @@ export function createAgentChatPlugin(options) {
1223
1223
  }
1224
1224
  let browserSessionTools = {};
1225
1225
  try {
1226
- const { createBrowserSessionActionEntries } = await import("../browser-sessions/actions.js");
1227
- browserSessionTools = createBrowserSessionActionEntries({
1228
- getOwnerEmail: () => requireCurrentRunOwner("use browser sessions"),
1229
- });
1226
+ if (frameworkTools.isEnabled("browserSessions")) {
1227
+ const { createBrowserSessionActionEntries } = await import("../browser-sessions/actions.js");
1228
+ browserSessionTools = createBrowserSessionActionEntries({
1229
+ getOwnerEmail: () => requireCurrentRunOwner("use browser sessions"),
1230
+ });
1231
+ }
1230
1232
  }
1231
1233
  catch { }
1232
1234
  let remoteBrowserTools = {};
@@ -56,10 +56,10 @@ export declare function createAgentEngineApiKeyHandler(): import("h3").EventHand
56
56
  ok: boolean;
57
57
  error: string;
58
58
  } | {
59
+ error?: undefined;
59
60
  ok: boolean;
60
61
  key: string;
61
62
  baseUrlKey?: string;
62
63
  scope: AgentEngineApiKeyScope;
63
- error?: undefined;
64
64
  }>>;
65
65
  export {};
@@ -5,8 +5,8 @@
5
5
  * static suggestion list in `model-config.ts`.
6
6
  */
7
7
  export declare function createAgentEngineOllamaModelsHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
8
- error: string;
9
8
  ok?: undefined;
9
+ error: string;
10
10
  models?: undefined;
11
11
  } | {
12
12
  ok: boolean;
@@ -419,8 +419,8 @@ export declare function createPublicRemoteAgentsHandler(discover?: PublicAgentDi
419
419
  error: string;
420
420
  agents?: undefined;
421
421
  } | {
422
- agents: Omit<import("./agent-discovery.js").DiscoveredAgent, "auth" | "kind">[];
423
422
  error?: undefined;
423
+ agents: Omit<import("./agent-discovery.js").DiscoveredAgent, "auth" | "kind">[];
424
424
  }>>;
425
425
  export declare function getBuilderConnectErrorDisposition(error: unknown, connectAttemptId: string | null): "correlated" | "legacy" | null;
426
426
  export declare function getBuilderConnectErrorKey(ownerEmail: string, connectAttemptId?: string | null): string;
@@ -24,6 +24,7 @@
24
24
  * respond with newline-delimited JSON over chunked HTTP.
25
25
  */
26
26
  import { z } from "zod";
27
+ import { type BuilderReferralInfo } from "../shared/builder-referrals.js";
27
28
  export interface FusionBranchRef {
28
29
  projectId: string;
29
30
  branchName: string;
@@ -65,6 +66,8 @@ declare const builderCreditUsageSchema: z.ZodObject<{
65
66
  export type BuilderCreditUsage = z.infer<typeof builderCreditUsageSchema>;
66
67
  /** Current Builder balance and the active free-daily or paid-monthly quota. */
67
68
  export declare function getBuilderCreditUsage(): Promise<BuilderCreditUsage | null>;
69
+ /** The connected Builder workspace's eligible referral link and credit totals. */
70
+ export declare function getBuilderReferralInfo(): Promise<BuilderReferralInfo | null>;
68
71
  /** The Builder visual-editor URL for a fusion branch. */
69
72
  export declare function getFusionBranchEditorUrl(ref: FusionBranchRef): string;
70
73
  /** Public URL for a reserved fusion hosting slug. */
@@ -25,6 +25,7 @@
25
25
  */
26
26
  import { z } from "zod";
27
27
  import { withBuilderUtmTrackingParams } from "../shared/builder-link-tracking.js";
28
+ import { builderReferralInfoSchema, } from "../shared/builder-referrals.js";
28
29
  import { resolveBuilderRequestAuthorization, } from "./builder-api-auth.js";
29
30
  import { getBuilderApiHost, getBuilderAppHost } from "./builder-browser.js";
30
31
  async function resolveFusionAuth(requiredScope) {
@@ -78,6 +79,22 @@ export async function getBuilderCreditUsage() {
78
79
  }
79
80
  return builderCreditUsageSchema.parse(await response.json());
80
81
  }
82
+ /** The connected Builder workspace's eligible referral link and credit totals. */
83
+ export async function getBuilderReferralInfo() {
84
+ const authorization = await resolveBuilderRequestAuthorization({
85
+ requiredScope: "builder:ai:invoke",
86
+ });
87
+ if (!authorization)
88
+ return null;
89
+ const response = await fetch(fusionUrl("/agent-native/credits/v1/referrals", authorization), {
90
+ headers: { Authorization: authorization.authorization },
91
+ signal: AbortSignal.timeout(5000),
92
+ });
93
+ if (!response.ok) {
94
+ throw new Error(`Builder referral info failed (${response.status}).`);
95
+ }
96
+ return builderReferralInfoSchema.parse(await response.json());
97
+ }
81
98
  /** The Builder visual-editor URL for a fusion branch. */
82
99
  export function getFusionBranchEditorUrl(ref) {
83
100
  const host = getBuilderAppHost().replace(/\/+$/, "");
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ export declare const builderReferralInfoSchema: z.ZodObject<{
3
+ eligible: z.ZodBoolean;
4
+ inviteUrl: z.ZodNullable<z.ZodString>;
5
+ creditsPerReferral: z.ZodNumber;
6
+ completedReferrals: z.ZodNumber;
7
+ pendingReferrals: z.ZodNumber;
8
+ creditsEarned: z.ZodNumber;
9
+ }, z.core.$strip>;
10
+ export type BuilderReferralInfo = z.infer<typeof builderReferralInfoSchema>;
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ const safeCount = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
3
+ const inviteUrlSchema = z
4
+ .string()
5
+ .url()
6
+ .refine((value) => {
7
+ const url = new URL(value);
8
+ return (url.origin === "https://builder.io" &&
9
+ url.pathname === "/signup" &&
10
+ /^[0-9a-f]{32}$/i.test(url.searchParams.get("fus_ref") ?? ""));
11
+ });
12
+ export const builderReferralInfoSchema = z
13
+ .object({
14
+ eligible: z.boolean(),
15
+ inviteUrl: inviteUrlSchema.nullable(),
16
+ creditsPerReferral: safeCount,
17
+ completedReferrals: safeCount,
18
+ pendingReferrals: safeCount,
19
+ creditsEarned: safeCount,
20
+ })
21
+ .superRefine((info, context) => {
22
+ if (info.eligible !== Boolean(info.inviteUrl)) {
23
+ context.addIssue({
24
+ code: "custom",
25
+ message: "Referral eligibility and invite URL must agree.",
26
+ path: ["inviteUrl"],
27
+ });
28
+ }
29
+ });
@@ -0,0 +1,9 @@
1
+ declare const _default: import("../../action.js").ActionDefinition<Record<string, never>, {
2
+ eligible: boolean;
3
+ inviteUrl?: string;
4
+ creditsPerReferral: number;
5
+ completedReferrals: number;
6
+ pendingReferrals: number;
7
+ creditsEarned: number;
8
+ }>;
9
+ export default _default;
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ import { defineAction } from "../../action.js";
3
+ import { BUILDER_CREDIT_USAGE_REPORTING_FLAG } from "../../feature-flags/registry.js";
4
+ import { isFeatureFlagEnabled } from "../../feature-flags/store.js";
5
+ import { getBuilderReferralInfo } from "../../server/fusion-app.js";
6
+ import { ForbiddenError } from "../../sharing/access.js";
7
+ import { canViewWorkspaceUsage } from "../metrics-store.js";
8
+ export default defineAction({
9
+ description: "Get the connected Builder workspace's referral eligibility, invite link, and aggregate referral credit totals. The invite link is only available for eligible paid Builder workspaces; the workspace is resolved from the connected Builder credentials.",
10
+ http: { method: "GET" },
11
+ schema: z.object({}),
12
+ run: async (_input, ctx) => {
13
+ if (!ctx?.userEmail)
14
+ throw new Error("Not authenticated.");
15
+ const enabled = await isFeatureFlagEnabled(BUILDER_CREDIT_USAGE_REPORTING_FLAG, { userEmail: ctx.userEmail, orgId: ctx.orgId });
16
+ if (!enabled)
17
+ return null;
18
+ if (!(await canViewWorkspaceUsage({
19
+ ownerEmail: ctx.userEmail,
20
+ orgId: ctx.orgId,
21
+ }))) {
22
+ throw new ForbiddenError("Only organization owners and admins can view workspace referral information.");
23
+ }
24
+ return getBuilderReferralInfo();
25
+ },
26
+ });