@agent-native/core 0.9.1 → 0.11.0
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/README.md +4 -4
- package/dist/a2a/caller-auth.d.ts +12 -0
- package/dist/a2a/caller-auth.d.ts.map +1 -0
- package/dist/a2a/caller-auth.js +54 -0
- package/dist/a2a/caller-auth.js.map +1 -0
- package/dist/action.d.ts +17 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +22 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +5 -4
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +6 -3
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +8 -17
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +60 -30
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +12 -3
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts +12 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +96 -0
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +16 -10
- package/dist/cli/create.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +8 -22
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +130 -34
- 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 +21 -7
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-sidebar-state.d.ts +3 -0
- package/dist/client/agent-sidebar-state.d.ts.map +1 -0
- package/dist/client/agent-sidebar-state.js +24 -0
- package/dist/client/agent-sidebar-state.js.map +1 -0
- package/dist/client/analytics.d.ts +25 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +40 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/client/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/client/components/ui/dropdown-menu.js +34 -0
- package/dist/client/components/ui/dropdown-menu.js.map +1 -0
- package/dist/client/components/ui/tooltip.d.ts +2 -1
- package/dist/client/components/ui/tooltip.d.ts.map +1 -1
- package/dist/client/components/ui/tooltip.js +9 -2
- package/dist/client/components/ui/tooltip.js.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.js +41 -8
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +30 -0
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +27 -2
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.js +4 -4
- package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +6 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +16 -4
- 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 +6 -6
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +15 -2
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +41 -19
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.js +2 -2
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +52 -63
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/extensions/iframe-bridge.d.ts.map +1 -1
- package/dist/client/extensions/iframe-bridge.js +5 -8
- package/dist/client/extensions/iframe-bridge.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
- package/dist/client/notifications/NotificationsBell.js +42 -6
- package/dist/client/notifications/NotificationsBell.js.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.js +5 -5
- package/dist/client/org/InvitationBanner.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +7 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +8 -3
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +156 -22
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts +29 -1
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +39 -2
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +2 -1
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +1 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +11 -3
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +62 -12
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/use-mcp-servers.d.ts +2 -0
- package/dist/client/resources/use-mcp-servers.d.ts.map +1 -1
- package/dist/client/resources/use-mcp-servers.js +59 -3
- package/dist/client/resources/use-mcp-servers.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +9 -0
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +50 -12
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +13 -30
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +27 -1
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +4 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +5 -1
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +1 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +14 -7
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +100 -19
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +25 -49
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/route-discovery.d.ts.map +1 -1
- package/dist/deploy/route-discovery.js +1 -0
- package/dist/deploy/route-discovery.js.map +1 -1
- package/dist/deploy/workspace-core.d.ts +1 -1
- package/dist/deploy/workspace-core.d.ts.map +1 -1
- package/dist/deploy/workspace-core.js +1 -0
- package/dist/deploy/workspace-core.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +17 -3
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/routes.js +1 -1
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/schema.d.ts +14 -14
- package/dist/extensions/schema.d.ts.map +1 -1
- package/dist/extensions/schema.js +4 -4
- package/dist/extensions/schema.js.map +1 -1
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +23 -0
- package/dist/extensions/store.js.map +1 -1
- package/dist/extensions/theme.d.ts +8 -1
- package/dist/extensions/theme.d.ts.map +1 -1
- package/dist/extensions/theme.js +43 -34
- package/dist/extensions/theme.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-client/routes.d.ts +1 -0
- package/dist/mcp-client/routes.d.ts.map +1 -1
- package/dist/mcp-client/routes.js +28 -1
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/org/accept-pending.d.ts.map +1 -1
- package/dist/org/accept-pending.js +5 -3
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/free-email-providers.d.ts +18 -0
- package/dist/org/free-email-providers.d.ts.map +1 -0
- package/dist/org/free-email-providers.js +124 -0
- package/dist/org/free-email-providers.js.map +1 -0
- package/dist/org/handlers.d.ts +29 -5
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +178 -37
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/index.d.ts +2 -1
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +2 -1
- package/dist/org/index.js.map +1 -1
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +4 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/org/plugin.d.ts.map +1 -1
- package/dist/org/plugin.js +13 -4
- package/dist/org/plugin.js.map +1 -1
- package/dist/org/schema.d.ts +19 -0
- package/dist/org/schema.d.ts.map +1 -1
- package/dist/org/schema.js +1 -0
- package/dist/org/schema.js.map +1 -1
- package/dist/org/types.d.ts +1 -0
- package/dist/org/types.d.ts.map +1 -1
- package/dist/org/types.js.map +1 -1
- package/dist/resources/metadata.d.ts +1 -0
- package/dist/resources/metadata.d.ts.map +1 -1
- package/dist/resources/metadata.js +13 -3
- package/dist/resources/metadata.js.map +1 -1
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +44 -6
- package/dist/resources/store.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +115 -113
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +33 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +169 -68
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/credential-provider.d.ts +2 -2
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +31 -12
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +31 -0
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +10 -3
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/google-realtime-session.d.ts.map +1 -1
- package/dist/server/google-realtime-session.js +19 -6
- package/dist/server/google-realtime-session.js.map +1 -1
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +45 -6
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/request-context.d.ts +17 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +40 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/sentry-plugin.d.ts +11 -0
- package/dist/server/sentry-plugin.d.ts.map +1 -0
- package/dist/server/sentry-plugin.js +116 -0
- package/dist/server/sentry-plugin.js.map +1 -0
- package/dist/server/sentry.d.ts +92 -0
- package/dist/server/sentry.d.ts.map +1 -0
- package/dist/server/sentry.js +287 -0
- package/dist/server/sentry.js.map +1 -0
- package/dist/server/transcribe-voice.d.ts +2 -4
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +4 -16
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/server/voice-providers-status.d.ts.map +1 -1
- package/dist/server/voice-providers-status.js +19 -35
- package/dist/server/voice-providers-status.js.map +1 -1
- package/dist/styles/agent-native.css +15 -0
- package/docs/content/cloneable-saas.md +7 -9
- package/docs/content/deployment.md +6 -2
- package/docs/content/dispatch.md +1 -1
- package/docs/content/extensions.md +177 -142
- package/docs/content/faq.md +2 -2
- package/docs/content/getting-started.md +13 -11
- package/docs/content/multi-app-workspace.md +2 -2
- package/docs/content/observability.md +47 -0
- package/docs/content/pure-agent-apps.md +1 -1
- package/docs/content/template-clips.md +3 -3
- package/docs/content/template-design.md +3 -3
- package/docs/content/template-dispatch.md +1 -1
- package/docs/content/template-forms.md +1 -1
- package/docs/content/template-mail.md +1 -1
- package/docs/content/what-is-agent-native.md +4 -4
- package/docs/content/workspace.md +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-chat-adapter.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAahF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-chat-adapter.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAahF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA6LrE;;;;GAIG;AACH;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC3C,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,eAAe,GAAG,SAAS,CAAA;KAAE,CAAC;IACrD,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CACzD,GAAG,gBAAgB,CA8tBnB"}
|
|
@@ -5,6 +5,7 @@ import { normalizeChatError } from "./error-format.js";
|
|
|
5
5
|
const AUTO_CONTINUE_PROMPT = "Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.";
|
|
6
6
|
const MAX_RECONNECT_ATTEMPTS = 5;
|
|
7
7
|
const MAX_STARTUP_RECOVERY_ATTEMPTS = 8;
|
|
8
|
+
const MAX_STALE_RUN_CONTINUATIONS = 3;
|
|
8
9
|
const MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;
|
|
9
10
|
const MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;
|
|
10
11
|
const RETRY_BASE_DELAY_MS = 500;
|
|
@@ -55,11 +56,13 @@ function snapshotContent(content) {
|
|
|
55
56
|
function autoContinueMessage(signal) {
|
|
56
57
|
const reason = signal.reason === "loop_limit"
|
|
57
58
|
? "The previous run reached an internal step budget."
|
|
58
|
-
: signal.reason === "
|
|
59
|
-
? "The previous run stopped
|
|
60
|
-
: signal.reason === "
|
|
61
|
-
? "The previous
|
|
62
|
-
:
|
|
59
|
+
: signal.reason === "stale_run"
|
|
60
|
+
? "The previous run stopped unexpectedly in the server runtime before it could finish."
|
|
61
|
+
: signal.reason === "no_progress"
|
|
62
|
+
? "The previous run stopped producing progress events while the connection stayed open."
|
|
63
|
+
: signal.reason === "stream_ended"
|
|
64
|
+
? "The previous stream ended before the agent sent a final completion signal."
|
|
65
|
+
: "The previous run reached an internal execution budget.";
|
|
63
66
|
return `${AUTO_CONTINUE_PROMPT}\n\nInternal note: ${reason}`;
|
|
64
67
|
}
|
|
65
68
|
function delay(ms, abortSignal) {
|
|
@@ -218,6 +221,9 @@ export function createAgentChatAdapter(options) {
|
|
|
218
221
|
}
|
|
219
222
|
}
|
|
220
223
|
}
|
|
224
|
+
const userMessageText = rawMessageText.trim() || attachments.length === 0
|
|
225
|
+
? rawMessageText
|
|
226
|
+
: "Use the attached context.";
|
|
221
227
|
const history = messages
|
|
222
228
|
.slice(0, -1) // exclude the latest user message
|
|
223
229
|
.filter((m) => m.role === "user" || m.role === "assistant")
|
|
@@ -239,11 +245,12 @@ export function createAgentChatAdapter(options) {
|
|
|
239
245
|
const toolCallCounter = { value: 0 };
|
|
240
246
|
let runId = null;
|
|
241
247
|
let lastSeq = -1;
|
|
242
|
-
let currentMessageText = normalizeMentions(
|
|
248
|
+
let currentMessageText = normalizeMentions(userMessageText);
|
|
243
249
|
let currentHistory = history;
|
|
244
250
|
let includeAttachments = attachments.length > 0;
|
|
245
251
|
let includeReferences = Boolean(runConfig?.custom?.references);
|
|
246
252
|
let startupRecoveryAttempts = 0;
|
|
253
|
+
let staleRunContinuationAttempts = 0;
|
|
247
254
|
let stalledTransientContinuationAttempts = 0;
|
|
248
255
|
let totalTransientContinuationAttempts = 0;
|
|
249
256
|
const continuationHistoryFragments = [];
|
|
@@ -255,6 +262,7 @@ export function createAgentChatAdapter(options) {
|
|
|
255
262
|
lastAutoContinueReason
|
|
256
263
|
? `last_auto_continue_reason: ${lastAutoContinueReason}`
|
|
257
264
|
: "",
|
|
265
|
+
`stale_run_continuations: ${staleRunContinuationAttempts}`,
|
|
258
266
|
`stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,
|
|
259
267
|
`total_transient_continuations: ${totalTransientContinuationAttempts}`,
|
|
260
268
|
attemptedRunIds.length > 0
|
|
@@ -380,6 +388,12 @@ export function createAgentChatAdapter(options) {
|
|
|
380
388
|
}
|
|
381
389
|
else {
|
|
382
390
|
totalTransientContinuationAttempts += 1;
|
|
391
|
+
if (signal.reason === "stale_run") {
|
|
392
|
+
staleRunContinuationAttempts += 1;
|
|
393
|
+
if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {
|
|
394
|
+
return { ok: false, resetVisibleContent: false };
|
|
395
|
+
}
|
|
396
|
+
}
|
|
383
397
|
stalledTransientContinuationAttempts = madeProgress
|
|
384
398
|
? 0
|
|
385
399
|
: stalledTransientContinuationAttempts + 1;
|
|
@@ -398,7 +412,7 @@ export function createAgentChatAdapter(options) {
|
|
|
398
412
|
: [...continuationHistoryFragments, currentPartialHistory]);
|
|
399
413
|
currentHistory = [
|
|
400
414
|
...history,
|
|
401
|
-
{ role: "user", content: normalizeMentions(
|
|
415
|
+
{ role: "user", content: normalizeMentions(userMessageText) },
|
|
402
416
|
...(partialHistory
|
|
403
417
|
? [{ role: "assistant", content: partialHistory }]
|
|
404
418
|
: []),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { normalizeChatError } from \"./error-format.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;\nconst MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction hasContinuationProgress(content: ContentPart[]): boolean {\n return content.some((part) =>\n part.type === \"text\"\n ? part.text.trim().length > 0\n : part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"authentication required\") ||\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"session expired\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"405\")\n );\n}\n\nfunction isMissingCredentialMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"apikey\") ||\n msg.includes(\"authtoken\") ||\n msg.includes(\"anthropic_api_key\") ||\n msg.includes(\"missing_api_key\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"missing credentials\") ||\n msg.includes(\"no llm provider\") ||\n msg.includes(\"llm provider is connected\")\n );\n}\n\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const requestMode =\n execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments: {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n }[] = [];\n if (lastUserMsg && \"attachments\" in lastUserMsg) {\n const msgAttachments = (\n lastUserMsg as {\n attachments?: readonly {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n }[];\n }\n ).attachments;\n for (const att of msgAttachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType:\n att.contentType ??\n (typeof part.mimeType === \"string\"\n ? part.mimeType\n : undefined),\n ...(part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: part.data }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: part.text,\n });\n }\n }\n }\n }\n\n const history = messages\n .slice(0, -1) // exclude the latest user message\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content: m.content\n .filter(\n (p): p is { type: \"text\"; text: string } => p.type === \"text\",\n )\n .map((p) => p.text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\"))\n .join(\"\\n\"),\n }))\n .filter((m) => m.content.trim());\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(rawMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let startupRecoveryAttempts = 0;\n let stalledTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n let lastAutoContinueReason: string | null = null;\n const attemptedRunIds: string[] = [];\n\n const connectionRecoveryDetails = (): string => {\n return [\n lastAutoContinueReason\n ? `last_auto_continue_reason: ${lastAutoContinueReason}`\n : \"\",\n `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,\n `total_transient_continuations: ${totalTransientContinuationAttempts}`,\n attemptedRunIds.length > 0\n ? `attempted_runs: ${attemptedRunIds.join(\", \")}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n };\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) break;\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) return false;\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n if (!attemptedRunIds.includes(activeRunId)) {\n attemptedRunIds.push(activeRunId);\n }\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n lastAutoContinueReason = signal.reason;\n const isTransient = signal.reason !== \"loop_limit\";\n const visibleContent = visibleContentForContinuation();\n const currentPartialHistory =\n contentToContinuationHistory(visibleContent);\n const madeProgress = hasContinuationProgress(visibleContent);\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n stalledTransientContinuationAttempts = madeProgress\n ? 0\n : stalledTransientContinuationAttempts + 1;\n if (\n stalledTransientContinuationAttempts >\n MAX_STALLED_TRANSIENT_CONTINUATIONS ||\n totalTransientContinuationAttempts >\n MAX_TOTAL_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(rawMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentMessageText = autoContinueMessage(signal);\n includeAttachments = false;\n includeReferences = false;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n history: currentHistory,\n ...(threadId ? { threadId } : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n if (!attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n if (res.status === 401 || res.status === 403) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"auth-required\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n // 405 Method Not Allowed usually means the session is broken/expired\n // (e.g. a redirect to a login page that only accepts GET).\n if (res.status === 405) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"session-expired\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n let errorText = `Server error: ${res.status}`;\n try {\n const body = await res.text();\n if (isAuthErrorMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"auth-required\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n if (isMissingCredentialMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && !attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError = isAuthErrorMessage(errMsg);\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:auth-error\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n if (isMissingCredentialMessage(errMsg)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { normalizeChatError } from \"./error-format.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_STALE_RUN_CONTINUATIONS = 3;\nconst MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;\nconst MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction hasContinuationProgress(content: ContentPart[]): boolean {\n return content.some((part) =>\n part.type === \"text\"\n ? part.text.trim().length > 0\n : part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"stale_run\"\n ? \"The previous run stopped unexpectedly in the server runtime before it could finish.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"authentication required\") ||\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"session expired\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"405\")\n );\n}\n\nfunction isMissingCredentialMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"apikey\") ||\n msg.includes(\"authtoken\") ||\n msg.includes(\"anthropic_api_key\") ||\n msg.includes(\"missing_api_key\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"missing credentials\") ||\n msg.includes(\"no llm provider\") ||\n msg.includes(\"llm provider is connected\")\n );\n}\n\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const requestMode =\n execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments: {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n }[] = [];\n if (lastUserMsg && \"attachments\" in lastUserMsg) {\n const msgAttachments = (\n lastUserMsg as {\n attachments?: readonly {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n }[];\n }\n ).attachments;\n for (const att of msgAttachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType:\n att.contentType ??\n (typeof part.mimeType === \"string\"\n ? part.mimeType\n : undefined),\n ...(part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: part.data }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: part.text,\n });\n }\n }\n }\n }\n const userMessageText =\n rawMessageText.trim() || attachments.length === 0\n ? rawMessageText\n : \"Use the attached context.\";\n\n const history = messages\n .slice(0, -1) // exclude the latest user message\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content: m.content\n .filter(\n (p): p is { type: \"text\"; text: string } => p.type === \"text\",\n )\n .map((p) => p.text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\"))\n .join(\"\\n\"),\n }))\n .filter((m) => m.content.trim());\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(userMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let startupRecoveryAttempts = 0;\n let staleRunContinuationAttempts = 0;\n let stalledTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n let lastAutoContinueReason: string | null = null;\n const attemptedRunIds: string[] = [];\n\n const connectionRecoveryDetails = (): string => {\n return [\n lastAutoContinueReason\n ? `last_auto_continue_reason: ${lastAutoContinueReason}`\n : \"\",\n `stale_run_continuations: ${staleRunContinuationAttempts}`,\n `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,\n `total_transient_continuations: ${totalTransientContinuationAttempts}`,\n attemptedRunIds.length > 0\n ? `attempted_runs: ${attemptedRunIds.join(\", \")}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n };\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) break;\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) return false;\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n if (!attemptedRunIds.includes(activeRunId)) {\n attemptedRunIds.push(activeRunId);\n }\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n lastAutoContinueReason = signal.reason;\n const isTransient = signal.reason !== \"loop_limit\";\n const visibleContent = visibleContentForContinuation();\n const currentPartialHistory =\n contentToContinuationHistory(visibleContent);\n const madeProgress = hasContinuationProgress(visibleContent);\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts += 1;\n if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n stalledTransientContinuationAttempts = madeProgress\n ? 0\n : stalledTransientContinuationAttempts + 1;\n if (\n stalledTransientContinuationAttempts >\n MAX_STALLED_TRANSIENT_CONTINUATIONS ||\n totalTransientContinuationAttempts >\n MAX_TOTAL_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(userMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentMessageText = autoContinueMessage(signal);\n includeAttachments = false;\n includeReferences = false;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n history: currentHistory,\n ...(threadId ? { threadId } : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n if (!attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n if (res.status === 401 || res.status === 403) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"auth-required\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n // 405 Method Not Allowed usually means the session is broken/expired\n // (e.g. a redirect to a login page that only accepts GET).\n if (res.status === 405) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"session-expired\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n let errorText = `Server error: ${res.status}`;\n try {\n const body = await res.text();\n if (isAuthErrorMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"auth-required\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n if (isMissingCredentialMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && !attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError = isAuthErrorMessage(errMsg);\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:auth-error\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n if (isMissingCredentialMessage(errMsg)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-sidebar-state.d.ts","sourceRoot":"","sources":["../../src/client/agent-sidebar-state.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAE5D,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAsBxE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isInBuilderFrame } from "./builder-frame.js";
|
|
2
|
+
export const SIDEBAR_OPEN_KEY = "agent-native-sidebar-open";
|
|
3
|
+
export function getInitialAgentSidebarOpen(defaultOpen) {
|
|
4
|
+
// On mobile viewports the sidebar would cover most of the screen, so
|
|
5
|
+
// always start closed regardless of any persisted desktop preference.
|
|
6
|
+
if (typeof window !== "undefined" &&
|
|
7
|
+
window.matchMedia("(max-width: 767px)").matches) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
// Builder owns the code/chat surface around embedded apps. Start the
|
|
11
|
+
// app-native chat collapsed there even if a previous standalone session
|
|
12
|
+
// persisted it as open.
|
|
13
|
+
if (isInBuilderFrame()) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const saved = localStorage.getItem(SIDEBAR_OPEN_KEY);
|
|
18
|
+
if (saved !== null)
|
|
19
|
+
return saved === "true";
|
|
20
|
+
}
|
|
21
|
+
catch { }
|
|
22
|
+
return defaultOpen;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=agent-sidebar-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-sidebar-state.js","sourceRoot":"","sources":["../../src/client/agent-sidebar-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,MAAM,UAAU,0BAA0B,CAAC,WAAoB;IAC7D,qEAAqE;IACrE,sEAAsE;IACtE,IACE,OAAO,MAAM,KAAK,WAAW;QAC7B,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAC/C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qEAAqE;IACrE,wEAAwE;IACxE,wBAAwB;IACxB,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,KAAK,MAAM,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["import { isInBuilderFrame } from \"./builder-frame.js\";\n\nexport const SIDEBAR_OPEN_KEY = \"agent-native-sidebar-open\";\n\nexport function getInitialAgentSidebarOpen(defaultOpen: boolean): boolean {\n // On mobile viewports the sidebar would cover most of the screen, so\n // always start closed regardless of any persisted desktop preference.\n if (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(max-width: 767px)\").matches\n ) {\n return false;\n }\n\n // Builder owns the code/chat surface around embedded apps. Start the\n // app-native chat collapsed there even if a previous standalone session\n // persisted it as open.\n if (isInBuilderFrame()) {\n return false;\n }\n\n try {\n const saved = localStorage.getItem(SIDEBAR_OPEN_KEY);\n if (saved !== null) return saved === \"true\";\n } catch {}\n return defaultOpen;\n}\n"]}
|
|
@@ -18,6 +18,31 @@ type SentryUser = {
|
|
|
18
18
|
* for filtering Sentry by tenant.
|
|
19
19
|
*/
|
|
20
20
|
export declare function setSentryUser(user: SentryUser | null, orgId?: string | null): void;
|
|
21
|
+
export interface ClientCaptureContext {
|
|
22
|
+
/** Searchable Sentry tags (low-cardinality strings only). */
|
|
23
|
+
tags?: Record<string, string | undefined>;
|
|
24
|
+
/**
|
|
25
|
+
* High-cardinality / structured payload — not searchable but visible in
|
|
26
|
+
* the Sentry event detail (file sizes, request URLs, response body
|
|
27
|
+
* tails, etc.).
|
|
28
|
+
*/
|
|
29
|
+
extra?: Record<string, unknown>;
|
|
30
|
+
/**
|
|
31
|
+
* Grouped contexts shown as separate cards in the Sentry event UI.
|
|
32
|
+
*/
|
|
33
|
+
contexts?: Record<string, Record<string, unknown>>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Capture an exception to Sentry from browser code without forcing the
|
|
37
|
+
* caller to depend on `@sentry/browser` directly.
|
|
38
|
+
*
|
|
39
|
+
* Templates can route a thrown Error through here on a known failure path
|
|
40
|
+
* (chunk-upload 500, thumbnail upload, etc.) to attach searchable tags and
|
|
41
|
+
* structured extra context. No-ops gracefully when Sentry isn't
|
|
42
|
+
* initialized — never throws back into the caller, so a Sentry hiccup
|
|
43
|
+
* can't mask the original error.
|
|
44
|
+
*/
|
|
45
|
+
export declare function captureClientException(error: unknown, context?: ClientCaptureContext): string | undefined;
|
|
21
46
|
export declare function configureTracking(options: {
|
|
22
47
|
getDefaultProps?: GetDefaultProps;
|
|
23
48
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KACjC;CACF;AAED,KAAK,eAAe,GAAG,CACrB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAO7B,KAAK,UAAU,GAAG;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AA4HF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,GAAG,IAAI,EACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,IAAI,CAYN;AAeD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,IAAI,CASP;AAiJD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CASN;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAE1D"}
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KACjC;CACF;AAED,KAAK,eAAe,GAAG,CACrB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAO7B,KAAK,UAAU,GAAG;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AA4HF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,GAAG,IAAI,EACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,IAAI,CAYN;AAED,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1C;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,MAAM,GAAG,SAAS,CAyBpB;AAeD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,IAAI,CASP;AAiJD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CASN;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAE1D"}
|
package/dist/client/analytics.js
CHANGED
|
@@ -138,6 +138,46 @@ export function setSentryUser(user, orgId) {
|
|
|
138
138
|
_pendingSentryOrgId = orgId ?? null;
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Capture an exception to Sentry from browser code without forcing the
|
|
143
|
+
* caller to depend on `@sentry/browser` directly.
|
|
144
|
+
*
|
|
145
|
+
* Templates can route a thrown Error through here on a known failure path
|
|
146
|
+
* (chunk-upload 500, thumbnail upload, etc.) to attach searchable tags and
|
|
147
|
+
* structured extra context. No-ops gracefully when Sentry isn't
|
|
148
|
+
* initialized — never throws back into the caller, so a Sentry hiccup
|
|
149
|
+
* can't mask the original error.
|
|
150
|
+
*/
|
|
151
|
+
export function captureClientException(error, context = {}) {
|
|
152
|
+
if (typeof window === "undefined")
|
|
153
|
+
return undefined;
|
|
154
|
+
try {
|
|
155
|
+
ensureSentry();
|
|
156
|
+
return Sentry.withScope((scope) => {
|
|
157
|
+
if (context.tags) {
|
|
158
|
+
for (const [k, v] of Object.entries(context.tags)) {
|
|
159
|
+
if (typeof v === "string")
|
|
160
|
+
scope.setTag(k, v);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (context.extra) {
|
|
164
|
+
for (const [k, v] of Object.entries(context.extra)) {
|
|
165
|
+
if (v !== undefined)
|
|
166
|
+
scope.setExtra(k, v);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (context.contexts) {
|
|
170
|
+
for (const [k, v] of Object.entries(context.contexts)) {
|
|
171
|
+
scope.setContext(k, v);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return Sentry.captureException(error);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
141
181
|
function getPageviewTrackingState() {
|
|
142
182
|
const g = globalThis;
|
|
143
183
|
if (!g[PAGEVIEW_TRACKING_STATE_KEY]) {
|