@agent-native/core 0.163.4 → 0.164.3
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.
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/app/components/agents/FeatureFlagsFleetPanel.tsx +78 -19
- package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +29 -0
- package/corpus/templates/analytics/app/lib/use-auto-focus-select.ts +4 -4
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +3 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +6 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +1 -2
- package/corpus/templates/analytics/app/routes/_index.tsx +3 -2
- package/corpus/templates/analytics/app/routes/adhoc.$id.tsx +7 -2
- package/corpus/templates/analytics/app/routes/dashboard.tsx +3 -2
- package/corpus/templates/analytics/app/routes/overview.tsx +3 -2
- package/corpus/templates/analytics/app/routes/traffic.tsx +3 -2
- package/corpus/templates/analytics/changelog/2026-08-18-verify-cross-app-feature-flag-changes.md +6 -0
- package/corpus/templates/analytics/netlify.toml +2 -0
- package/corpus/templates/analytics/server/lib/workspace-feature-flags.ts +196 -48
- package/corpus/templates/analytics/server/plugins/feature-flags.ts +5 -0
- package/corpus/templates/analytics/shared/feature-flags.ts +10 -0
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +5 -1
- package/corpus/templates/assets/app/routes/brand-kits._index.tsx +4 -1
- package/corpus/templates/assets/app/routes/libraries.tsx +4 -1
- package/corpus/templates/assets/app/routes/picker.tsx +4 -1
- package/corpus/templates/assets/netlify.toml +2 -0
- package/corpus/templates/brain/netlify.toml +2 -0
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +2 -1
- package/corpus/templates/calendar/changelog/2026-08-19-calendar-page-loads-stay-fast-after-idle-periods.md +6 -0
- package/corpus/templates/calendar/netlify.toml +2 -0
- package/corpus/templates/chat/netlify.toml +2 -0
- package/corpus/templates/clips/app/components/player/player-controls.tsx +3 -3
- package/corpus/templates/clips/app/components/player/reaction-emojis.ts +12 -0
- package/corpus/templates/clips/app/components/player/reactions-tray.tsx +90 -9
- package/corpus/templates/clips/app/components/player/scrubber.tsx +43 -10
- package/corpus/templates/clips/app/components/player/video-player.tsx +105 -15
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +1 -2
- package/corpus/templates/clips/app/routes/_app.wispr.tsx +2 -1
- package/corpus/templates/clips/app/routes/_index.tsx +7 -3
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +13 -8
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +15 -8
- package/corpus/templates/clips/netlify.toml +2 -0
- package/corpus/templates/clips/server/routes/[...page].head.ts +5 -0
- package/corpus/templates/content/netlify.toml +2 -0
- package/corpus/templates/design/.agents/skills/design-editor-architecture/SKILL.md +103 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +2 -1
- package/corpus/templates/design/AGENTS.md +3 -1
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +3 -2
- package/corpus/templates/design/app/components/design/editor/AgentNativeMenuMark.tsx +25 -0
- package/corpus/templates/design/app/components/design/editor/DesignBottomToolbar.tsx +411 -0
- package/corpus/templates/design/app/components/design/editor/DesignCollaborators.tsx +153 -0
- package/corpus/templates/design/app/components/design/editor/DesignWorkspaceRail.tsx +231 -0
- package/corpus/templates/design/app/components/design/editor/MakeRealDialog.tsx +223 -0
- package/corpus/templates/design/app/components/design/editor/PendingScreenDeletionDialog.tsx +58 -0
- package/corpus/templates/design/app/components/design/editor/PendingVisualStyleWarningDialog.tsx +56 -0
- package/corpus/templates/design/app/components/design/editor/ReadOnlyEditorPanel.tsx +23 -0
- package/corpus/templates/design/app/components/design/editor/SaveTemplateDialog.tsx +161 -0
- package/corpus/templates/design/app/components/design/editor/toolbar-controls.tsx +185 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +20913 -0
- package/corpus/templates/design/app/pages/design-editor/command-types.ts +120 -0
- package/corpus/templates/design/app/pages/design-editor/commands/README.md +193 -0
- package/corpus/templates/design/app/pages/design-editor/commands/add-auto-layout.ts +416 -0
- package/corpus/templates/design/app/pages/design-editor/commands/add-screen.ts +112 -0
- package/corpus/templates/design/app/pages/design-editor/commands/align-selection.ts +183 -0
- package/corpus/templates/design/app/pages/design-editor/commands/apply-design-editor-command.ts +243 -0
- package/corpus/templates/design/app/pages/design-editor/commands/apply-file-content-update.ts +236 -0
- package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +304 -0
- package/corpus/templates/design/app/pages/design-editor/commands/apply-pending-visual-styles-with-agent.ts +376 -0
- package/corpus/templates/design/app/pages/design-editor/commands/apply-to-source.ts +132 -0
- package/corpus/templates/design/app/pages/design-editor/commands/can-move-layer.ts +117 -0
- package/corpus/templates/design/app/pages/design-editor/commands/change-selected-z-index.ts +212 -0
- package/corpus/templates/design/app/pages/design-editor/commands/commit-relative-style-delta-to-selected-layers.ts +176 -0
- package/corpus/templates/design/app/pages/design-editor/commands/commit-styles-to-selected-layers.ts +175 -0
- package/corpus/templates/design/app/pages/design-editor/commands/commit-visual-styles.ts +710 -0
- package/corpus/templates/design/app/pages/design-editor/commands/confirm-make-real.ts +99 -0
- package/corpus/templates/design/app/pages/design-editor/commands/copy-as-figma-svg.ts +95 -0
- package/corpus/templates/design/app/pages/design-editor/commands/copy-selection.ts +156 -0
- package/corpus/templates/design/app/pages/design-editor/commands/create-primitive.ts +291 -0
- package/corpus/templates/design/app/pages/design-editor/commands/create-screen-frame.ts +131 -0
- package/corpus/templates/design/app/pages/design-editor/commands/cross-screen-element-drop.ts +577 -0
- package/corpus/templates/design/app/pages/design-editor/commands/delete-files.ts +364 -0
- package/corpus/templates/design/app/pages/design-editor/commands/delete-selection.ts +521 -0
- package/corpus/templates/design/app/pages/design-editor/commands/detach-instance-menu-action.ts +88 -0
- package/corpus/templates/design/app/pages/design-editor/commands/distribute-selection.ts +114 -0
- package/corpus/templates/design/app/pages/design-editor/commands/download-all-screens-pdf.ts +116 -0
- package/corpus/templates/design/app/pages/design-editor/commands/download-pdf.ts +103 -0
- package/corpus/templates/design/app/pages/design-editor/commands/download-svg.ts +159 -0
- package/corpus/templates/design/app/pages/design-editor/commands/duplicate-screen.ts +201 -0
- package/corpus/templates/design/app/pages/design-editor/commands/duplicate-selection.ts +279 -0
- package/corpus/templates/design/app/pages/design-editor/commands/editor-paste.ts +81 -0
- package/corpus/templates/design/app/pages/design-editor/commands/enter-hotkey.ts +155 -0
- package/corpus/templates/design/app/pages/design-editor/commands/enter-single-screen.ts +168 -0
- package/corpus/templates/design/app/pages/design-editor/commands/escape-hotkey.ts +212 -0
- package/corpus/templates/design/app/pages/design-editor/commands/frame-selection.ts +119 -0
- package/corpus/templates/design/app/pages/design-editor/commands/geometry-commit.ts +169 -0
- package/corpus/templates/design/app/pages/design-editor/commands/get-selected-layer-snapshots.ts +177 -0
- package/corpus/templates/design/app/pages/design-editor/commands/group-selection.ts +127 -0
- package/corpus/templates/design/app/pages/design-editor/commands/iframe-context-menu.ts +121 -0
- package/corpus/templates/design/app/pages/design-editor/commands/import-figma-clipboard-into-design.ts +119 -0
- package/corpus/templates/design/app/pages/design-editor/commands/layer-marquee-selection-change.ts +163 -0
- package/corpus/templates/design/app/pages/design-editor/commands/layer-move-to-screen.ts +331 -0
- package/corpus/templates/design/app/pages/design-editor/commands/layer-move.ts +517 -0
- package/corpus/templates/design/app/pages/design-editor/commands/layer-rename.ts +247 -0
- package/corpus/templates/design/app/pages/design-editor/commands/layer-selection-change.ts +161 -0
- package/corpus/templates/design/app/pages/design-editor/commands/mode-change.ts +122 -0
- package/corpus/templates/design/app/pages/design-editor/commands/nudge-selection.ts +213 -0
- package/corpus/templates/design/app/pages/design-editor/commands/overview-primitive-reparent.ts +318 -0
- package/corpus/templates/design/app/pages/design-editor/commands/paste-copied-screens.ts +114 -0
- package/corpus/templates/design/app/pages/design-editor/commands/paste-over-selection.ts +70 -0
- package/corpus/templates/design/app/pages/design-editor/commands/paste-selection.ts +436 -0
- package/corpus/templates/design/app/pages/design-editor/commands/paste-to-replace.ts +135 -0
- package/corpus/templates/design/app/pages/design-editor/commands/pasted-image-files.ts +209 -0
- package/corpus/templates/design/app/pages/design-editor/commands/persist-frame-geometry-save.ts +113 -0
- package/corpus/templates/design/app/pages/design-editor/commands/persist-tweak-save.ts +160 -0
- package/corpus/templates/design/app/pages/design-editor/commands/primitive-created.ts +168 -0
- package/corpus/templates/design/app/pages/design-editor/commands/record-pending-live-layer-state-edit.ts +149 -0
- package/corpus/templates/design/app/pages/design-editor/commands/record-pending-live-structure-edit.ts +200 -0
- package/corpus/templates/design/app/pages/design-editor/commands/record-pending-live-text-edit.ts +152 -0
- package/corpus/templates/design/app/pages/design-editor/commands/record-pending-visual-style-edit.ts +247 -0
- package/corpus/templates/design/app/pages/design-editor/commands/redo.ts +1086 -0
- package/corpus/templates/design/app/pages/design-editor/commands/render-png-blob.ts +200 -0
- package/corpus/templates/design/app/pages/design-editor/commands/save-file-content.ts +207 -0
- package/corpus/templates/design/app/pages/design-editor/commands/screen-element-select.ts +262 -0
- package/corpus/templates/design/app/pages/design-editor/commands/screen-text-content-change.ts +216 -0
- package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-duplicate-change.ts +108 -0
- package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-structure-change.ts +280 -0
- package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-style-change.ts +151 -0
- package/corpus/templates/design/app/pages/design-editor/commands/send-overview-annotations.ts +88 -0
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-move-semantic-handoff.ts +122 -0
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-semantic-handoff.ts +143 -0
- package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-state-semantic-handoff.ts +115 -0
- package/corpus/templates/design/app/pages/design-editor/commands/start-retry-generation.ts +152 -0
- package/corpus/templates/design/app/pages/design-editor/commands/start-sidebar-resize.ts +99 -0
- package/corpus/templates/design/app/pages/design-editor/commands/style-change.ts +152 -0
- package/corpus/templates/design/app/pages/design-editor/commands/styles-change.ts +155 -0
- package/corpus/templates/design/app/pages/design-editor/commands/suggest-auto-layout.ts +125 -0
- package/corpus/templates/design/app/pages/design-editor/commands/text-content-change.ts +201 -0
- package/corpus/templates/design/app/pages/design-editor/commands/tidy-up.ts +123 -0
- package/corpus/templates/design/app/pages/design-editor/commands/toggle-layer-hidden.ts +167 -0
- package/corpus/templates/design/app/pages/design-editor/commands/toggle-layer-locked.ts +175 -0
- package/corpus/templates/design/app/pages/design-editor/commands/toggle-motion-keyframe.ts +99 -0
- package/corpus/templates/design/app/pages/design-editor/commands/tweak-prompt-submit.ts +84 -0
- package/corpus/templates/design/app/pages/design-editor/commands/undo.ts +906 -0
- package/corpus/templates/design/app/pages/design-editor/commands/ungroup-selection.ts +170 -0
- package/corpus/templates/design/app/pages/design-editor/commands/visual-duplicate-change.ts +119 -0
- package/corpus/templates/design/app/pages/design-editor/commands/visual-structure-change.ts +274 -0
- package/corpus/templates/design/app/pages/design-editor/commands/write-frame-geometry-snapshot.ts +99 -0
- package/corpus/templates/design/app/pages/design-editor/derive/design-breakpoints.ts +56 -0
- package/corpus/templates/design/app/pages/design-editor/derive/overview-screens.ts +146 -0
- package/corpus/templates/design/app/pages/design-editor/domains/use-tweaks.ts +326 -0
- package/corpus/templates/design/app/pages/design-editor/editor-constants.ts +54 -0
- package/corpus/templates/design/app/pages/design-editor/editor-helpers.ts +183 -0
- package/corpus/templates/design/app/pages/design-editor/effects/adopt-db-file-content.ts +270 -0
- package/corpus/templates/design/app/pages/design-editor/effects/mirror-selection-to-agent-chat.ts +134 -0
- package/corpus/templates/design/app/pages/design-editor/effects/motion-autosave.ts +335 -0
- package/corpus/templates/design/app/pages/design-editor/effects/observe-collab-text.ts +183 -0
- package/corpus/templates/design/app/pages/design-editor/effects/publish-agent-selection-context.ts +252 -0
- package/corpus/templates/design/app/pages/design-editor/effects/resume-pending-generation.ts +178 -0
- package/corpus/templates/design/app/pages/design-editor/effects/seed-collab-content.ts +157 -0
- package/corpus/templates/design/app/pages/design-editor/preview-html.ts +19 -0
- package/corpus/templates/design/app/routes/examples.tsx +2 -1
- package/corpus/templates/design/netlify.toml +2 -0
- package/corpus/templates/design/shared/board-file.ts +2 -1
- package/corpus/templates/dispatch/netlify.toml +2 -0
- package/corpus/templates/forms/app/routes/_index.tsx +3 -2
- package/corpus/templates/forms/netlify.toml +2 -0
- package/corpus/templates/mail/app/routes/_index.tsx +3 -2
- package/corpus/templates/mail/netlify.toml +2 -0
- package/corpus/templates/plan/netlify.toml +2 -0
- package/corpus/templates/slides/netlify.toml +2 -0
- package/corpus/templates/tasks/app/routes/_index.tsx +2 -1
- package/dist/agent/engine/builder-engine.d.ts +6 -4
- package/dist/agent/engine/builder-engine.js +91 -26
- package/dist/agent/engine/registry.js +16 -0
- package/dist/cli/code-agent-agent-tools.d.ts +2 -0
- package/dist/cli/code-agent-agent-tools.js +188 -0
- package/dist/cli/code-agent-collaboration.d.ts +34 -0
- package/dist/cli/code-agent-collaboration.js +104 -0
- package/dist/cli/code-agent-executor.js +6 -0
- package/dist/cli/code-agent-schedules.d.ts +54 -0
- package/dist/cli/code-agent-schedules.js +198 -0
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/ConnectBuilderCard.js +5 -2
- package/dist/client/EnvironmentBadge.js +6 -5
- package/dist/client/chat/run-recovery.js +3 -2
- package/dist/client/chat/tool-call-display.js +2 -3
- package/dist/client/components/CodeRequiredDialog.js +4 -2
- package/dist/client/i18n.js +5 -4
- package/dist/client/settings/SettingsPanel.js +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +6 -1
- package/dist/client/settings/useBuilderStatus.js +22 -33
- package/dist/client/transcription/BuilderTranscriptionCta.js +1 -1
- package/dist/code-agents/index.d.ts +2 -0
- package/dist/code-agents/index.js +2 -0
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.js +10 -4
- package/dist/localization/shared.d.ts +2 -0
- package/dist/localization/shared.js +5 -0
- package/dist/mcp-client/oauth-client.d.ts +1 -0
- package/dist/mcp-client/oauth-client.js +50 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +1 -1
- package/dist/provider-api/actions/provider-api.d.ts +2 -2
- package/dist/server/auth-marketing-locales.d.ts +7 -0
- package/dist/server/auth-marketing-locales.js +1322 -0
- package/dist/server/auth-marketing.d.ts +1 -0
- package/dist/server/auth-marketing.js +35 -6
- package/dist/server/auth.js +4 -17
- package/dist/server/builder-browser.d.ts +22 -0
- package/dist/server/builder-browser.js +77 -1
- package/dist/server/builder-oauth.d.ts +50 -0
- package/dist/server/builder-oauth.js +263 -0
- package/dist/server/core-routes-plugin.d.ts +11 -0
- package/dist/server/core-routes-plugin.js +291 -415
- package/dist/server/credential-provider.d.ts +1 -1
- package/dist/server/credential-provider.js +1 -1
- package/dist/server/csrf.js +2 -2
- package/dist/server/onboarding-html.js +52 -120
- package/dist/server/ssr-handler.js +13 -4
- package/dist/settings/store.d.ts +9 -0
- package/dist/settings/store.js +19 -0
- package/dist/shared/cache-control.d.ts +22 -0
- package/dist/shared/cache-control.js +25 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/templates/chat/netlify.toml +2 -0
- package/docs/content/deployment.mdx +2 -0
- package/docs/content/multi-app-workspace.mdx +1 -1
- package/package.json +2 -2
- package/src/templates/chat/netlify.toml +2 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* directly. That way the same feature can work in three modes:
|
|
8
8
|
*
|
|
9
9
|
* 1. User set their own key in .env → use it directly
|
|
10
|
-
* 2. User connected Builder via
|
|
10
|
+
* 2. User connected Builder via OAuth → authorize managed Builder requests
|
|
11
11
|
* 3. Neither → throw FeatureNotConfigured
|
|
12
12
|
*
|
|
13
13
|
* Templates catch FeatureNotConfigured and show a "Connect Builder (1 click) /
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* directly. That way the same feature can work in three modes:
|
|
8
8
|
*
|
|
9
9
|
* 1. User set their own key in .env → use it directly
|
|
10
|
-
* 2. User connected Builder via
|
|
10
|
+
* 2. User connected Builder via OAuth → authorize managed Builder requests
|
|
11
11
|
* 3. Neither → throw FeatureNotConfigured
|
|
12
12
|
*
|
|
13
13
|
* Templates catch FeatureNotConfigured and show a "Connect Builder (1 click) /
|
package/dist/server/csrf.js
CHANGED
|
@@ -99,8 +99,8 @@ const CSRF_ALLOWLIST_PREFIXES = [
|
|
|
99
99
|
// state token. Each callback handler is responsible for its own CSRF
|
|
100
100
|
// check (signed state tokens).
|
|
101
101
|
"/oauth/",
|
|
102
|
-
// Builder's
|
|
103
|
-
//
|
|
102
|
+
// Builder's OAuth callback is a top-level GET whose route validates OAuth
|
|
103
|
+
// state and the signed-in owner before exchanging the code.
|
|
104
104
|
"/builder/callback",
|
|
105
105
|
];
|
|
106
106
|
const STATE_CHANGING_METHODS = new Set(["POST", "PUT", "PATCH", "DELETE"]);
|
|
@@ -8,14 +8,15 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { getAppConfig } from "../app-config/index.js";
|
|
10
10
|
import { getLocaleInitScript } from "../localization/server.js";
|
|
11
|
-
import { DEFAULT_LOCALE, LOCALE_METADATA, LOCALE_STORAGE_KEY, SUPPORTED_LOCALES, } from "../localization/shared.js";
|
|
11
|
+
import { DEFAULT_LOCALE, LOCALE_METADATA, LOCALE_STORAGE_KEY, SUPPORTED_LOCALES, localeDisplayName, } from "../localization/shared.js";
|
|
12
12
|
import { NATIVE_AUTH_COPY } from "../shared/auth-copy.js";
|
|
13
13
|
import { docsUrl } from "../shared/docs-url.js";
|
|
14
14
|
import { PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, } from "../shared/password-policy.js";
|
|
15
15
|
import { signInJourneyInlineScript } from "../shared/sign-in-journey.js";
|
|
16
16
|
import { AGENT_NATIVE_SOCIAL_IMAGE_ALT, AGENT_NATIVE_SOCIAL_IMAGE_HEIGHT, AGENT_NATIVE_SOCIAL_IMAGE_PATH, AGENT_NATIVE_SOCIAL_IMAGE_TYPE, AGENT_NATIVE_SOCIAL_IMAGE_WIDTH, withAgentNativeSocialImageCacheBuster, } from "../shared/social-meta.js";
|
|
17
17
|
import { normalizeAppBasePath } from "./app-base-path.js";
|
|
18
|
-
import {
|
|
18
|
+
import { AUTH_MARKETING_LOCALE_COPY, } from "./auth-marketing-locales.js";
|
|
19
|
+
import { BUILT_IN_AUTH_MARKETING, resolveBuiltInAuthMarketing, resolveBuiltInAuthMarketingSlug, } from "./auth-marketing.js";
|
|
19
20
|
import { resolveGoogleAuthMode, } from "./google-auth-mode.js";
|
|
20
21
|
import { hasGoogleSignInCredentials } from "./google-oauth-credentials.js";
|
|
21
22
|
import { identitySsoLoginButtonHtml } from "./identity-sso-store.js";
|
|
@@ -876,114 +877,27 @@ const AUTH_LOCALE_COPY = {
|
|
|
876
877
|
},
|
|
877
878
|
};
|
|
878
879
|
const defaultAuthCopy = AUTH_LOCALE_COPY[DEFAULT_LOCALE];
|
|
879
|
-
|
|
880
|
-
"zh-CN": {
|
|
881
|
-
forms: {
|
|
882
|
-
tagline: "你的 AI 代理与你一起构建、发布和分析表单。",
|
|
883
|
-
features: [
|
|
884
|
-
"用一句话创建完整表单",
|
|
885
|
-
"即时发布,生成可分享链接和验证码",
|
|
886
|
-
"按需获取回复摘要、导出和趋势分析",
|
|
887
|
-
],
|
|
888
|
-
},
|
|
889
|
-
},
|
|
890
|
-
"zh-TW": {
|
|
891
|
-
forms: {
|
|
892
|
-
tagline: "你的 AI 代理會和你一起建立、發布與分析表單。",
|
|
893
|
-
features: [
|
|
894
|
-
"用一句話建立完整表單",
|
|
895
|
-
"立即發布,產生可分享連結與驗證碼",
|
|
896
|
-
"依需求取得回覆摘要、匯出與趨勢分析",
|
|
897
|
-
],
|
|
898
|
-
},
|
|
899
|
-
},
|
|
900
|
-
"es-ES": {
|
|
901
|
-
forms: {
|
|
902
|
-
tagline: "Tu agente de IA crea, publica y analiza formularios contigo.",
|
|
903
|
-
features: [
|
|
904
|
-
"Crea formularios completos con una sola frase",
|
|
905
|
-
"Publicación instantánea con enlaces compartibles y captcha",
|
|
906
|
-
"Resúmenes de respuestas, exportaciones y análisis de tendencias al instante",
|
|
907
|
-
],
|
|
908
|
-
},
|
|
909
|
-
},
|
|
910
|
-
"fr-FR": {
|
|
911
|
-
forms: {
|
|
912
|
-
tagline: "Votre agent IA crée, publie et analyse des formulaires avec vous.",
|
|
913
|
-
features: [
|
|
914
|
-
"Créez des formulaires complets à partir d'une seule phrase",
|
|
915
|
-
"Publication instantanée avec liens partageables et captcha",
|
|
916
|
-
"Résumés de réponses, exports et analyse des tendances à la demande",
|
|
917
|
-
],
|
|
918
|
-
},
|
|
919
|
-
},
|
|
920
|
-
"de-DE": {
|
|
921
|
-
forms: {
|
|
922
|
-
tagline: "Dein KI-Agent erstellt, veröffentlicht und analysiert Formulare mit dir.",
|
|
923
|
-
features: [
|
|
924
|
-
"Erstelle vollständige Formulare aus einem einzigen Satz",
|
|
925
|
-
"Sofortige Veröffentlichung mit teilbaren Links und Captcha",
|
|
926
|
-
"Antwortzusammenfassungen, Exporte und Trendanalysen auf Abruf",
|
|
927
|
-
],
|
|
928
|
-
},
|
|
929
|
-
},
|
|
930
|
-
"ja-JP": {
|
|
931
|
-
forms: {
|
|
932
|
-
tagline: "AI エージェントがフォームの作成、公開、分析を一緒に進めます。",
|
|
933
|
-
features: [
|
|
934
|
-
"一文から完全なフォームを作成",
|
|
935
|
-
"共有リンクと CAPTCHA 付きで即時公開",
|
|
936
|
-
"回答の要約、エクスポート、トレンド分析を必要なときに実行",
|
|
937
|
-
],
|
|
938
|
-
},
|
|
939
|
-
},
|
|
940
|
-
"ko-KR": {
|
|
941
|
-
forms: {
|
|
942
|
-
tagline: "AI 에이전트가 양식 생성, 게시, 분석을 함께 도와줍니다.",
|
|
943
|
-
features: [
|
|
944
|
-
"한 문장으로 완성된 양식 만들기",
|
|
945
|
-
"공유 링크와 captcha로 즉시 게시",
|
|
946
|
-
"응답 요약, 내보내기, 추세 분석을 필요할 때 실행",
|
|
947
|
-
],
|
|
948
|
-
},
|
|
949
|
-
},
|
|
950
|
-
"pt-BR": {
|
|
951
|
-
forms: {
|
|
952
|
-
tagline: "Seu agente de IA cria, publica e analisa formulários junto com você.",
|
|
953
|
-
features: [
|
|
954
|
-
"Crie formulários completos a partir de uma única frase",
|
|
955
|
-
"Publicação instantânea com links compartilháveis e captcha",
|
|
956
|
-
"Resumos de respostas, exportações e análise de tendências sob demanda",
|
|
957
|
-
],
|
|
958
|
-
},
|
|
959
|
-
},
|
|
960
|
-
"hi-IN": {
|
|
961
|
-
forms: {
|
|
962
|
-
tagline: "आपका AI एजेंट आपके साथ फ़ॉर्म बनाता, प्रकाशित करता और उनका विश्लेषण करता है।",
|
|
963
|
-
features: [
|
|
964
|
-
"एक वाक्य से पूरे फ़ॉर्म बनाएं",
|
|
965
|
-
"शेयर करने योग्य लिंक और captcha के साथ तुरंत प्रकाशित करें",
|
|
966
|
-
"ज़रूरत पड़ने पर प्रतिक्रिया सारांश, exports और trend analysis पाएं",
|
|
967
|
-
],
|
|
968
|
-
},
|
|
969
|
-
},
|
|
970
|
-
"ar-SA": {
|
|
971
|
-
forms: {
|
|
972
|
-
tagline: "يساعدك وكيل الذكاء الاصطناعي على إنشاء النماذج ونشرها وتحليلها.",
|
|
973
|
-
features: [
|
|
974
|
-
"أنشئ نماذج كاملة من جملة واحدة",
|
|
975
|
-
"نشر فوري مع روابط قابلة للمشاركة وcaptcha",
|
|
976
|
-
"ملخصات للإجابات وتصدير وتحليل اتجاهات عند الطلب",
|
|
977
|
-
],
|
|
978
|
-
},
|
|
979
|
-
},
|
|
980
|
-
};
|
|
981
|
-
function resolveBuiltInMarketingSlug(marketing) {
|
|
880
|
+
function resolveBuiltInMarketingSlug(marketing, opts = {}) {
|
|
982
881
|
if (!marketing)
|
|
983
882
|
return undefined;
|
|
883
|
+
const matchesBuiltInMarketing = (builtIn) => marketing.appName === builtIn.appName &&
|
|
884
|
+
marketing.tagline === builtIn.tagline &&
|
|
885
|
+
marketing.description === builtIn.description &&
|
|
886
|
+
JSON.stringify(marketing.features ?? []) ===
|
|
887
|
+
JSON.stringify(builtIn.features ?? []) &&
|
|
888
|
+
JSON.stringify(marketing.signupLocalModeNote ?? null) ===
|
|
889
|
+
JSON.stringify(builtIn.signupLocalModeNote ?? null);
|
|
890
|
+
const requestSlug = resolveBuiltInAuthMarketingSlug(opts);
|
|
891
|
+
if (requestSlug) {
|
|
892
|
+
const builtIn = BUILT_IN_AUTH_MARKETING[requestSlug];
|
|
893
|
+
if (builtIn && matchesBuiltInMarketing(builtIn))
|
|
894
|
+
return requestSlug;
|
|
895
|
+
}
|
|
984
896
|
for (const [slug, builtIn] of Object.entries(BUILT_IN_AUTH_MARKETING)) {
|
|
985
|
-
|
|
986
|
-
|
|
897
|
+
// Caller-supplied marketing can reuse a built-in app name. Only an exact
|
|
898
|
+
// content match may claim a slug, or localized copy would overwrite the
|
|
899
|
+
// custom description/features.
|
|
900
|
+
if (matchesBuiltInMarketing(builtIn)) {
|
|
987
901
|
return slug;
|
|
988
902
|
}
|
|
989
903
|
}
|
|
@@ -1041,7 +955,10 @@ export function getOnboardingHtml(opts = {}) {
|
|
|
1041
955
|
requestPath: opts.requestPath,
|
|
1042
956
|
});
|
|
1043
957
|
const hasMarketing = !!marketing && !simplifiedAuth;
|
|
1044
|
-
const marketingSlug = resolveBuiltInMarketingSlug(marketing
|
|
958
|
+
const marketingSlug = resolveBuiltInMarketingSlug(marketing, {
|
|
959
|
+
requestHost: opts.requestHost,
|
|
960
|
+
requestPath: opts.requestPath,
|
|
961
|
+
});
|
|
1045
962
|
const defaultMarketingCopy = marketing
|
|
1046
963
|
? {
|
|
1047
964
|
tagline: marketing.tagline,
|
|
@@ -1049,6 +966,14 @@ export function getOnboardingHtml(opts = {}) {
|
|
|
1049
966
|
features: marketing.features,
|
|
1050
967
|
}
|
|
1051
968
|
: undefined;
|
|
969
|
+
const localizedMarketingCopy = {};
|
|
970
|
+
if (marketingSlug) {
|
|
971
|
+
for (const [locale, copyBySlug] of Object.entries(AUTH_MARKETING_LOCALE_COPY)) {
|
|
972
|
+
const copy = copyBySlug?.[marketingSlug];
|
|
973
|
+
if (copy)
|
|
974
|
+
localizedMarketingCopy[locale] = copy;
|
|
975
|
+
}
|
|
976
|
+
}
|
|
1052
977
|
const signupLocalModeNote = isAgentNativeHostedHost(opts.requestHost) &&
|
|
1053
978
|
marketing?.signupLocalModeNote?.command.trim()
|
|
1054
979
|
? {
|
|
@@ -1076,13 +1001,10 @@ export function getOnboardingHtml(opts = {}) {
|
|
|
1076
1001
|
const localeMenuItemsHtml = [
|
|
1077
1002
|
` <button type="button" class="locale-menu-item" role="menuitemradio" aria-checked="false" data-locale-value="system">
|
|
1078
1003
|
<span class="locale-menu-check" aria-hidden="true">✓</span>
|
|
1079
|
-
<span
|
|
1004
|
+
<span data-system-language>${esc(t("systemLanguage"))}</span>
|
|
1080
1005
|
</button>`,
|
|
1081
1006
|
...SUPPORTED_LOCALES.map((locale) => {
|
|
1082
|
-
const
|
|
1083
|
-
const label = metadata.nativeName === metadata.englishName
|
|
1084
|
-
? `${metadata.nativeName} (${metadata.code})`
|
|
1085
|
-
: `${metadata.nativeName} (${metadata.englishName})`;
|
|
1007
|
+
const label = localeDisplayName(locale);
|
|
1086
1008
|
return ` <button type="button" class="locale-menu-item" role="menuitemradio" aria-checked="false" data-locale-value="${esc(locale)}">
|
|
1087
1009
|
<span class="locale-menu-check" aria-hidden="true">✓</span>
|
|
1088
1010
|
<span>${esc(label)}</span>
|
|
@@ -2184,7 +2106,7 @@ ${signInJourneyInlineScript()}
|
|
|
2184
2106
|
var __AN_AUTH_HAS_MARKETING = ${JSON.stringify(hasMarketing)};
|
|
2185
2107
|
var __AN_AUTH_MARKETING_SLUG = ${JSON.stringify(marketingSlug ?? "")};
|
|
2186
2108
|
var __AN_AUTH_MARKETING_DEFAULT = ${JSON.stringify(defaultMarketingCopy ?? {})};
|
|
2187
|
-
var __AN_AUTH_MARKETING_LOCALES = ${JSON.stringify(
|
|
2109
|
+
var __AN_AUTH_MARKETING_LOCALES = ${JSON.stringify(localizedMarketingCopy)};
|
|
2188
2110
|
var __anAuthLocale = __AN_AUTH_DEFAULT_LOCALE;
|
|
2189
2111
|
var __anAuthLocalePreference = 'system';
|
|
2190
2112
|
var __AN_AUTH_MODE = ${JSON.stringify(authMode)};
|
|
@@ -2229,11 +2151,7 @@ ${signInJourneyInlineScript()}
|
|
|
2229
2151
|
} catch(e) {}
|
|
2230
2152
|
return [];
|
|
2231
2153
|
}
|
|
2232
|
-
function
|
|
2233
|
-
var normalizedPreference = __anNormalizeAuthLocalePreference(preference) || 'system';
|
|
2234
|
-
if (normalizedPreference !== 'system') return normalizedPreference;
|
|
2235
|
-
var rootLocale = __anNormalizeAuthLocale(document.documentElement.getAttribute('data-locale'));
|
|
2236
|
-
if (rootLocale) return rootLocale;
|
|
2154
|
+
function __anResolveAuthSystemLocale() {
|
|
2237
2155
|
var locales = __anBrowserAuthLocales();
|
|
2238
2156
|
for (var i = 0; i < locales.length; i++) {
|
|
2239
2157
|
var match = __anNormalizeAuthLocale(locales[i]);
|
|
@@ -2241,6 +2159,19 @@ ${signInJourneyInlineScript()}
|
|
|
2241
2159
|
}
|
|
2242
2160
|
return __AN_AUTH_DEFAULT_LOCALE;
|
|
2243
2161
|
}
|
|
2162
|
+
function __anResolveAuthLocale(preference) {
|
|
2163
|
+
var normalizedPreference = __anNormalizeAuthLocalePreference(preference) || 'system';
|
|
2164
|
+
return normalizedPreference === 'system'
|
|
2165
|
+
? __anResolveAuthSystemLocale()
|
|
2166
|
+
: normalizedPreference;
|
|
2167
|
+
}
|
|
2168
|
+
function __anApplyAuthSystemLanguage() {
|
|
2169
|
+
var systemLanguage = document.querySelector('[data-system-language]');
|
|
2170
|
+
if (!systemLanguage) return;
|
|
2171
|
+
var systemLocale = __anResolveAuthSystemLocale();
|
|
2172
|
+
var localized = __AN_AUTH_LOCALES[systemLocale] || __AN_AUTH_LOCALES[__AN_AUTH_DEFAULT_LOCALE] || {};
|
|
2173
|
+
systemLanguage.textContent = localized.systemLanguage || 'System';
|
|
2174
|
+
}
|
|
2244
2175
|
function __anT(key) {
|
|
2245
2176
|
var localized = __AN_AUTH_LOCALES[__anAuthLocale] || __AN_AUTH_LOCALES[__AN_AUTH_DEFAULT_LOCALE] || {};
|
|
2246
2177
|
var fallback = __AN_AUTH_LOCALES[__AN_AUTH_DEFAULT_LOCALE] || {};
|
|
@@ -2293,7 +2224,7 @@ ${signInJourneyInlineScript()}
|
|
|
2293
2224
|
}
|
|
2294
2225
|
function __anMarketingCopy() {
|
|
2295
2226
|
if (!__AN_AUTH_MARKETING_SLUG) return __AN_AUTH_MARKETING_DEFAULT || {};
|
|
2296
|
-
var localeMarketing =
|
|
2227
|
+
var localeMarketing = __AN_AUTH_MARKETING_LOCALES[__anAuthLocale] || {};
|
|
2297
2228
|
return {
|
|
2298
2229
|
tagline: localeMarketing.tagline || __AN_AUTH_MARKETING_DEFAULT.tagline,
|
|
2299
2230
|
description: localeMarketing.description || __AN_AUTH_MARKETING_DEFAULT.description,
|
|
@@ -2342,6 +2273,7 @@ ${signInJourneyInlineScript()}
|
|
|
2342
2273
|
document.title = __AN_AUTH_HAS_MARKETING && __AN_AUTH_MARKETING_APP_NAME
|
|
2343
2274
|
? __AN_AUTH_MARKETING_APP_NAME + ' — ' + __anT('pageTitleSignIn')
|
|
2344
2275
|
: __anT('pageTitleWelcome');
|
|
2276
|
+
__anApplyAuthSystemLanguage();
|
|
2345
2277
|
__anApplyAuthMarketingCopy();
|
|
2346
2278
|
__anRefreshAuthViewCopy();
|
|
2347
2279
|
}
|
|
@@ -18,7 +18,7 @@ import { defineEventHandler } from "h3";
|
|
|
18
18
|
*/
|
|
19
19
|
import { createRequestHandler } from "react-router";
|
|
20
20
|
import { isMcpPublicPath } from "../mcp/route-paths.js";
|
|
21
|
-
import { DEFAULT_SPECULATION_RULES_PATH, resolveSsrCacheHeaders, resolveSsrCacheKeyHeaders, } from "../shared/cache-control.js";
|
|
21
|
+
import { DEFAULT_SPECULATION_RULES_PATH, resolveSsrCacheHeaders, resolveSsrCacheKeyHeaders, SSR_QUERY_CACHE_KEY_HEADER, } from "../shared/cache-control.js";
|
|
22
22
|
import { AGENT_NATIVE_SOCIAL_IMAGE_ALT, AGENT_NATIVE_SOCIAL_IMAGE_HEIGHT, AGENT_NATIVE_SOCIAL_IMAGE_PATH, AGENT_NATIVE_SOCIAL_IMAGE_TYPE, AGENT_NATIVE_SOCIAL_IMAGE_WIDTH, withAgentNativeSocialImageCacheBuster, } from "../shared/social-meta.js";
|
|
23
23
|
import { getAppBasePathFromViteEnv, stripAppBasePath as canonicalStripAppBasePath, } from "./app-base-path.js";
|
|
24
24
|
import { getAppOriginClientConfigScript } from "./app-origin-config.js";
|
|
@@ -204,6 +204,8 @@ function isSsrHtmlOrDataResponse(headers, status, pathname) {
|
|
|
204
204
|
* that contradicts that.
|
|
205
205
|
*/
|
|
206
206
|
function applyDefaultSsrCacheHeader(headers, status, pathname) {
|
|
207
|
+
const varyByQuery = headers.get(SSR_QUERY_CACHE_KEY_HEADER)?.trim().toLowerCase() === "query";
|
|
208
|
+
headers.delete(SSR_QUERY_CACHE_KEY_HEADER);
|
|
207
209
|
if (!isSsrHtmlOrDataResponse(headers, status, pathname))
|
|
208
210
|
return;
|
|
209
211
|
// A public shell must never set a viewer cookie or vary by credentials.
|
|
@@ -234,9 +236,16 @@ function applyDefaultSsrCacheHeader(headers, status, pathname) {
|
|
|
234
236
|
for (const [name, value] of Object.entries(resolveSsrCacheHeaders())) {
|
|
235
237
|
headers.set(name, value);
|
|
236
238
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
239
|
+
const cacheKeyHeaders = resolveSsrCacheKeyHeaders();
|
|
240
|
+
const netlifyVary = varyByQuery
|
|
241
|
+
? cacheKeyHeaders["netlify-vary"]
|
|
242
|
+
? "query"
|
|
243
|
+
: undefined
|
|
244
|
+
: cacheKeyHeaders["netlify-vary"];
|
|
245
|
+
if (netlifyVary)
|
|
246
|
+
headers.set("netlify-vary", netlifyVary);
|
|
247
|
+
else
|
|
248
|
+
headers.delete("netlify-vary");
|
|
240
249
|
}
|
|
241
250
|
function applyDefaultSpeculationRulesHeader(headers, status, basePath) {
|
|
242
251
|
if (status < 200 || status >= 400)
|
package/dist/settings/store.d.ts
CHANGED
|
@@ -21,4 +21,13 @@ export declare function deleteSetting(key: string, options?: StoreWriteOptions):
|
|
|
21
21
|
* takes its `o:<orgId>:*` keys with it).
|
|
22
22
|
*/
|
|
23
23
|
export declare function deleteSettingsByPrefix(prefix: string, options?: StoreWriteOptions): Promise<number>;
|
|
24
|
+
/**
|
|
25
|
+
* Read every setting whose key starts with `prefix`. Callers that only need
|
|
26
|
+
* one namespace must not use {@link getAllSettings} — that loads the whole
|
|
27
|
+
* table.
|
|
28
|
+
*/
|
|
29
|
+
export declare function listSettingsByPrefix(prefix: string): Promise<Array<{
|
|
30
|
+
key: string;
|
|
31
|
+
value: Record<string, unknown>;
|
|
32
|
+
}>>;
|
|
24
33
|
export declare function getAllSettings(): Promise<Record<string, Record<string, unknown>>>;
|
package/dist/settings/store.js
CHANGED
|
@@ -247,6 +247,25 @@ export async function deleteSettingsByPrefix(prefix, options) {
|
|
|
247
247
|
}
|
|
248
248
|
return result.rowsAffected;
|
|
249
249
|
}
|
|
250
|
+
/**
|
|
251
|
+
* Read every setting whose key starts with `prefix`. Callers that only need
|
|
252
|
+
* one namespace must not use {@link getAllSettings} — that loads the whole
|
|
253
|
+
* table.
|
|
254
|
+
*/
|
|
255
|
+
export async function listSettingsByPrefix(prefix) {
|
|
256
|
+
await ensureTable();
|
|
257
|
+
const client = getDbExec();
|
|
258
|
+
const table = settingsTable();
|
|
259
|
+
const escaped = prefix.replace(/[!%_]/g, (c) => `!${c}`);
|
|
260
|
+
const { rows } = await client.execute({
|
|
261
|
+
sql: `SELECT key, value FROM ${table} WHERE key LIKE ? ESCAPE '!'`,
|
|
262
|
+
args: [`${escaped}%`],
|
|
263
|
+
});
|
|
264
|
+
return rows.map((row) => ({
|
|
265
|
+
key: String(row.key),
|
|
266
|
+
value: JSON.parse(String(row.value)),
|
|
267
|
+
}));
|
|
268
|
+
}
|
|
250
269
|
export async function getAllSettings() {
|
|
251
270
|
const raw = await loadAllSettingsRaw();
|
|
252
271
|
const result = {};
|
|
@@ -7,6 +7,28 @@ export declare const DEFAULT_SSR_CACHE_HEADERS: {
|
|
|
7
7
|
readonly "cdn-cache-control": "public, max-age=600, stale-while-revalidate=604800, stale-if-error=3600";
|
|
8
8
|
readonly "netlify-cdn-cache-control": "public, durable, s-maxage=31536000, stale-while-revalidate=604800, stale-if-error=3600";
|
|
9
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Content type used by impersonal HTML redirects that should enter the
|
|
12
|
+
* deployment adapter's shared SSR cache path.
|
|
13
|
+
*/
|
|
14
|
+
export declare const SSR_HTML_CONTENT_TYPE = "text/html; charset=utf-8";
|
|
15
|
+
/**
|
|
16
|
+
* Internal response marker for public HTML whose redirect target preserves
|
|
17
|
+
* request query parameters. The SSR adapters consume this marker and emit a
|
|
18
|
+
* provider-specific full-query cache key only where the provider supports it.
|
|
19
|
+
*/
|
|
20
|
+
export declare const SSR_QUERY_CACHE_KEY_HEADER = "x-agent-native-ssr-key";
|
|
21
|
+
export type SsrHtmlContentTypeOptions = {
|
|
22
|
+
varyByQuery?: boolean;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Mark an already-built HTML response as HTML without changing its redirect
|
|
26
|
+
* status, location, or other headers. Only use this for redirects whose
|
|
27
|
+
* target is independent of the viewer and request credentials. Set
|
|
28
|
+
* `varyByQuery` when the target preserves request query parameters so the SSR
|
|
29
|
+
* adapter can request a full-query cache key on providers that support it.
|
|
30
|
+
*/
|
|
31
|
+
export declare function withSsrHtmlContentType<T extends Response>(response: T, options?: SsrHtmlContentTypeOptions): T;
|
|
10
32
|
/**
|
|
11
33
|
* Deployment-wide override for the SSR shell cache policy.
|
|
12
34
|
*
|
|
@@ -7,6 +7,31 @@ export const DEFAULT_SSR_CACHE_HEADERS = {
|
|
|
7
7
|
"cdn-cache-control": DEFAULT_SSR_CDN_CACHE_CONTROL,
|
|
8
8
|
"netlify-cdn-cache-control": DEFAULT_SSR_NETLIFY_CDN_CACHE_CONTROL,
|
|
9
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Content type used by impersonal HTML redirects that should enter the
|
|
12
|
+
* deployment adapter's shared SSR cache path.
|
|
13
|
+
*/
|
|
14
|
+
export const SSR_HTML_CONTENT_TYPE = "text/html; charset=utf-8";
|
|
15
|
+
/**
|
|
16
|
+
* Internal response marker for public HTML whose redirect target preserves
|
|
17
|
+
* request query parameters. The SSR adapters consume this marker and emit a
|
|
18
|
+
* provider-specific full-query cache key only where the provider supports it.
|
|
19
|
+
*/
|
|
20
|
+
export const SSR_QUERY_CACHE_KEY_HEADER = "x-agent-native-ssr-key";
|
|
21
|
+
/**
|
|
22
|
+
* Mark an already-built HTML response as HTML without changing its redirect
|
|
23
|
+
* status, location, or other headers. Only use this for redirects whose
|
|
24
|
+
* target is independent of the viewer and request credentials. Set
|
|
25
|
+
* `varyByQuery` when the target preserves request query parameters so the SSR
|
|
26
|
+
* adapter can request a full-query cache key on providers that support it.
|
|
27
|
+
*/
|
|
28
|
+
export function withSsrHtmlContentType(response, options = {}) {
|
|
29
|
+
response.headers.set("content-type", SSR_HTML_CONTENT_TYPE);
|
|
30
|
+
if (options.varyByQuery) {
|
|
31
|
+
response.headers.set(SSR_QUERY_CACHE_KEY_HEADER, "query");
|
|
32
|
+
}
|
|
33
|
+
return response;
|
|
34
|
+
}
|
|
10
35
|
/**
|
|
11
36
|
* Deployment-wide override for the SSR shell cache policy.
|
|
12
37
|
*
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export { truncate } from "./truncate.js";
|
|
|
6
6
|
export { isHumanReadableDocumentTitle, normalizeDocumentTitle, } from "./document-title.js";
|
|
7
7
|
export { injectDocumentMarkup } from "./html-document.js";
|
|
8
8
|
export { withBuilderUtmTrackingParams } from "./builder-link-tracking.js";
|
|
9
|
+
export { SSR_HTML_CONTENT_TYPE, SSR_QUERY_CACHE_KEY_HEADER, type SsrHtmlContentTypeOptions, withSsrHtmlContentType, } from "./cache-control.js";
|
|
9
10
|
export { AGENT_NATIVE_DOCS_ORIGIN, docsUrl, type DocsUrlOptions, } from "./docs-url.js";
|
|
10
11
|
export { buildRuntimeConfigPrompt, formatRuntimeConfigReport, getRuntimeConfigReport, parseRuntimeConfigReport, runtimeConfigRequirementsFromSearchParams, type RuntimeConfigEnvironment, type RuntimeConfigIssue, type RuntimeConfigIssueCode, type RuntimeConfigIssueSeverity, type RuntimeConfigPhase, type RuntimeConfigReport, type RuntimeConfigRequirements, } from "./runtime-config.js";
|
|
11
12
|
export { llmConnectionTrackingProperties, normalizeLlmConnection, type LlmConnectionStatus, } from "./llm-connection.js";
|
package/dist/shared/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export { truncate } from "./truncate.js";
|
|
|
6
6
|
export { isHumanReadableDocumentTitle, normalizeDocumentTitle, } from "./document-title.js";
|
|
7
7
|
export { injectDocumentMarkup } from "./html-document.js";
|
|
8
8
|
export { withBuilderUtmTrackingParams } from "./builder-link-tracking.js";
|
|
9
|
+
export { SSR_HTML_CONTENT_TYPE, SSR_QUERY_CACHE_KEY_HEADER, withSsrHtmlContentType, } from "./cache-control.js";
|
|
9
10
|
export { AGENT_NATIVE_DOCS_ORIGIN, docsUrl, } from "./docs-url.js";
|
|
10
11
|
export { buildRuntimeConfigPrompt, formatRuntimeConfigReport, getRuntimeConfigReport, parseRuntimeConfigReport, runtimeConfigRequirementsFromSearchParams, } from "./runtime-config.js";
|
|
11
12
|
export { llmConnectionTrackingProperties, normalizeLlmConnection, } from "./llm-connection.js";
|
|
@@ -820,6 +820,8 @@ In a standard production deployment with [production code execution](#production
|
|
|
820
820
|
|
|
821
821
|
[Builder.io](https://www.builder.io?utm_source=agent-native&utm_medium=docs&utm_campaign=framework&utm_content=deployment) is a separate managed code-capable workflow where an agent can modify your app's UI in production. Connect your repo to Builder.io (free tier available) and prompt for UI changes directly — no redeploy needed.
|
|
822
822
|
|
|
823
|
+
**Connect Builder** in Settings uses Builder OAuth (`builder:ai:invoke`) with a same-origin HTTPS callback under `/_agent-native/builder/callback`, so hosted origins such as Railway work without a domain allowlist. Legacy `BUILDER_*` private keys remain a runtime fallback for existing connections.
|
|
824
|
+
|
|
823
825
|
**How it works:**
|
|
824
826
|
|
|
825
827
|
1. Connect your agent-native repo to Builder.io (free tier available)
|
|
@@ -260,7 +260,7 @@ my-company-platform/
|
|
|
260
260
|
|
|
261
261
|
A few onboarding flows are workspace-aware out of the box:
|
|
262
262
|
|
|
263
|
-
- **Builder
|
|
263
|
+
- **Builder OAuth**: clicking "Connect Builder" authorizes the signed-in user with the least-privilege `builder:ai:invoke` scope and stores the token in encrypted per-user custody. Legacy Builder keys remain available only to existing uncovered integrations.
|
|
264
264
|
- **Compatibility key route** (`POST /_agent-native/env-vars`): older onboarding forms still call this route name, but it now saves values as scoped DB secrets. Pass `scope: "workspace"` to share with the active org, or omit it for a per-user key.
|
|
265
265
|
|
|
266
266
|
This works because every app in the same workspace points at the same `DATABASE_URL` by default, so framework credential storage (`@agent-native/core/credentials`) makes a credential available to every app without per-app config. Add a thin helper in `packages/shared` if your workspace wants a stricter naming convention.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.164.3",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -428,7 +428,7 @@
|
|
|
428
428
|
"yjs": "^13.6.32",
|
|
429
429
|
"zod": "^4.3.6",
|
|
430
430
|
"@agent-native/recap-cli": "0.5.5",
|
|
431
|
-
"@agent-native/toolkit": "^0.16.
|
|
431
|
+
"@agent-native/toolkit": "^0.16.6"
|
|
432
432
|
},
|
|
433
433
|
"devDependencies": {
|
|
434
434
|
"@ai-sdk/anthropic": "^3.0.71",
|