@agent-native/core-corpus 0.200.0 → 0.200.1-nightly-20261002213029

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 (118) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +2 -2
  3. package/corpus/templates/analytics/CHANGELOG.md +1 -1
  4. package/corpus/templates/analytics/app/i18n/en-US.ts +3 -3
  5. package/corpus/templates/analytics/changelog/2026-06-29-set-up-session-replay-storage-from-settings-connect-builder-.md +1 -1
  6. package/corpus/templates/analytics/changelog/2026-10-02-builder-io-setup-now-explains-free-credits-and-the-existing-.md +6 -0
  7. package/corpus/templates/analytics/server/lib/replay-storage.ts +1 -1
  8. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +2 -2
  9. package/corpus/templates/assets/app/i18n-data.ts +10 -10
  10. package/corpus/templates/assets/changelog/2026-10-02-builder-io-setup-copy-now-clarifies-account-use-and-availabl.md +6 -0
  11. package/corpus/templates/assets/server/lib/generation.ts +8 -8
  12. package/corpus/templates/assets/server/lib/storage.ts +1 -1
  13. package/corpus/templates/assets/server/plugins/onboarding.ts +3 -3
  14. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +2 -2
  15. package/corpus/templates/brain/server/lib/privacy-readiness.ts +2 -2
  16. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +2 -2
  17. package/corpus/templates/calendar/app/i18n/en-US.ts +1 -1
  18. package/corpus/templates/calendar/changelog/2026-10-02-builder-io-setup-copy-now-clarifies-account-activation-and-s.md +6 -0
  19. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +2 -2
  20. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +2 -2
  21. package/corpus/templates/clips/CHANGELOG.md +1 -1
  22. package/corpus/templates/clips/actions/cleanup-transcript.ts +1 -1
  23. package/corpus/templates/clips/actions/create-meeting.ts +4 -5
  24. package/corpus/templates/clips/actions/create-recording.ts +9 -3
  25. package/corpus/templates/clips/actions/create-screenshot.ts +3 -2
  26. package/corpus/templates/clips/actions/import-loom-recording.ts +8 -8
  27. package/corpus/templates/clips/actions/set-thumbnail.ts +1 -1
  28. package/corpus/templates/clips/actions/stitch-recordings.ts +3 -2
  29. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +5 -2
  30. package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +1 -9
  31. package/corpus/templates/clips/app/i18n/en-US.ts +17 -19
  32. package/corpus/templates/clips/app/lib/local-recording-upload.ts +1 -1
  33. package/corpus/templates/clips/app/lib/storage-failures.ts +1 -1
  34. package/corpus/templates/clips/app/routes/record.tsx +1 -1
  35. package/corpus/templates/clips/changelog/2026-09-25-one-click-builder-storage.md +1 -1
  36. package/corpus/templates/clips/changelog/2026-10-02-builder-io-setup-now-offers-one-click-activation-and-clear-e.md +6 -0
  37. package/corpus/templates/clips/changelog/2026-10-02-recording-visibility-settings-fail-clearly.md +6 -0
  38. package/corpus/templates/clips/chrome-extension/src/background.ts +2 -2
  39. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +2 -2
  40. package/corpus/templates/clips/chrome-extension/src/popup.html +2 -3
  41. package/corpus/templates/clips/chrome-extension/src/popup.ts +4 -4
  42. package/corpus/templates/clips/desktop/src/app.tsx +73 -10
  43. package/corpus/templates/clips/desktop/src/lib/builder-connection.ts +71 -0
  44. package/corpus/templates/clips/desktop/src/lib/recording-request.ts +1 -1
  45. package/corpus/templates/clips/server/lib/public-agent-context.ts +1 -1
  46. package/corpus/templates/clips/server/lib/recordings.ts +7 -8
  47. package/corpus/templates/clips/server/lib/video-storage.ts +1 -1
  48. package/corpus/templates/clips/server/plugins/onboarding.ts +1 -1
  49. package/corpus/templates/clips/server/routes/api/media/index.post.ts +1 -1
  50. package/corpus/templates/clips/shared/transcript-failure.ts +1 -1
  51. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +2 -2
  52. package/corpus/templates/content/actions/transcribe-media.ts +4 -3
  53. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +6 -1
  54. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -1
  55. package/corpus/templates/content/app/components/editor/database/settings.tsx +1 -1
  56. package/corpus/templates/content/app/i18n-data.ts +2 -2
  57. package/corpus/templates/content/app/lib/content-landing.ts +14 -0
  58. package/corpus/templates/content/app/lib/last-location-hint.ts +47 -0
  59. package/corpus/templates/content/app/lib/page-icon-row-hint.ts +8 -3
  60. package/corpus/templates/content/app/root.tsx +17 -0
  61. package/corpus/templates/content/app/routes/_app.home.tsx +20 -9
  62. package/corpus/templates/content/changelog/2026-10-01-home-opens-your-last-page-sooner.md +6 -0
  63. package/corpus/templates/content/changelog/2026-10-02-builder-io-setup-instructions-now-use-consistent-action-lang.md +6 -0
  64. package/corpus/templates/content/scripts/trace-startup.mjs +20 -1
  65. package/corpus/templates/content/server/plugins/onboarding.ts +2 -2
  66. package/corpus/templates/content/vitest.config.ts +3 -1
  67. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +2 -2
  68. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +2 -2
  69. package/corpus/templates/design/CODE_NATIVE_DESIGN_STUDIO_IMPLEMENTATION_PLAN.md +2 -2
  70. package/corpus/templates/design/DESIGN-STUDIO-PLAN.md +5 -5
  71. package/corpus/templates/design/actions/apply-design-token-edit.ts +1 -1
  72. package/corpus/templates/design/actions/capture-design-state.ts +4 -3
  73. package/corpus/templates/design/actions/connect-builder-app.ts +2 -2
  74. package/corpus/templates/design/actions/create-design-branch.ts +2 -2
  75. package/corpus/templates/design/actions/create-fusion-app.ts +2 -2
  76. package/corpus/templates/design/actions/deploy-design-preview.ts +2 -2
  77. package/corpus/templates/design/actions/export-png.ts +1 -1
  78. package/corpus/templates/design/actions/get-component-details.ts +1 -1
  79. package/corpus/templates/design/actions/get-design-branch-diff.ts +1 -1
  80. package/corpus/templates/design/actions/index-components.ts +3 -3
  81. package/corpus/templates/design/actions/index-design-system-with-builder.ts +1 -1
  82. package/corpus/templates/design/actions/migrate-inline-design-to-app.ts +3 -3
  83. package/corpus/templates/design/actions/open-component-source.ts +1 -1
  84. package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +2 -2
  85. package/corpus/templates/design/app/i18n/en-US.ts +3 -3
  86. package/corpus/templates/design/app/pages/DesignEditor.tsx +1 -1
  87. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +1 -1
  88. package/corpus/templates/design/changelog/2026-10-02-builder-io-setup-now-routes-account-activation-through-the-o.md +6 -0
  89. package/corpus/templates/design/scripts/qa-figma-stress-import.ts +1 -1
  90. package/corpus/templates/design/server/lib/figma-node-import.ts +1 -1
  91. package/corpus/templates/design/shared/design-source-capabilities.ts +9 -9
  92. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +2 -2
  93. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +2 -2
  94. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +2 -2
  95. package/corpus/templates/forms/actions/export-responses.ts +1 -1
  96. package/corpus/templates/forms/server/handlers/uploads.ts +1 -1
  97. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +2 -2
  98. package/corpus/templates/mail/app/i18n/en-US.ts +2 -2
  99. package/corpus/templates/mail/changelog/2026-10-02-builder-io-setup-copy-now-clarifies-the-account-action-and-a.md +6 -0
  100. package/corpus/templates/mail/server/lib/media-upload.ts +1 -1
  101. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +2 -2
  102. package/corpus/templates/plan/server/lib/plan-assets.ts +1 -1
  103. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +2 -2
  104. package/corpus/templates/slides/CHANGELOG.md +1 -0
  105. package/corpus/templates/slides/actions/generate-image-api.ts +4 -3
  106. package/corpus/templates/slides/actions/generate-slides-ai.ts +1 -1
  107. package/corpus/templates/slides/actions/import-google-slides-reference.ts +3 -1
  108. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
  109. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +1 -1
  110. package/corpus/templates/slides/app/i18n/en-US.ts +6 -6
  111. package/corpus/templates/slides/app/lib/image-drop-to-agent.ts +3 -2
  112. package/corpus/templates/slides/changelog/2026-10-02-builder-io-setup-now-routes-account-activation-through-the-o.md +6 -0
  113. package/corpus/templates/slides/changelog/2026-10-02-google-slides-skipped-slides.md +6 -0
  114. package/corpus/templates/slides/changelog/2026-10-02-only-one-queued-message-action-menu-stays-open-at-a-time.md +6 -0
  115. package/corpus/templates/slides/server/handlers/assets.ts +1 -1
  116. package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
  117. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +2 -2
  118. package/package.json +1 -1
package/corpus/README.md CHANGED
@@ -32,4 +32,4 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core-corpus/corpu
32
32
 
33
33
  ## Generated Counts
34
34
 
35
- - template files: 11031
35
+ - template files: 11045
@@ -364,7 +364,7 @@ optimistic action patterns. Do not add a parallel CRUD API route for an action.
364
364
  ## 4. Keep onboarding shared
365
365
 
366
366
  Use the framework's existing setup experience. The app should offer the normal
367
- “Connect Builder” and “Add your own keys” paths for AI setup. Do not create a
367
+ “Use Builder.io” and “Add your own keys” paths for AI setup. Do not create a
368
368
  second credential form or hardcode a provider key.
369
369
 
370
370
  In local-development instructions, add a brief note that a developer can set
@@ -388,7 +388,7 @@ plain `pnpm dev` has the right first-run behavior without extra flags:
388
388
  }
389
389
  ```
390
390
 
391
- Either value keeps the shared Connect Builder / Add your own keys choice
391
+ Either value keeps the shared Use Builder.io / Add your own keys choice
392
392
  visible; only `"off"` disables first-run onboarding entirely. Do not replace
393
393
  this with a local credential form or remove the shared onboarding.
394
394
 
@@ -962,7 +962,7 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
962
962
 
963
963
  - Agents can search and read connected GitHub repositories when auditing tracking events.
964
964
  - Dashboards can now include extension panels that embed a sandboxed extension inline instead of a SQL chart
965
- - Set up session replay storage from settings: connect Builder.io or add S3-compatible storage
965
+ - Set up session replay storage from settings: use Builder.io or add S3-compatible storage
966
966
 
967
967
  ### Improved
968
968
 
@@ -361,9 +361,9 @@ export default {
361
361
  notificationsSoundGroup: "Sound",
362
362
  replayStorage: "Session replay storage",
363
363
  replayStorageDescription:
364
- "Session replay recordings need a configured file-upload provider. Connect Builder.io for free-tier object storage, or use your own S3-compatible bucket.",
364
+ "Session replay recordings need a configured file-upload provider. Use Builder.io for free-tier object storage, or use your own S3-compatible bucket.",
365
365
  connected: "Connected",
366
- connectBuilder: "Connect Builder.io",
366
+ connectBuilder: "Use Builder.io",
367
367
  checkingBuilder: "Checking Builder.io...",
368
368
  builderConnected: "Builder.io connected",
369
369
  builderConnectedToast: "Builder.io connected",
@@ -1537,7 +1537,7 @@ export default {
1537
1537
  time: "Time",
1538
1538
  storageSetupTitle: "Connect replay storage",
1539
1539
  storageSetupDescription:
1540
- "Session replay recordings need storage before chunks can be saved. Connect Builder.io for free-tier storage, or configure your own S3-compatible bucket.",
1540
+ "Session replay recordings need storage before chunks can be saved. Use Builder.io for free-tier storage, or configure your own S3-compatible bucket.",
1541
1541
  storageConnected: "Storage connected",
1542
1542
  connectBuilder: "Use Builder.io",
1543
1543
  configureS3: "Configure S3 storage",
@@ -3,4 +3,4 @@ type: added
3
3
  date: 2026-06-29
4
4
  ---
5
5
 
6
- Set up session replay storage from settings: connect Builder.io or add S3-compatible storage
6
+ Set up session replay storage from settings: use Builder.io or add S3-compatible storage
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-10-02
4
+ ---
5
+
6
+ Builder.io setup now explains free credits and the existing-account option.
@@ -6,7 +6,7 @@ import {
6
6
  } from "@agent-native/core/server";
7
7
 
8
8
  export const REPLAY_STORAGE_SETUP_REQUIRED_REASON =
9
- "Session replay storage is not connected yet. Connect Builder.io (free tier available) or configure S3-compatible storage to record replays.";
9
+ "Session replay storage is not connected yet. Use Builder.io (free tier available) or configure S3-compatible storage to record replays.";
10
10
 
11
11
  function appDatabaseUrl(): string {
12
12
  const appName = process.env.APP_NAME?.toUpperCase().replace(/-/g, "_");
@@ -364,7 +364,7 @@ optimistic action patterns. Do not add a parallel CRUD API route for an action.
364
364
  ## 4. Keep onboarding shared
365
365
 
366
366
  Use the framework's existing setup experience. The app should offer the normal
367
- “Connect Builder” and “Add your own keys” paths for AI setup. Do not create a
367
+ “Use Builder.io” and “Add your own keys” paths for AI setup. Do not create a
368
368
  second credential form or hardcode a provider key.
369
369
 
370
370
  In local-development instructions, add a brief note that a developer can set
@@ -388,7 +388,7 @@ plain `pnpm dev` has the right first-run behavior without extra flags:
388
388
  }
389
389
  ```
390
390
 
391
- Either value keeps the shared Connect Builder / Add your own keys choice
391
+ Either value keeps the shared Use Builder.io / Add your own keys choice
392
392
  visible; only `"off"` disables first-run onboarding entirely. Do not replace
393
393
  this with a local credential form or remove the shared onboarding.
394
394
 
@@ -626,7 +626,7 @@ const enUS = {
626
626
  "Get an email when a generation you started finishes or fails.",
627
627
  builderDescriptionReady: "Connected for managed generation.",
628
628
  builderDescriptionManaged:
629
- "Connect Builder for managed image generation and storage. Video generation is available when enabled for your space.",
629
+ "Use Builder.io for managed image generation and storage. Video generation is available when enabled for your space.",
630
630
  builderDescriptionDisabled:
631
631
  "Image generation is disabled here; Builder video may still be available.",
632
632
  builderLookupFailed:
@@ -3972,7 +3972,7 @@ export const messagesByLocale = {
3972
3972
  "此处已停用图像生成;Builder 视频生成功能仍可能可用。",
3973
3973
  builderLookupFailed: "无法检查 Builder 访问权限。重试以刷新连接状态。",
3974
3974
  builderDescriptionManaged:
3975
- "连接 Builder 即可使用托管图像生成和存储。若你的空间已启用视频生成功能,也可使用该功能。",
3975
+ "使用 Builder.io 即可使用托管图像生成和存储。若你的空间已启用视频生成功能,也可使用该功能。",
3976
3976
  builderDescriptionReady: "连接管理一代。",
3977
3977
  builderManaged:
3978
3978
  "Builder 管理图像生成。若你的空间已启用视频生成功能,即可使用。",
@@ -4818,7 +4818,7 @@ export const messagesByLocale = {
4818
4818
  builderLookupFailed:
4819
4819
  "No se pudo comprobar el acceso a Builder. Vuelve a intentarlo para actualizar el estado de la conexión.",
4820
4820
  builderDescriptionManaged:
4821
- "Conecta Builder para usar la generación y el almacenamiento de imágenes gestionados. La generación de vídeo está disponible si se habilita para tu espacio.",
4821
+ "Usa Builder.io para la generación y el almacenamiento de imágenes gestionados. La generación de vídeo está disponible si se habilita para tu espacio.",
4822
4822
  builderDescriptionReady: "Conectado para generación gestionada.",
4823
4823
  builderManaged:
4824
4824
  "Builder gestiona la generación de imágenes. La generación de vídeo está disponible si se habilita para tu espacio.",
@@ -5326,7 +5326,7 @@ export const messagesByLocale = {
5326
5326
  builderLookupFailed:
5327
5327
  "Impossible de vérifier l’accès à Builder. Réessayez pour actualiser l’état de la connexion.",
5328
5328
  builderDescriptionManaged:
5329
- "Connectez Builder pour gérer la génération et le stockage d’images. La génération vidéo est disponible si elle est activée pour votre espace.",
5329
+ "Utilisez Builder.io pour gérer la génération et le stockage d’images. La génération vidéo est disponible si elle est activée pour votre espace.",
5330
5330
  builderDescriptionReady: "Connecté pour une génération gérée.",
5331
5331
  builderManaged:
5332
5332
  "Builder gère la génération d’images. La génération vidéo est disponible si elle est activée pour votre espace.",
@@ -5816,7 +5816,7 @@ export const messagesByLocale = {
5816
5816
  "Erhalte eine E-Mail, wenn eine von dir gestartete Generierung fertig ist oder fehlschlägt.",
5817
5817
  builderDescriptionReady: "Für verwaltete Generierung verbunden.",
5818
5818
  builderDescriptionManaged:
5819
- "Verbinde Builder für verwaltete Bildgenerierung und Speicherung. Videogenerierung ist verfügbar, wenn sie für deinen Space aktiviert ist.",
5819
+ "Nutze Builder.io für verwaltete Bildgenerierung und Speicherung. Videogenerierung ist verfügbar, wenn sie für deinen Space aktiviert ist.",
5820
5820
  builderDescriptionDisabled:
5821
5821
  "Die Bildgenerierung ist hier deaktiviert; die Videogenerierung mit Builder kann weiterhin verfügbar sein.",
5822
5822
  builderLookupFailed:
@@ -6205,7 +6205,7 @@ export const messagesByLocale = {
6205
6205
  "開始した生成が完了または失敗したときにメールを受け取ります。",
6206
6206
  builderDescriptionReady: "管理された生成に接続済みです。",
6207
6207
  builderDescriptionManaged:
6208
- "Builder に接続すると、画像生成と保存を管理できます。動画生成はスペースで有効な場合に利用できます。",
6208
+ "Builder.io を使うと、画像生成と保存を管理できます。動画生成はスペースで有効な場合に利用できます。",
6209
6209
  builderDescriptionDisabled:
6210
6210
  "ここでは画像生成が無効です。Builder の動画生成は引き続き利用できる場合があります。",
6211
6211
  builderLookupFailed:
@@ -6590,7 +6590,7 @@ export const messagesByLocale = {
6590
6590
  "내가 시작한 생성이 완료되거나 실패하면 이메일을 받습니다.",
6591
6591
  builderDescriptionReady: "관리형 생성에 연결되었습니다.",
6592
6592
  builderDescriptionManaged:
6593
- "이미지 생성 및 저장을 관리하려면 Builder를 연결하세요. 동영상 생성은 워크스페이스에서 사용 설정된 경우 이용할 수 있습니다.",
6593
+ "이미지 생성 및 저장을 관리하려면 Builder.io를 사용하세요. 동영상 생성은 워크스페이스에서 사용 설정된 경우 이용할 수 있습니다.",
6594
6594
  builderDescriptionDisabled:
6595
6595
  "여기서는 이미지 생성이 비활성화되어 있습니다. Builder 동영상 생성은 계속 사용할 수 있을 수 있습니다.",
6596
6596
  builderLookupFailed:
@@ -6984,7 +6984,7 @@ export const messagesByLocale = {
6984
6984
  builderLookupFailed:
6985
6985
  "Não foi possível verificar o acesso ao Builder. Tente novamente para atualizar o estado da conexão.",
6986
6986
  builderDescriptionManaged:
6987
- "Conecte o Builder para gerenciar a geração e o armazenamento de imagens. A geração de vídeo fica disponível quando ativada para seu espaço.",
6987
+ "Use o Builder.io para gerenciar a geração e o armazenamento de imagens. A geração de vídeo fica disponível quando ativada para seu espaço.",
6988
6988
  builderDescriptionReady: "Conectado para geração gerenciada.",
6989
6989
  builderManaged:
6990
6990
  "O Builder gerencia a geração de imagens. A geração de vídeo fica disponível quando ativada para seu espaço.",
@@ -7467,7 +7467,7 @@ export const messagesByLocale = {
7467
7467
  "आपके द्वारा शुरू किया गया जनरेशन पूरा या विफल होने पर ईमेल पाएँ।",
7468
7468
  builderDescriptionReady: "Managed generation के लिए connected.",
7469
7469
  builderDescriptionManaged:
7470
- "प्रबंधित इमेज जनरेशन और स्टोरेज के लिए Builder कनेक्ट करें। वीडियो जनरेशन आपके स्पेस में सक्षम होने पर उपलब्ध है।",
7470
+ "प्रबंधित इमेज जनरेशन और स्टोरेज के लिए Builder.io का उपयोग करें। वीडियो जनरेशन आपके स्पेस में सक्षम होने पर उपलब्ध है।",
7471
7471
  builderDescriptionDisabled:
7472
7472
  "यहां छवि निर्माण बंद है; Builder वीडियो निर्माण फिर भी उपलब्ध हो सकता है।",
7473
7473
  builderLookupFailed:
@@ -7858,7 +7858,7 @@ export const messagesByLocale = {
7858
7858
  builderLookupFailed:
7859
7859
  "تعذّر التحقق من الوصول إلى Builder. أعد المحاولة لتحديث حالة الاتصال.",
7860
7860
  builderDescriptionManaged:
7861
- "اربط Builder لإدارة إنشاء الصور وتخزينها. يتوفر إنشاء الفيديو عند تفعيله لمساحتك.",
7861
+ "استخدم Builder.io لإدارة إنشاء الصور وتخزينها. يتوفر إنشاء الفيديو عند تفعيله لمساحتك.",
7862
7862
  builderDescriptionReady: "متصل للجيل المدار.",
7863
7863
  builderManaged:
7864
7864
  "يدير Builder إنشاء الصور. يتوفر إنشاء الفيديو عند تفعيله لمساحتك.",
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-10-02
4
+ ---
5
+
6
+ Builder.io setup copy now clarifies account use and available credits.
@@ -142,7 +142,7 @@ export async function getGeminiApiKey(): Promise<string> {
142
142
  builderConnectUrl: "/_agent-native/builder/connect",
143
143
  byokDocsUrl: "https://aistudio.google.com/apikey",
144
144
  message:
145
- "Asset generation is not configured. Open Settings and either click Connect Builder.io (free tier available) for images, or expand the Asset generation setup step and paste a Gemini API key for videos and image fallback.",
145
+ "Asset generation is not configured. Open Settings and either click Use Builder.io (free tier available) for images, or expand the Asset generation setup step and paste a Gemini API key for videos and image fallback.",
146
146
  });
147
147
  }
148
148
  return key;
@@ -161,7 +161,7 @@ async function getOpenAIImageApiKey(): Promise<string> {
161
161
  builderConnectUrl: "/_agent-native/builder/connect",
162
162
  byokDocsUrl: "https://platform.openai.com/api-keys",
163
163
  message:
164
- "Image generation is not configured. Open Settings and connect Builder.io (free tier available), or add an OpenAI or Gemini API key manually.",
164
+ "Image generation is not configured. Open Settings and use Builder.io (free tier available), or add an OpenAI or Gemini API key manually.",
165
165
  });
166
166
  }
167
167
  return key;
@@ -272,7 +272,7 @@ export async function generateWithBuilderImageApi(
272
272
  const builderAuth = await resolveBuilderGatewayAuth();
273
273
  if (!builderAuth) {
274
274
  throw new BuilderImageGenerationError(
275
- "Builder.io is not connected for managed image generation. Connect Builder.io (free tier available), or publish with Builder credits so the site is issued its own gateway credential.",
275
+ "Builder.io is not connected for managed image generation. Use Builder.io (free tier available), or publish with Builder credits so the site is issued its own gateway credential.",
276
276
  401,
277
277
  );
278
278
  }
@@ -735,7 +735,7 @@ function builderImageGenerationFallbackMessage(
735
735
  if (input?.mode === "edit") {
736
736
  switch (err.status) {
737
737
  case 401:
738
- return `Masked skeleton inpainting needs Builder.io connected or reconnected${err.detail ? ` (${err.detail})` : ""}. Open Settings and click Connect Builder.io (free tier available); manual OpenAI or Gemini fallback cannot pass image-edit masks.`;
738
+ return `Masked skeleton inpainting needs Builder.io connected or reconnected${err.detail ? ` (${err.detail})` : ""}. Open Settings and click Use Builder.io (free tier available); manual OpenAI or Gemini fallback cannot pass image-edit masks.`;
739
739
  case 402:
740
740
  return `Builder.io is connected, but this Builder space cannot use managed image generation credits${detail} Masked skeleton inpainting cannot use manual OpenAI or Gemini fallback because it must pass an image-edit mask.`;
741
741
  case 403:
@@ -751,7 +751,7 @@ function builderImageGenerationFallbackMessage(
751
751
  }
752
752
  switch (err.status) {
753
753
  case 401:
754
- return `Image generation needs Builder.io connected or reconnected${err.detail ? ` (${err.detail})` : ""}. Open Settings and click Connect Builder.io (free tier available), or expand the Asset generation setup step and add an OpenAI or Gemini API key as the manual fallback.`;
754
+ return `Image generation needs Builder.io connected or reconnected${err.detail ? ` (${err.detail})` : ""}. Open Settings and click Use Builder.io (free tier available), or expand the Asset generation setup step and add an OpenAI or Gemini API key as the manual fallback.`;
755
755
  case 402:
756
756
  return `Builder.io is connected, but this Builder space cannot use managed image generation credits${detail} Open Builder space settings or reconnect to a space with image-generation credits, or add an OpenAI or Gemini API key as the manual fallback.`;
757
757
  case 403:
@@ -972,7 +972,7 @@ async function generateWithManualImageProvider(
972
972
  builderConnectUrl: "/_agent-native/builder/connect",
973
973
  byokDocsUrl: "https://aistudio.google.com/apikey",
974
974
  message:
975
- "This preset attaches reference board images, which the manual OpenAI fallback cannot pass. Connect Builder.io managed generation (free tier available), or switch the preset to a Gemini model with a Gemini API key.",
975
+ "This preset attaches reference board images, which the manual OpenAI fallback cannot pass. Use Builder.io managed generation (free tier available), or switch the preset to a Gemini model with a Gemini API key.",
976
976
  });
977
977
  }
978
978
  if (await isGeminiImageGenerationConfigured()) {
@@ -984,7 +984,7 @@ async function generateWithManualImageProvider(
984
984
  builderConnectUrl: "/_agent-native/builder/connect",
985
985
  byokDocsUrl: "https://aistudio.google.com/apikey",
986
986
  message:
987
- "This preset attaches reference board images, which the manual OpenAI fallback cannot pass. Connect Builder.io managed generation (free tier available), or switch the preset to a Gemini model with a Gemini API key.",
987
+ "This preset attaches reference board images, which the manual OpenAI fallback cannot pass. Use Builder.io managed generation (free tier available), or switch the preset to a Gemini model with a Gemini API key.",
988
988
  });
989
989
  }
990
990
  if (input.intent === "restyle" || input.intent === "edit") {
@@ -1008,7 +1008,7 @@ export async function generateWithOpenAI(
1008
1008
  builderConnectUrl: "/_agent-native/builder/connect",
1009
1009
  byokDocsUrl: "https://aistudio.google.com/apikey",
1010
1010
  message:
1011
- "This preset attaches reference board images, which the manual OpenAI fallback cannot pass. Connect Builder.io managed generation (free tier available), or switch the preset to a Gemini model with a Gemini API key.",
1011
+ "This preset attaches reference board images, which the manual OpenAI fallback cannot pass. Use Builder.io managed generation (free tier available), or switch the preset to a Gemini model with a Gemini API key.",
1012
1012
  });
1013
1013
  }
1014
1014
  const startedAt = Date.now();
@@ -103,7 +103,7 @@ export async function putObject(input: {
103
103
 
104
104
  if (process.env.NODE_ENV === "production") {
105
105
  throw new Error(
106
- "Asset storage is not configured. Connect Builder.io (free tier available) in onboarding, set BUILDER_PRIVATE_KEY, or fill in the ASSETS_STORAGE_* secrets.",
106
+ "Asset storage is not configured. Use Builder.io (free tier available) in onboarding, set BUILDER_PRIVATE_KEY, or fill in the ASSETS_STORAGE_* secrets.",
107
107
  );
108
108
  }
109
109
  const localPath = path.join(LOCAL_ROOT, input.key);
@@ -42,15 +42,15 @@ export default async (nitroApp: any): Promise<void> => {
42
42
  required: true,
43
43
  title: "Image and video generation",
44
44
  description:
45
- "Connect Builder for managed image generation and video generation when enabled for your space, or add OpenAI/Gemini keys as manual fallbacks.",
45
+ "Use Builder.io for managed image generation and video generation when enabled for your space, or add OpenAI/Gemini keys as manual fallbacks.",
46
46
  methods: [
47
47
  {
48
48
  id: "builder",
49
49
  kind: "builder-cli-auth",
50
- label: "Connect Builder.io",
50
+ label: "Use Builder.io",
51
51
  description: builderImageGenerationEnabled
52
52
  ? "Recommended one-click setup for managed image generation and video generation when enabled for your space. Uses Builder credits and keeps provider keys out of this app."
53
- : "Managed image generation is disabled here. Connect Builder for video when your space supports it, or add Gemini/OpenAI keys for manual generation.",
53
+ : "Managed image generation is disabled here. Use Builder.io for video when your space supports it, or add Gemini/OpenAI keys for manual generation.",
54
54
  primary: true,
55
55
  badge: builderImageGenerationEnabled ? "recommended" : undefined,
56
56
  payload: { scope: "image-generation" },
@@ -364,7 +364,7 @@ optimistic action patterns. Do not add a parallel CRUD API route for an action.
364
364
  ## 4. Keep onboarding shared
365
365
 
366
366
  Use the framework's existing setup experience. The app should offer the normal
367
- “Connect Builder” and “Add your own keys” paths for AI setup. Do not create a
367
+ “Use Builder.io” and “Add your own keys” paths for AI setup. Do not create a
368
368
  second credential form or hardcode a provider key.
369
369
 
370
370
  In local-development instructions, add a brief note that a developer can set
@@ -388,7 +388,7 @@ plain `pnpm dev` has the right first-run behavior without extra flags:
388
388
  }
389
389
  ```
390
390
 
391
- Either value keeps the shared Connect Builder / Add your own keys choice
391
+ Either value keeps the shared Use Builder.io / Add your own keys choice
392
392
  visible; only `"off"` disables first-run onboarding entirely. Do not replace
393
393
  this with a local credential form or remove the shared onboarding.
394
394
 
@@ -55,7 +55,7 @@ export function brainPrivacyReadiness(
55
55
  warning:
56
56
  jevCredential === "unavailable"
57
57
  ? "The Jev credential lookup failed, so Brain is classifying with the approved model instead. Check JEV_API_KEY or the Builder connection."
58
- : "Jev is selected but no credential was found, so Brain is classifying with the approved model instead. Add JEV_API_KEY or connect Builder.",
58
+ : "Jev is selected but no credential was found, so Brain is classifying with the approved model instead. Add JEV_API_KEY or use Builder.io.",
59
59
  };
60
60
  }
61
61
  return {
@@ -64,7 +64,7 @@ export function brainPrivacyReadiness(
64
64
  warning:
65
65
  jevCredential === "unavailable"
66
66
  ? "The Jev credential lookup failed and no approved model is configured. Uncertain captures stay quarantined until a classifier is reachable."
67
- : "Jev is selected but no credential was found and no approved model is configured. Add JEV_API_KEY, connect Builder, or configure an approved model.",
67
+ : "Jev is selected but no credential was found and no approved model is configured. Add JEV_API_KEY, use Builder.io, or configure an approved model.",
68
68
  };
69
69
  }
70
70
 
@@ -364,7 +364,7 @@ optimistic action patterns. Do not add a parallel CRUD API route for an action.
364
364
  ## 4. Keep onboarding shared
365
365
 
366
366
  Use the framework's existing setup experience. The app should offer the normal
367
- “Connect Builder” and “Add your own keys” paths for AI setup. Do not create a
367
+ “Use Builder.io” and “Add your own keys” paths for AI setup. Do not create a
368
368
  second credential form or hardcode a provider key.
369
369
 
370
370
  In local-development instructions, add a brief note that a developer can set
@@ -388,7 +388,7 @@ plain `pnpm dev` has the right first-run behavior without extra flags:
388
388
  }
389
389
  ```
390
390
 
391
- Either value keeps the shared Connect Builder / Add your own keys choice
391
+ Either value keeps the shared Use Builder.io / Add your own keys choice
392
392
  visible; only `"off"` disables first-run onboarding entirely. Do not replace
393
393
  this with a local credential form or remove the shared onboarding.
394
394
 
@@ -235,7 +235,7 @@ export default {
235
235
  eventRulesAutomationLink: "For other actions, create an automation",
236
236
  eventRulesConnectJev: "Connect Jev to run invitation rules",
237
237
  eventRulesFreeBuilderOrApiKey: "Free with Builder.io, or add an API key.",
238
- eventRulesConnectBuilder: "Connect Builder.io",
238
+ eventRulesConnectBuilder: "Use Builder.io",
239
239
  eventRulesAddJevApiKey: "Add API key",
240
240
  eventRulesTabRules: "Rules",
241
241
  eventRulesHelpLabel: "About invitation rule prompts",
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-10-02
4
+ ---
5
+
6
+ Builder.io setup copy now clarifies account activation and sign-in.
@@ -364,7 +364,7 @@ optimistic action patterns. Do not add a parallel CRUD API route for an action.
364
364
  ## 4. Keep onboarding shared
365
365
 
366
366
  Use the framework's existing setup experience. The app should offer the normal
367
- “Connect Builder” and “Add your own keys” paths for AI setup. Do not create a
367
+ “Use Builder.io” and “Add your own keys” paths for AI setup. Do not create a
368
368
  second credential form or hardcode a provider key.
369
369
 
370
370
  In local-development instructions, add a brief note that a developer can set
@@ -388,7 +388,7 @@ plain `pnpm dev` has the right first-run behavior without extra flags:
388
388
  }
389
389
  ```
390
390
 
391
- Either value keeps the shared Connect Builder / Add your own keys choice
391
+ Either value keeps the shared Use Builder.io / Add your own keys choice
392
392
  visible; only `"off"` disables first-run onboarding entirely. Do not replace
393
393
  this with a local credential form or remove the shared onboarding.
394
394
 
@@ -364,7 +364,7 @@ optimistic action patterns. Do not add a parallel CRUD API route for an action.
364
364
  ## 4. Keep onboarding shared
365
365
 
366
366
  Use the framework's existing setup experience. The app should offer the normal
367
- “Connect Builder” and “Add your own keys” paths for AI setup. Do not create a
367
+ “Use Builder.io” and “Add your own keys” paths for AI setup. Do not create a
368
368
  second credential form or hardcode a provider key.
369
369
 
370
370
  In local-development instructions, add a brief note that a developer can set
@@ -388,7 +388,7 @@ plain `pnpm dev` has the right first-run behavior without extra flags:
388
388
  }
389
389
  ```
390
390
 
391
- Either value keeps the shared Connect Builder / Add your own keys choice
391
+ Either value keeps the shared Use Builder.io / Add your own keys choice
392
392
  visible; only `"off"` disables first-run onboarding entirely. Do not replace
393
393
  this with a local credential form or remove the shared onboarding.
394
394
 
@@ -120,7 +120,7 @@ from the command menu (Cmd+K → "What's new") or from Settings.
120
120
  - Clips settings are reorganized in the new Settings: General with Recordings and Meetings tabs, Notifications, and Slack link previews under Channels.
121
121
  - The account menu at the bottom of the sidebar shows your photo, name, and organization, and holds Settings, Usage, Get apps and extensions, and Log out
122
122
  - Video storage now uses the shared storage form, and Clear credentials asks before it removes your storage keys
123
- - Connect Builder storage by creating an account in one click.
123
+ - Use Builder storage by creating an account in one click.
124
124
  - Public clip embeds and meeting notes show richer link previews.
125
125
  - The no-comments sidebar gives viewers a concise reason to try Clips and a clear path to sign up.
126
126
  - Shared clips remember your sidebar choice and help new viewers understand why to sign up.
@@ -235,7 +235,7 @@ function buildCleanupConfigurationError({
235
235
  builderFailureMessage: string | null;
236
236
  }): FeatureNotConfiguredError {
237
237
  let message =
238
- "Transcript cleanup needs Builder.io Connect (free tier available) or a fallback AI key.";
238
+ "Use Builder.io (free credits available) or a fallback AI key for transcript cleanup.";
239
239
 
240
240
  if (builderConfigured && builderReturnedEmpty) {
241
241
  message =
@@ -184,14 +184,13 @@ export default defineAction({
184
184
  ownerParticipant.name = ownerName;
185
185
  }
186
186
 
187
- const visibility =
188
- args.visibility ??
189
- (await getDefaultRecordingVisibility(
187
+ try {
188
+ const visibility = await getDefaultRecordingVisibility(
190
189
  orgId,
191
190
  actionContext?.userEmail ?? ownerEmail,
192
- ));
191
+ args.visibility,
192
+ );
193
193
 
194
- try {
195
194
  await db.insert(schema.meetings).values({
196
195
  id,
197
196
  organizationId: orgId ?? null,
@@ -48,6 +48,9 @@ export function classifyInitialUploadFailure(error: unknown): {
48
48
  : typeof error === "string"
49
49
  ? error
50
50
  : "";
51
+ const isSignedUrlFailure = /builder\.io signed-url request failed/i.test(
52
+ message,
53
+ );
51
54
  const messageStatus = /\b(?:failed|failure|error)\s*\((\d{3})\)/i.exec(
52
55
  message,
53
56
  )?.[1];
@@ -64,11 +67,13 @@ export function classifyInitialUploadFailure(error: unknown): {
64
67
  ? details.failureStage
65
68
  : "multipart_start";
66
69
  const failureCode = normalizeRecordingFailureCode(details.failureCode);
70
+ // A nested signed-URL response does not mean the account needs reauthorization.
67
71
  const storageSetupRequired =
68
72
  failureCode === "storage_setup_required" ||
69
73
  details.errorCode === "builder_oauth_reauthorization_required" ||
70
74
  details.errorCode === "builder_credentials_rejected" ||
71
- /credentials?[^.\n]*(?:not configured|missing)|not connected|reconnect builder(?:\.io)?|scope mismatch|missing its space id/i.test(
75
+ (!isSignedUrlFailure && (httpStatus === 401 || httpStatus === 403)) ||
76
+ /credentials?[^.\n]*(?:not configured|missing)|not connected|(?:reconnect|use) builder(?:\.io)?|scope mismatch|missing its space id/i.test(
72
77
  message,
73
78
  );
74
79
 
@@ -114,9 +119,10 @@ export default defineAction({
114
119
  const { organizationId } = await requireOrganizationAccess(
115
120
  args.organizationId,
116
121
  );
117
- const defaultVisibility = await getDefaultRecordingVisibility(
122
+ const visibility = await getDefaultRecordingVisibility(
118
123
  organizationId,
119
124
  actionContext?.userEmail ?? ownerEmail,
125
+ args.visibility,
120
126
  );
121
127
 
122
128
  const spaceIds = await validateRecordingScope(db, {
@@ -144,7 +150,7 @@ export default defineAction({
144
150
  uploadLeaseExpiresAt: uploadLeaseExpiry(),
145
151
  hasAudio: args.hasAudio ?? true,
146
152
  hasCamera: args.hasCamera ?? false,
147
- visibility: args.visibility ?? defaultVisibility,
153
+ visibility,
148
154
  width: args.width ?? 0,
149
155
  height: args.height ?? 0,
150
156
  ownerEmail,
@@ -118,9 +118,10 @@ export default defineAction({
118
118
  const { organizationId } = await requireOrganizationAccess(
119
119
  args.organizationId,
120
120
  );
121
- const defaultVisibility = await getDefaultRecordingVisibility(
121
+ const visibility = await getDefaultRecordingVisibility(
122
122
  organizationId,
123
123
  actionContext?.userEmail ?? ownerEmail,
124
+ args.visibility,
124
125
  );
125
126
 
126
127
  // The same check a new recording gets: the folder has to be the
@@ -175,7 +176,7 @@ export default defineAction({
175
176
  videoSizeBytes: bytes.byteLength,
176
177
  hasAudio: false,
177
178
  hasCamera: false,
178
- visibility: args.visibility ?? defaultVisibility,
179
+ visibility,
179
180
  width: args.width,
180
181
  height: args.height,
181
182
  ownerEmail,
@@ -99,9 +99,9 @@ const ImportLoomRecordingSchema = z.object({
99
99
  });
100
100
 
101
101
  const LOOM_STORAGE_SETUP_REQUIRED_REASON =
102
- "Video storage is not connected yet. Connect Builder.io (free tier available) or configure S3-compatible storage, then retry this Loom import.";
102
+ "Video storage is not connected yet. Use Builder.io (free tier available) or configure S3-compatible storage, then retry this Loom import.";
103
103
  const DIRECT_VIDEO_STORAGE_SETUP_REQUIRED_REASON =
104
- "Video storage is not connected yet. Connect Builder.io (free tier available) or configure S3-compatible storage, then retry this import.";
104
+ "Video storage is not connected yet. Use Builder.io (free tier available) or configure S3-compatible storage, then retry this import.";
105
105
 
106
106
  function recordingDeepLink(recordingId: string): string {
107
107
  return buildDeepLink({
@@ -229,11 +229,6 @@ export default defineAction({
229
229
  const { organizationId } = await requireOrganizationAccess(
230
230
  existingRecording?.organizationId ?? args.organizationId,
231
231
  );
232
- const defaultVisibility = await getDefaultRecordingVisibility(
233
- organizationId,
234
- actionContext?.userEmail ?? ownerEmail,
235
- );
236
-
237
232
  const now = new Date().toISOString();
238
233
  const id = existingRecording?.id ?? nanoid();
239
234
  const createdAt = existingRecording?.createdAt ?? now;
@@ -259,7 +254,12 @@ export default defineAction({
259
254
  const height = boundedDimension(oembed?.height ?? oembed?.thumbnail_height);
260
255
  const folderId = args.folderId ?? existingRecording?.folderId ?? null;
261
256
  const visibility =
262
- args.visibility ?? existingRecording?.visibility ?? defaultVisibility;
257
+ args.visibility ??
258
+ existingRecording?.visibility ??
259
+ (await getDefaultRecordingVisibility(
260
+ organizationId,
261
+ actionContext?.userEmail ?? ownerEmail,
262
+ ));
263
263
  const titleSource = args.title
264
264
  ? "manual"
265
265
  : (existingRecording?.titleSource ?? "upload");
@@ -15,7 +15,7 @@ import { assertNativeRecordingMedia } from "./lib/native-media.js";
15
15
 
16
16
  const MAX_CAS_ATTEMPTS = 5;
17
17
  const THUMBNAIL_STORAGE_REQUIRED_REASON =
18
- "No object storage is connected. Connect Builder.io (free) or configure your own S3-compatible storage keys in Settings → File uploads.";
18
+ "No object storage is connected. Use Builder.io (free) or configure your own S3-compatible storage keys in Settings → File uploads.";
19
19
 
20
20
  export default defineAction({
21
21
  description:
@@ -97,9 +97,10 @@ export default defineAction({
97
97
  assertNativeRecordingMedia(source);
98
98
  }
99
99
  const organizationId = ordered[0].organizationId;
100
- const defaultVisibility = await getDefaultRecordingVisibility(
100
+ const visibility = await getDefaultRecordingVisibility(
101
101
  organizationId,
102
102
  actionContext?.userEmail ?? ownerEmail,
103
+ args.visibility,
103
104
  );
104
105
 
105
106
  const totalDuration =
@@ -143,7 +144,7 @@ export default defineAction({
143
144
  hasCamera: ordered.some((r) => Boolean(r.hasCamera)),
144
145
  editsJson: serializeEdits(edits),
145
146
  ownerEmail,
146
- visibility: args.visibility ?? defaultVisibility,
147
+ visibility,
147
148
  createdAt: now,
148
149
  updatedAt: now,
149
150
  thumbnailUrl: ordered[0].thumbnailUrl ?? null,
@@ -602,7 +602,8 @@ function isTranscriptionSetupNeeded(
602
602
  r.includes("credits exhausted") ||
603
603
  r.includes("rate limit") ||
604
604
  r.includes("rejected the api key") ||
605
- r.includes("connect builder")
605
+ r.includes("connect builder") ||
606
+ r.includes("use builder")
606
607
  );
607
608
  }
608
609
 
@@ -614,6 +615,7 @@ function isConnectedBuilderRetryable(
614
615
  return (
615
616
  r.includes("no transcription provider configured") ||
616
617
  r.includes("connect builder") ||
618
+ r.includes("use builder") ||
617
619
  r.includes("no transcription provider")
618
620
  );
619
621
  }
@@ -649,7 +651,8 @@ function friendlyTranscriptFailure(
649
651
  if (
650
652
  normalized.includes("api key") ||
651
653
  normalized.includes("not configured") ||
652
- normalized.includes("connect builder")
654
+ normalized.includes("connect builder") ||
655
+ normalized.includes("use builder")
653
656
  ) {
654
657
  return t("transcriptPanel.backupNotSetup");
655
658
  }