@agent-native/core 0.98.3 → 0.98.5
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 +2 -2
- package/corpus/core/CHANGELOG.md +29 -0
- package/corpus/core/docs/content/durable-background-runs.mdx +37 -0
- package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/de-DE/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/es-ES/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +4 -2
- package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
- package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +2 -0
- package/corpus/core/docs/content/tracking.mdx +2 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/durable-background.ts +16 -16
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +25 -8
- package/corpus/core/src/agent/engine/anthropic-engine.ts +17 -3
- package/corpus/core/src/agent/engine/output-tokens.ts +6 -6
- package/corpus/core/src/agent/production-agent.ts +200 -27
- package/corpus/core/src/agent/run-manager.ts +81 -1
- package/corpus/core/src/agent/run-store.ts +301 -41
- package/corpus/core/src/client/AgentPanel.tsx +6 -2
- package/corpus/core/src/client/AssistantChat.tsx +364 -69
- package/corpus/core/src/client/agent-chat-adapter.ts +169 -1
- package/corpus/core/src/client/analytics.ts +12 -0
- package/corpus/core/src/client/chat/message-components.tsx +3 -0
- package/corpus/core/src/client/chat/tool-call-display.tsx +20 -36
- package/corpus/core/src/client/conversation/use-near-bottom-autoscroll.ts +7 -0
- package/corpus/core/src/client/extensions/AgentNativeExtensionFrame.tsx +2 -0
- package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +2 -0
- package/corpus/core/src/client/extensions/ExtensionEditor.tsx +9 -2
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +2 -0
- package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +2 -0
- package/corpus/core/src/client/extensions/portable-extension.ts +2 -0
- package/corpus/core/src/client/session-replay.ts +971 -53
- package/corpus/core/src/client/settings/DemoModeSection.tsx +3 -3
- package/corpus/core/src/client/sse-event-processor.ts +43 -1
- package/corpus/core/src/demo/actions/toggle-demo-mode.ts +2 -2
- package/corpus/core/src/demo/config.ts +6 -6
- package/corpus/core/src/demo/fetch-interceptor.ts +34 -2
- package/corpus/core/src/demo/redact.ts +71 -158
- package/corpus/core/src/extensions/html-shell.ts +3 -0
- package/corpus/core/src/extensions/session-replay-iframe.ts +131 -0
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -20
- package/corpus/core/src/session-replay-iframe-protocol.ts +58 -0
- package/corpus/core/src/shared/reasoning-effort.ts +35 -0
- package/corpus/core/src/styles/agent-conversation.css +26 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +67 -16
- package/corpus/templates/analytics/AGENTS.md +12 -0
- package/corpus/templates/analytics/actions/get-error-issue.ts +1 -0
- package/corpus/templates/analytics/actions/get-session-replay-events.ts +1 -0
- package/corpus/templates/analytics/actions/get-session-replay-summary.ts +1 -0
- package/corpus/templates/analytics/actions/list-error-issues.ts +1 -0
- package/corpus/templates/analytics/actions/list-session-recordings.ts +1 -0
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +2 -1
- package/corpus/templates/analytics/app/global.css +6 -64
- package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +41 -4
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +143 -121
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +34 -12
- package/corpus/templates/analytics/changelog/2026-07-12-analytics-chat-retries-before-showing-a-generic-no-data-mess.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-analytics-sessions-search-no-longer-loses-fast-keystrokes-an.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-chart-selection-respects-chat-state.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-demo-mode-anonymizes-error-reporting-emails.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-fixed-session-replays-that-appeared-ultra-wide-hid-recorded-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-session-replays-load-faster-in-demo-mode-while-visitor-email.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-session-replays-show-iframe-content.md +6 -0
- package/corpus/templates/analytics/netlify.toml +0 -3
- package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +14 -0
- package/corpus/templates/analytics/server/lib/error-capture.ts +59 -2
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +24 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +2 -9
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +39 -6
- package/corpus/templates/assets/app/global.css +1 -1
- package/corpus/templates/brain/app/global.css +2 -2
- package/corpus/templates/brain/changelog/2026-07-12-fix-long-response-progress.md +6 -0
- package/corpus/templates/calendar/app/components/calendar/DeleteEventDialog.tsx +11 -2
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +14 -2
- package/corpus/templates/calendar/changelog/2026-07-12-calendar-responses-can-now-be-saved-with-command-enter-or-ct.md +6 -0
- package/corpus/templates/forms/app/components/CloudUpgrade.tsx +1 -1
- package/corpus/templates/forms/app/components/ThemeToggle.tsx +22 -6
- package/corpus/templates/forms/app/components/builder/FieldPropertiesPanel.tsx +5 -5
- package/corpus/templates/forms/app/components/builder/FieldRenderer.tsx +3 -3
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +16 -16
- package/corpus/templates/forms/app/global.css +110 -5
- package/corpus/templates/forms/app/pages/AskPage.tsx +3 -3
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +134 -52
- package/corpus/templates/forms/app/pages/FormFillPage.tsx +44 -11
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +42 -24
- package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +28 -15
- package/corpus/templates/forms/app/pages/ResponsesPage.tsx +38 -15
- package/corpus/templates/forms/app/routes/_app.settings.tsx +1 -1
- package/corpus/templates/forms/changelog/2026-07-12-form-builder-surfaces-are-calmer-fields-stay-stable-on-hover.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-12-smoother-more-tactile-controls-throughout-animated-icon-and-.md +6 -0
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +21 -13
- package/corpus/templates/mail/app/components/email/email-iframe-document.ts +18 -0
- package/dist/agent/durable-background.d.ts +10 -10
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +16 -16
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +19 -8
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +11 -3
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/output-tokens.js +6 -6
- package/dist/agent/engine/output-tokens.js.map +1 -1
- package/dist/agent/production-agent.d.ts +52 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +154 -26
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +9 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +71 -1
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +9 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +243 -48
- package/dist/agent/run-store.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +6 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +21 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +298 -67
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +146 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +11 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +2 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +3 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +13 -37
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -0
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.js +6 -0
- package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.js +2 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +2 -1
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionEditor.js +5 -2
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +2 -1
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.js +2 -1
- package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts.map +1 -1
- package/dist/client/extensions/portable-extension.js +2 -0
- package/dist/client/extensions/portable-extension.js.map +1 -1
- package/dist/client/session-replay.d.ts +12 -3
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +793 -49
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/DemoModeSection.js +1 -1
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +5 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +37 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/demo/actions/toggle-demo-mode.js +2 -2
- package/dist/demo/actions/toggle-demo-mode.js.map +1 -1
- package/dist/demo/config.js +6 -6
- package/dist/demo/config.js.map +1 -1
- package/dist/demo/fetch-interceptor.d.ts +1 -0
- package/dist/demo/fetch-interceptor.d.ts.map +1 -1
- package/dist/demo/fetch-interceptor.js +28 -2
- package/dist/demo/fetch-interceptor.js.map +1 -1
- package/dist/demo/redact.d.ts +14 -7
- package/dist/demo/redact.d.ts.map +1 -1
- package/dist/demo/redact.js +27 -155
- package/dist/demo/redact.js.map +1 -1
- package/dist/extensions/html-shell.d.ts.map +1 -1
- package/dist/extensions/html-shell.js +2 -0
- package/dist/extensions/html-shell.js.map +1 -1
- package/dist/extensions/session-replay-iframe.d.ts +10 -0
- package/dist/extensions/session-replay-iframe.d.ts.map +1 -0
- package/dist/extensions/session-replay-iframe.js +121 -0
- package/dist/extensions/session-replay-iframe.js.map +1 -0
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +1 -19
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/session-replay-iframe-protocol.d.ts +36 -0
- package/dist/session-replay-iframe-protocol.d.ts.map +1 -0
- package/dist/session-replay-iframe-protocol.js +24 -0
- package/dist/session-replay-iframe-protocol.js.map +1 -0
- package/dist/shared/reasoning-effort.d.ts +11 -0
- package/dist/shared/reasoning-effort.d.ts.map +1 -1
- package/dist/shared/reasoning-effort.js +36 -0
- package/dist/shared/reasoning-effort.js.map +1 -1
- package/dist/styles/agent-conversation.css +26 -0
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
- package/docs/content/durable-background-runs.mdx +37 -0
- package/docs/content/locales/ar-SA/tracking.mdx +2 -0
- package/docs/content/locales/de-DE/tracking.mdx +2 -0
- package/docs/content/locales/es-ES/tracking.mdx +2 -0
- package/docs/content/locales/fr-FR/tracking.mdx +4 -2
- package/docs/content/locales/hi-IN/tracking.mdx +2 -0
- package/docs/content/locales/ja-JP/tracking.mdx +2 -0
- package/docs/content/locales/ko-KR/tracking.mdx +2 -0
- package/docs/content/locales/pt-BR/tracking.mdx +2 -0
- package/docs/content/locales/zh-CN/tracking.mdx +2 -0
- package/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
- package/docs/content/locales/zh-TW/tracking.mdx +2 -0
- package/docs/content/tracking.mdx +2 -0
- package/package.json +2 -2
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
- package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
- package/dist/observability/hosted-model-experiment.d.ts +0 -39
- package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
- package/dist/observability/hosted-model-experiment.js +0 -90
- package/dist/observability/hosted-model-experiment.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.98.
|
|
3
|
+
"version": "0.98.5",
|
|
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": {
|
|
@@ -333,7 +333,7 @@
|
|
|
333
333
|
"y-protocols": "^1.0.7",
|
|
334
334
|
"yjs": "^13.6.31",
|
|
335
335
|
"zod": "^4.3.6",
|
|
336
|
-
"@agent-native/toolkit": "^0.4.
|
|
336
|
+
"@agent-native/toolkit": "^0.4.9"
|
|
337
337
|
},
|
|
338
338
|
"devDependencies": {
|
|
339
339
|
"@ai-sdk/anthropic": "^3.0.71",
|
|
@@ -158,21 +158,6 @@ The agent loop reads active experiments via `resolveActiveExperimentConfig()` an
|
|
|
158
158
|
|
|
159
159
|
Compute results with `POST /_agent-native/observability/experiments/:id/results`.
|
|
160
160
|
|
|
161
|
-
#### First-party hosted default-model rollout
|
|
162
|
-
|
|
163
|
-
First-party apps on `agent-native.com` automatically run the July 2026
|
|
164
|
-
default-model experiment for authenticated users on the Builder engine:
|
|
165
|
-
|
|
166
|
-
- 80% `claude-sonnet-5`
|
|
167
|
-
- 20% `gpt-5-6-luna`
|
|
168
|
-
- Assignment is sticky by normalized user email and shared across templates.
|
|
169
|
-
- The rollout applies only when the user, app, and deployment have not selected
|
|
170
|
-
a model. Explicit model choices and BYO provider engines always win.
|
|
171
|
-
- Set `AGENT_NATIVE_HOSTED_MODEL_EXPERIMENT=off` for an emergency rollback, or
|
|
172
|
-
`true` to exercise the rollout on a non-first-party preview.
|
|
173
|
-
- `$ai_generation` tracking includes `experiment_id`,
|
|
174
|
-
`experiment_variant`, and `model_selection_source` for central analysis.
|
|
175
|
-
|
|
176
161
|
In production, experiment management routes require the caller's email in the
|
|
177
162
|
comma-separated `AGENT_NATIVE_EXPERIMENT_ADMIN_EMAILS` allowlist. This gate is
|
|
178
163
|
separate from normal app/org admin roles because an experiment affects every
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
export const HOSTED_DEFAULT_MODEL_EXPERIMENT_ID =
|
|
2
|
-
"hosted-default-model-sonnet-5-vs-gpt-5-6-luna-2026-07";
|
|
3
|
-
|
|
4
|
-
export const HOSTED_DEFAULT_MODEL_CONTROL = {
|
|
5
|
-
id: "sonnet-5",
|
|
6
|
-
model: "claude-sonnet-5",
|
|
7
|
-
weight: 80,
|
|
8
|
-
} as const;
|
|
9
|
-
|
|
10
|
-
export const HOSTED_DEFAULT_MODEL_TREATMENT = {
|
|
11
|
-
id: "gpt-5-6-luna",
|
|
12
|
-
model: "gpt-5-6-luna",
|
|
13
|
-
weight: 20,
|
|
14
|
-
} as const;
|
|
15
|
-
|
|
16
|
-
export interface HostedDefaultModelExperimentAssignment {
|
|
17
|
-
experimentId: string;
|
|
18
|
-
variantId: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface HostedDefaultModelExperimentResolution {
|
|
22
|
-
model: string;
|
|
23
|
-
assignment: HostedDefaultModelExperimentAssignment;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
type HostedExperimentEnv = Record<string, string | undefined>;
|
|
27
|
-
|
|
28
|
-
const FIRST_PARTY_HOST_SUFFIX = ".agent-native.com";
|
|
29
|
-
const ENABLED_VALUES = new Set(["1", "true", "on", "yes"]);
|
|
30
|
-
const DISABLED_VALUES = new Set(["0", "false", "off", "no"]);
|
|
31
|
-
|
|
32
|
-
function hostnameFromUrl(value: string | undefined): string | null {
|
|
33
|
-
const trimmed = value?.trim();
|
|
34
|
-
if (!trimmed) return null;
|
|
35
|
-
try {
|
|
36
|
-
const url = /^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed)
|
|
37
|
-
? new URL(trimmed)
|
|
38
|
-
: new URL(`https://${trimmed}`);
|
|
39
|
-
return url.hostname.toLowerCase();
|
|
40
|
-
} catch {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* The rollout is automatic only on first-party hosted app domains. Operators
|
|
47
|
-
* can explicitly enable or disable it for preview and emergency rollback.
|
|
48
|
-
*/
|
|
49
|
-
export function isHostedDefaultModelExperimentEnabled(
|
|
50
|
-
env: HostedExperimentEnv = process.env,
|
|
51
|
-
): boolean {
|
|
52
|
-
const override =
|
|
53
|
-
env.AGENT_NATIVE_HOSTED_MODEL_EXPERIMENT?.trim().toLowerCase();
|
|
54
|
-
if (override && DISABLED_VALUES.has(override)) return false;
|
|
55
|
-
if (override && ENABLED_VALUES.has(override)) return true;
|
|
56
|
-
|
|
57
|
-
const hostnames = [
|
|
58
|
-
env.APP_URL,
|
|
59
|
-
env.BETTER_AUTH_URL,
|
|
60
|
-
env.URL,
|
|
61
|
-
env.DEPLOY_URL,
|
|
62
|
-
env.VERCEL_PROJECT_PRODUCTION_URL,
|
|
63
|
-
env.VERCEL_URL,
|
|
64
|
-
]
|
|
65
|
-
.map(hostnameFromUrl)
|
|
66
|
-
.filter((hostname): hostname is string => Boolean(hostname));
|
|
67
|
-
|
|
68
|
-
return hostnames.some(
|
|
69
|
-
(hostname) =>
|
|
70
|
-
hostname === "agent-native.com" ||
|
|
71
|
-
hostname.endsWith(FIRST_PARTY_HOST_SUFFIX),
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Stable cross-app bucket: the same authenticated user receives the same
|
|
77
|
-
* variant in every hosted template for the life of this experiment id.
|
|
78
|
-
*/
|
|
79
|
-
export function hostedDefaultModelExperimentBucket(userId: string): number {
|
|
80
|
-
const input = `${HOSTED_DEFAULT_MODEL_EXPERIMENT_ID}:${userId.trim().toLowerCase()}`;
|
|
81
|
-
let hash = 0x811c9dc5;
|
|
82
|
-
for (let index = 0; index < input.length; index++) {
|
|
83
|
-
hash ^= input.charCodeAt(index);
|
|
84
|
-
hash = Math.imul(hash, 0x01000193);
|
|
85
|
-
}
|
|
86
|
-
return (hash >>> 0) % 100;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export function resolveHostedDefaultModelExperiment(args: {
|
|
90
|
-
userId: string | null | undefined;
|
|
91
|
-
engineName: string;
|
|
92
|
-
isDefaultModelSelection: boolean;
|
|
93
|
-
supportedModels?: readonly string[];
|
|
94
|
-
env?: HostedExperimentEnv;
|
|
95
|
-
}): HostedDefaultModelExperimentResolution | null {
|
|
96
|
-
const userId = args.userId?.trim();
|
|
97
|
-
if (!userId) return null;
|
|
98
|
-
if (args.engineName !== "builder") return null;
|
|
99
|
-
if (!args.isDefaultModelSelection) return null;
|
|
100
|
-
if (!isHostedDefaultModelExperimentEnabled(args.env)) return null;
|
|
101
|
-
|
|
102
|
-
const variant =
|
|
103
|
-
hostedDefaultModelExperimentBucket(userId) <
|
|
104
|
-
HOSTED_DEFAULT_MODEL_TREATMENT.weight
|
|
105
|
-
? HOSTED_DEFAULT_MODEL_TREATMENT
|
|
106
|
-
: HOSTED_DEFAULT_MODEL_CONTROL;
|
|
107
|
-
if (args.supportedModels && !args.supportedModels.includes(variant.model)) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return {
|
|
112
|
-
model: variant.model,
|
|
113
|
-
assignment: {
|
|
114
|
-
experimentId: HOSTED_DEFAULT_MODEL_EXPERIMENT_ID,
|
|
115
|
-
variantId: variant.id,
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export declare const HOSTED_DEFAULT_MODEL_EXPERIMENT_ID = "hosted-default-model-sonnet-5-vs-gpt-5-6-luna-2026-07";
|
|
2
|
-
export declare const HOSTED_DEFAULT_MODEL_CONTROL: {
|
|
3
|
-
readonly id: "sonnet-5";
|
|
4
|
-
readonly model: "claude-sonnet-5";
|
|
5
|
-
readonly weight: 80;
|
|
6
|
-
};
|
|
7
|
-
export declare const HOSTED_DEFAULT_MODEL_TREATMENT: {
|
|
8
|
-
readonly id: "gpt-5-6-luna";
|
|
9
|
-
readonly model: "gpt-5-6-luna";
|
|
10
|
-
readonly weight: 20;
|
|
11
|
-
};
|
|
12
|
-
export interface HostedDefaultModelExperimentAssignment {
|
|
13
|
-
experimentId: string;
|
|
14
|
-
variantId: string;
|
|
15
|
-
}
|
|
16
|
-
export interface HostedDefaultModelExperimentResolution {
|
|
17
|
-
model: string;
|
|
18
|
-
assignment: HostedDefaultModelExperimentAssignment;
|
|
19
|
-
}
|
|
20
|
-
type HostedExperimentEnv = Record<string, string | undefined>;
|
|
21
|
-
/**
|
|
22
|
-
* The rollout is automatic only on first-party hosted app domains. Operators
|
|
23
|
-
* can explicitly enable or disable it for preview and emergency rollback.
|
|
24
|
-
*/
|
|
25
|
-
export declare function isHostedDefaultModelExperimentEnabled(env?: HostedExperimentEnv): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Stable cross-app bucket: the same authenticated user receives the same
|
|
28
|
-
* variant in every hosted template for the life of this experiment id.
|
|
29
|
-
*/
|
|
30
|
-
export declare function hostedDefaultModelExperimentBucket(userId: string): number;
|
|
31
|
-
export declare function resolveHostedDefaultModelExperiment(args: {
|
|
32
|
-
userId: string | null | undefined;
|
|
33
|
-
engineName: string;
|
|
34
|
-
isDefaultModelSelection: boolean;
|
|
35
|
-
supportedModels?: readonly string[];
|
|
36
|
-
env?: HostedExperimentEnv;
|
|
37
|
-
}): HostedDefaultModelExperimentResolution | null;
|
|
38
|
-
export {};
|
|
39
|
-
//# sourceMappingURL=hosted-model-experiment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-model-experiment.d.ts","sourceRoot":"","sources":["../../src/observability/hosted-model-experiment.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,0DACU,CAAC;AAE1D,eAAO,MAAM,4BAA4B;aACvC,EAAE,EAAE,UAAU;aACd,KAAK,EAAE,iBAAiB;aACxB,MAAM,EAAE,EAAE;CACF,CAAC;AAEX,eAAO,MAAM,8BAA8B;aACzC,EAAE,EAAE,cAAc;aAClB,KAAK,EAAE,cAAc;aACrB,MAAM,EAAE,EAAE;CACF,CAAC;AAEX,MAAM,WAAW,sCAAsC;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sCAAsC;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,sCAAsC,CAAC;CACpD;AAED,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAmB9D;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,GAAG,GAAE,mBAAiC,GACrC,OAAO,CAsBT;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQzE;AAED,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACxD,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,GAAG,CAAC,EAAE,mBAAmB,CAAC;CAC3B,GAAG,sCAAsC,GAAG,IAAI,CAuBhD"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
export const HOSTED_DEFAULT_MODEL_EXPERIMENT_ID = "hosted-default-model-sonnet-5-vs-gpt-5-6-luna-2026-07";
|
|
2
|
-
export const HOSTED_DEFAULT_MODEL_CONTROL = {
|
|
3
|
-
id: "sonnet-5",
|
|
4
|
-
model: "claude-sonnet-5",
|
|
5
|
-
weight: 80,
|
|
6
|
-
};
|
|
7
|
-
export const HOSTED_DEFAULT_MODEL_TREATMENT = {
|
|
8
|
-
id: "gpt-5-6-luna",
|
|
9
|
-
model: "gpt-5-6-luna",
|
|
10
|
-
weight: 20,
|
|
11
|
-
};
|
|
12
|
-
const FIRST_PARTY_HOST_SUFFIX = ".agent-native.com";
|
|
13
|
-
const ENABLED_VALUES = new Set(["1", "true", "on", "yes"]);
|
|
14
|
-
const DISABLED_VALUES = new Set(["0", "false", "off", "no"]);
|
|
15
|
-
function hostnameFromUrl(value) {
|
|
16
|
-
const trimmed = value?.trim();
|
|
17
|
-
if (!trimmed)
|
|
18
|
-
return null;
|
|
19
|
-
try {
|
|
20
|
-
const url = /^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed)
|
|
21
|
-
? new URL(trimmed)
|
|
22
|
-
: new URL(`https://${trimmed}`);
|
|
23
|
-
return url.hostname.toLowerCase();
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* The rollout is automatic only on first-party hosted app domains. Operators
|
|
31
|
-
* can explicitly enable or disable it for preview and emergency rollback.
|
|
32
|
-
*/
|
|
33
|
-
export function isHostedDefaultModelExperimentEnabled(env = process.env) {
|
|
34
|
-
const override = env.AGENT_NATIVE_HOSTED_MODEL_EXPERIMENT?.trim().toLowerCase();
|
|
35
|
-
if (override && DISABLED_VALUES.has(override))
|
|
36
|
-
return false;
|
|
37
|
-
if (override && ENABLED_VALUES.has(override))
|
|
38
|
-
return true;
|
|
39
|
-
const hostnames = [
|
|
40
|
-
env.APP_URL,
|
|
41
|
-
env.BETTER_AUTH_URL,
|
|
42
|
-
env.URL,
|
|
43
|
-
env.DEPLOY_URL,
|
|
44
|
-
env.VERCEL_PROJECT_PRODUCTION_URL,
|
|
45
|
-
env.VERCEL_URL,
|
|
46
|
-
]
|
|
47
|
-
.map(hostnameFromUrl)
|
|
48
|
-
.filter((hostname) => Boolean(hostname));
|
|
49
|
-
return hostnames.some((hostname) => hostname === "agent-native.com" ||
|
|
50
|
-
hostname.endsWith(FIRST_PARTY_HOST_SUFFIX));
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Stable cross-app bucket: the same authenticated user receives the same
|
|
54
|
-
* variant in every hosted template for the life of this experiment id.
|
|
55
|
-
*/
|
|
56
|
-
export function hostedDefaultModelExperimentBucket(userId) {
|
|
57
|
-
const input = `${HOSTED_DEFAULT_MODEL_EXPERIMENT_ID}:${userId.trim().toLowerCase()}`;
|
|
58
|
-
let hash = 0x811c9dc5;
|
|
59
|
-
for (let index = 0; index < input.length; index++) {
|
|
60
|
-
hash ^= input.charCodeAt(index);
|
|
61
|
-
hash = Math.imul(hash, 0x01000193);
|
|
62
|
-
}
|
|
63
|
-
return (hash >>> 0) % 100;
|
|
64
|
-
}
|
|
65
|
-
export function resolveHostedDefaultModelExperiment(args) {
|
|
66
|
-
const userId = args.userId?.trim();
|
|
67
|
-
if (!userId)
|
|
68
|
-
return null;
|
|
69
|
-
if (args.engineName !== "builder")
|
|
70
|
-
return null;
|
|
71
|
-
if (!args.isDefaultModelSelection)
|
|
72
|
-
return null;
|
|
73
|
-
if (!isHostedDefaultModelExperimentEnabled(args.env))
|
|
74
|
-
return null;
|
|
75
|
-
const variant = hostedDefaultModelExperimentBucket(userId) <
|
|
76
|
-
HOSTED_DEFAULT_MODEL_TREATMENT.weight
|
|
77
|
-
? HOSTED_DEFAULT_MODEL_TREATMENT
|
|
78
|
-
: HOSTED_DEFAULT_MODEL_CONTROL;
|
|
79
|
-
if (args.supportedModels && !args.supportedModels.includes(variant.model)) {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
return {
|
|
83
|
-
model: variant.model,
|
|
84
|
-
assignment: {
|
|
85
|
-
experimentId: HOSTED_DEFAULT_MODEL_EXPERIMENT_ID,
|
|
86
|
-
variantId: variant.id,
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=hosted-model-experiment.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-model-experiment.js","sourceRoot":"","sources":["../../src/observability/hosted-model-experiment.ts"],"names":[],"mappings":"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","sourcesContent":["export const HOSTED_DEFAULT_MODEL_EXPERIMENT_ID =\n \"hosted-default-model-sonnet-5-vs-gpt-5-6-luna-2026-07\";\n\nexport const HOSTED_DEFAULT_MODEL_CONTROL = {\n id: \"sonnet-5\",\n model: \"claude-sonnet-5\",\n weight: 80,\n} as const;\n\nexport const HOSTED_DEFAULT_MODEL_TREATMENT = {\n id: \"gpt-5-6-luna\",\n model: \"gpt-5-6-luna\",\n weight: 20,\n} as const;\n\nexport interface HostedDefaultModelExperimentAssignment {\n experimentId: string;\n variantId: string;\n}\n\nexport interface HostedDefaultModelExperimentResolution {\n model: string;\n assignment: HostedDefaultModelExperimentAssignment;\n}\n\ntype HostedExperimentEnv = Record<string, string | undefined>;\n\nconst FIRST_PARTY_HOST_SUFFIX = \".agent-native.com\";\nconst ENABLED_VALUES = new Set([\"1\", \"true\", \"on\", \"yes\"]);\nconst DISABLED_VALUES = new Set([\"0\", \"false\", \"off\", \"no\"]);\n\nfunction hostnameFromUrl(value: string | undefined): string | null {\n const trimmed = value?.trim();\n if (!trimmed) return null;\n try {\n const url = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(trimmed)\n ? new URL(trimmed)\n : new URL(`https://${trimmed}`);\n return url.hostname.toLowerCase();\n } catch {\n return null;\n }\n}\n\n/**\n * The rollout is automatic only on first-party hosted app domains. Operators\n * can explicitly enable or disable it for preview and emergency rollback.\n */\nexport function isHostedDefaultModelExperimentEnabled(\n env: HostedExperimentEnv = process.env,\n): boolean {\n const override =\n env.AGENT_NATIVE_HOSTED_MODEL_EXPERIMENT?.trim().toLowerCase();\n if (override && DISABLED_VALUES.has(override)) return false;\n if (override && ENABLED_VALUES.has(override)) return true;\n\n const hostnames = [\n env.APP_URL,\n env.BETTER_AUTH_URL,\n env.URL,\n env.DEPLOY_URL,\n env.VERCEL_PROJECT_PRODUCTION_URL,\n env.VERCEL_URL,\n ]\n .map(hostnameFromUrl)\n .filter((hostname): hostname is string => Boolean(hostname));\n\n return hostnames.some(\n (hostname) =>\n hostname === \"agent-native.com\" ||\n hostname.endsWith(FIRST_PARTY_HOST_SUFFIX),\n );\n}\n\n/**\n * Stable cross-app bucket: the same authenticated user receives the same\n * variant in every hosted template for the life of this experiment id.\n */\nexport function hostedDefaultModelExperimentBucket(userId: string): number {\n const input = `${HOSTED_DEFAULT_MODEL_EXPERIMENT_ID}:${userId.trim().toLowerCase()}`;\n let hash = 0x811c9dc5;\n for (let index = 0; index < input.length; index++) {\n hash ^= input.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193);\n }\n return (hash >>> 0) % 100;\n}\n\nexport function resolveHostedDefaultModelExperiment(args: {\n userId: string | null | undefined;\n engineName: string;\n isDefaultModelSelection: boolean;\n supportedModels?: readonly string[];\n env?: HostedExperimentEnv;\n}): HostedDefaultModelExperimentResolution | null {\n const userId = args.userId?.trim();\n if (!userId) return null;\n if (args.engineName !== \"builder\") return null;\n if (!args.isDefaultModelSelection) return null;\n if (!isHostedDefaultModelExperimentEnabled(args.env)) return null;\n\n const variant =\n hostedDefaultModelExperimentBucket(userId) <\n HOSTED_DEFAULT_MODEL_TREATMENT.weight\n ? HOSTED_DEFAULT_MODEL_TREATMENT\n : HOSTED_DEFAULT_MODEL_CONTROL;\n if (args.supportedModels && !args.supportedModels.includes(variant.model)) {\n return null;\n }\n\n return {\n model: variant.model,\n assignment: {\n experimentId: HOSTED_DEFAULT_MODEL_EXPERIMENT_ID,\n variantId: variant.id,\n },\n };\n}\n"]}
|