@agent-native/core 0.8.2 → 0.10.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/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 +28 -11
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +10 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +89 -7
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +4 -1
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +6 -5
- package/dist/agent/run-store.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 +9 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +29 -11
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +177 -22
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/workspace-dev.js +66 -5
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +6 -20
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +146 -107
- 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 +143 -22
- 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 +39 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +74 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/components/PresenceBar.d.ts.map +1 -1
- package/dist/client/components/PresenceBar.js +21 -15
- package/dist/client/components/PresenceBar.js.map +1 -1
- 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 +51 -17
- 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 +31 -5
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +9 -8
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.js +4 -3
- 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 +14 -3
- 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 -5
- 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 +2 -1
- 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 +40 -19
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +52 -51
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationCard.js +2 -1
- package/dist/client/integrations/IntegrationCard.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +3 -2
- package/dist/client/integrations/IntegrationsPanel.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/onboarding/OnboardingPanel.d.ts.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +3 -2
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
- package/dist/client/onboarding/SetupButton.js +14 -13
- package/dist/client/onboarding/SetupButton.js.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts +8 -2
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.js +28 -7
- package/dist/client/org/InvitationBanner.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +29 -5
- 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 +9 -7
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +2 -1
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +48 -14
- 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/AgentsSection.d.ts.map +1 -1
- package/dist/client/settings/AgentsSection.js +8 -7
- package/dist/client/settings/AgentsSection.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +4 -3
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +11 -1
- 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 +15 -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/index.d.ts +1 -1
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.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 +59 -11
- 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/client/use-session.d.ts.map +1 -1
- package/dist/client/use-session.js +14 -2
- package/dist/client/use-session.js.map +1 -1
- package/dist/collab/client.d.ts +1 -0
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +18 -1
- package/dist/collab/client.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +5 -0
- 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/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/auto-join-domain.d.ts +28 -0
- package/dist/org/auto-join-domain.d.ts.map +1 -0
- package/dist/org/auto-join-domain.js +92 -0
- package/dist/org/auto-join-domain.js.map +1 -0
- package/dist/org/index.d.ts +2 -0
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +1 -0
- package/dist/org/index.js.map +1 -1
- package/dist/scripts/db/exec.d.ts.map +1 -1
- package/dist/scripts/db/exec.js +27 -1
- package/dist/scripts/db/exec.js.map +1 -1
- package/dist/scripts/db/index.d.ts.map +1 -1
- package/dist/scripts/db/index.js +1 -0
- package/dist/scripts/db/index.js.map +1 -1
- package/dist/scripts/db/reset-dev-owner.d.ts +27 -0
- package/dist/scripts/db/reset-dev-owner.d.ts.map +1 -0
- package/dist/scripts/db/reset-dev-owner.js +225 -0
- package/dist/scripts/db/reset-dev-owner.js.map +1 -0
- package/dist/scripts/db/scoping.d.ts.map +1 -1
- package/dist/scripts/db/scoping.js +15 -30
- package/dist/scripts/db/scoping.js.map +1 -1
- package/dist/scripts/dev-session.d.ts +46 -0
- package/dist/scripts/dev-session.d.ts.map +1 -0
- package/dist/scripts/dev-session.js +81 -0
- package/dist/scripts/dev-session.js.map +1 -0
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +21 -0
- package/dist/scripts/runner.js.map +1 -1
- package/dist/secrets/register.d.ts +1 -1
- package/dist/secrets/register.d.ts.map +1 -1
- package/dist/secrets/register.js +4 -2
- package/dist/secrets/register.js.map +1 -1
- package/dist/secrets/routes.d.ts.map +1 -1
- package/dist/secrets/routes.js +32 -0
- package/dist/secrets/routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +77 -102
- 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/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +11 -0
- package/dist/server/better-auth-instance.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/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +56 -13
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +49 -6
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +133 -38
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/design-token-utils.d.ts +13 -2
- package/dist/server/design-token-utils.d.ts.map +1 -1
- package/dist/server/design-token-utils.js +48 -16
- package/dist/server/design-token-utils.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-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 +142 -14
- 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 +1 -1
|
@@ -9,7 +9,7 @@ import { attachToolSearch } from "../agent/tool-search.js";
|
|
|
9
9
|
import { McpClientManager, loadMcpConfig, autoDetectMcpConfig, mcpToolsToActionEntries, syncMcpActionEntries, mountMcpServersRoutes, mountMcpHubRoutes, buildMergedConfig, getHubStatus, isHubServeEnabled, } from "../mcp-client/index.js";
|
|
10
10
|
import { discoverAgents } from "./agent-discovery.js";
|
|
11
11
|
import { loadSchemaPromptBlock } from "./schema-prompt.js";
|
|
12
|
-
import { buildAssistantMessage, extractThreadMeta, } from "../agent/thread-data-builder.js";
|
|
12
|
+
import { buildAssistantMessage, extractThreadMeta, upsertAssistantMessage, } from "../agent/thread-data-builder.js";
|
|
13
13
|
import { defineEventHandler, setResponseStatus, setResponseHeader, getMethod, getQuery, getHeader, } from "h3";
|
|
14
14
|
import { getSession } from "./auth.js";
|
|
15
15
|
import { getOrigin } from "./google-oauth.js";
|
|
@@ -768,7 +768,7 @@ function createBuilderBrowserTool(deps) {
|
|
|
768
768
|
return {
|
|
769
769
|
"connect-builder": {
|
|
770
770
|
tool: {
|
|
771
|
-
description: "Render a Builder.io card inline in the chat. Call this IMMEDIATELY — no exploration, no planning —
|
|
771
|
+
description: "Render a Builder.io card inline in the chat. Call this IMMEDIATELY — no exploration, no planning — when the user asks to modify the APP'S OWN SOURCE CODE: add a feature, change the UI chrome, edit a React component, add a route, add an integration, fix a bug in the app itself, or anything else that requires source-file edits while in hosted/production mode. Do NOT call this for content the app is meant to produce — creating a video, generating a design, drafting an email, building a slide deck, making a dashboard, etc. — those run through the app's own domain actions, not Builder. Do NOT mention 'click Send to Builder' in your response unless this card is already in the conversation. If Builder is already connected, the card shows a 'Send to Builder' button that hands the work off to Builder's cloud agent and returns a branch URL. When you call this for a code-change request, pass the user's request verbatim as the `prompt` arg so the card can forward it to Builder unchanged.",
|
|
772
772
|
parameters: {
|
|
773
773
|
type: "object",
|
|
774
774
|
properties: {
|
|
@@ -2599,37 +2599,7 @@ export function createAgentChatPlugin(options) {
|
|
|
2599
2599
|
}
|
|
2600
2600
|
if (!Array.isArray(repo.messages))
|
|
2601
2601
|
repo.messages = [];
|
|
2602
|
-
|
|
2603
|
-
// Check both wrapped ({ message: { role } }) and unwrapped ({ role }) formats
|
|
2604
|
-
const lastRole = lastMsg?.message?.role ?? lastMsg?.role;
|
|
2605
|
-
const lastContent = lastMsg?.message?.content ?? lastMsg?.content;
|
|
2606
|
-
const lastContentIsEmpty = Array.isArray(lastContent)
|
|
2607
|
-
? lastContent.length === 0
|
|
2608
|
-
: lastContent == null || lastContent === "";
|
|
2609
|
-
if (lastRole === "assistant" && !lastContentIsEmpty) {
|
|
2610
|
-
// Frontend already saved the assistant response — just bump timestamp
|
|
2611
|
-
await updateThreadData(threadId, thread.threadData, thread.title, thread.preview, thread.messageCount);
|
|
2612
|
-
return;
|
|
2613
|
-
}
|
|
2614
|
-
if (lastRole === "assistant" && lastContentIsEmpty) {
|
|
2615
|
-
// The frontend wrote an empty assistant placeholder before the stream
|
|
2616
|
-
// had any content (common when the user reloads mid-run, and the 5s
|
|
2617
|
-
// periodic save raced with the first text chunk). Replace it with
|
|
2618
|
-
// the server's reconstructed message so the turn isn't lost.
|
|
2619
|
-
repo.messages.pop();
|
|
2620
|
-
}
|
|
2621
|
-
// Determine if repo uses wrapped format ({ message, parentId }) or flat format
|
|
2622
|
-
const isWrapped = lastMsg && "message" in lastMsg;
|
|
2623
|
-
if (isWrapped) {
|
|
2624
|
-
const parentId = repo.messages.length > 0
|
|
2625
|
-
? (repo.messages[repo.messages.length - 1].message?.id ??
|
|
2626
|
-
null)
|
|
2627
|
-
: null;
|
|
2628
|
-
repo.messages.push({ message: assistantMsg, parentId });
|
|
2629
|
-
}
|
|
2630
|
-
else {
|
|
2631
|
-
repo.messages.push(assistantMsg);
|
|
2632
|
-
}
|
|
2602
|
+
repo = upsertAssistantMessage(repo, assistantMsg);
|
|
2633
2603
|
// Store debug metadata so we can inspect what the LLM actually
|
|
2634
2604
|
// received (system prompt, model, engine) when diagnosing issues.
|
|
2635
2605
|
const runCtx = getRequestRunContext();
|
|
@@ -2646,86 +2616,91 @@ export function createAgentChatPlugin(options) {
|
|
|
2646
2616
|
// Best-effort — don't break cleanup
|
|
2647
2617
|
}
|
|
2648
2618
|
});
|
|
2649
|
-
//
|
|
2650
|
-
//
|
|
2651
|
-
//
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2619
|
+
// Keep SQL run completion gated only on durable thread data. Follow-up
|
|
2620
|
+
// hooks are useful, but they should never leave agent_runs stuck
|
|
2621
|
+
// "running" if an automation/checkpoint path stalls.
|
|
2622
|
+
void (async () => {
|
|
2623
|
+
// Emit agent.turn.completed for automation triggers.
|
|
2624
|
+
//
|
|
2625
|
+
// SECURITY: include `owner` so the trigger dispatcher's tenant-scope
|
|
2626
|
+
// check engages (see triggers/dispatcher.ts:212-218). Without an
|
|
2627
|
+
// owner, every user's matching `agent.turn.completed` trigger
|
|
2628
|
+
// would fire when ANY user's chat turn completes — cross-tenant
|
|
2629
|
+
// fan-out (audit 12 #9). Owner comes from the thread row when
|
|
2630
|
+
// available (most reliable; persisted at thread create time),
|
|
2631
|
+
// falling back to the current run context's owner. If neither
|
|
2632
|
+
// resolves we skip emission entirely rather than emit unowned.
|
|
2661
2633
|
try {
|
|
2662
|
-
|
|
2663
|
-
|
|
2634
|
+
let ownerEmail;
|
|
2635
|
+
try {
|
|
2636
|
+
const ownerThread = await getThread(threadId);
|
|
2637
|
+
ownerEmail = ownerThread?.ownerEmail;
|
|
2638
|
+
}
|
|
2639
|
+
catch {
|
|
2640
|
+
// ignore — fall through to run-context owner
|
|
2641
|
+
}
|
|
2642
|
+
if (!ownerEmail) {
|
|
2643
|
+
ownerEmail = getRequestRunContext()?.owner;
|
|
2644
|
+
}
|
|
2645
|
+
if (ownerEmail) {
|
|
2646
|
+
const { emit } = await import("../event-bus/index.js");
|
|
2647
|
+
emit("agent.turn.completed", { threadId, model: resolvedModel }, { owner: ownerEmail });
|
|
2648
|
+
}
|
|
2664
2649
|
}
|
|
2665
2650
|
catch {
|
|
2666
|
-
//
|
|
2667
|
-
}
|
|
2668
|
-
if (!ownerEmail) {
|
|
2669
|
-
ownerEmail = getRequestRunContext()?.owner;
|
|
2651
|
+
// Event bus not available — skip
|
|
2670
2652
|
}
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
if (isGitRepo(cwd) && hasUncommittedChanges(cwd)) {
|
|
2685
|
-
let summary = "";
|
|
2686
|
-
// Try to extract the first sentence of the assistant's text response
|
|
2687
|
-
let assistantText = "";
|
|
2688
|
-
for (const { event } of run.events ?? []) {
|
|
2689
|
-
if (event.type === "text" && typeof event.text === "string") {
|
|
2690
|
-
assistantText += event.text;
|
|
2653
|
+
// Auto-checkpoint in dev mode after file-modifying agent turns
|
|
2654
|
+
if (isDevMode()) {
|
|
2655
|
+
try {
|
|
2656
|
+
const { createCheckpoint: gitCheckpoint, isGitRepo, hasUncommittedChanges, getChangedFileNames, } = await import("../checkpoints/service.js");
|
|
2657
|
+
const cwd = process.cwd();
|
|
2658
|
+
if (isGitRepo(cwd) && hasUncommittedChanges(cwd)) {
|
|
2659
|
+
let summary = "";
|
|
2660
|
+
// Try to extract the first sentence of the assistant's text response
|
|
2661
|
+
let assistantText = "";
|
|
2662
|
+
for (const { event } of run.events ?? []) {
|
|
2663
|
+
if (event.type === "text" && typeof event.text === "string") {
|
|
2664
|
+
assistantText += event.text;
|
|
2665
|
+
}
|
|
2691
2666
|
}
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
.
|
|
2699
|
-
|
|
2700
|
-
|
|
2667
|
+
assistantText = assistantText.trim();
|
|
2668
|
+
if (assistantText) {
|
|
2669
|
+
const firstSentence = assistantText
|
|
2670
|
+
.split(/(?<=[.!?\n])\s/)[0]
|
|
2671
|
+
?.replace(/\n/g, " ")
|
|
2672
|
+
.trim();
|
|
2673
|
+
if (firstSentence && firstSentence.length <= 120) {
|
|
2674
|
+
summary = firstSentence;
|
|
2675
|
+
}
|
|
2676
|
+
else if (firstSentence) {
|
|
2677
|
+
summary = firstSentence.slice(0, 117) + "...";
|
|
2678
|
+
}
|
|
2701
2679
|
}
|
|
2702
|
-
|
|
2703
|
-
|
|
2680
|
+
// Fall back to listing changed files
|
|
2681
|
+
if (!summary) {
|
|
2682
|
+
const files = getChangedFileNames(cwd);
|
|
2683
|
+
if (files.length > 0) {
|
|
2684
|
+
summary = `Update ${files.join(", ")}`;
|
|
2685
|
+
}
|
|
2704
2686
|
}
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2687
|
+
if (!summary)
|
|
2688
|
+
summary = "Agent turn";
|
|
2689
|
+
if (summary.length > 120)
|
|
2690
|
+
summary = summary.slice(0, 117) + "...";
|
|
2691
|
+
const sha = gitCheckpoint(cwd, summary);
|
|
2692
|
+
if (sha) {
|
|
2693
|
+
const { insertCheckpoint } = await import("../checkpoints/store.js");
|
|
2694
|
+
const cpId = `cp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
2695
|
+
await insertCheckpoint(cpId, threadId, run.runId, sha, summary);
|
|
2711
2696
|
}
|
|
2712
2697
|
}
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
summary = summary.slice(0, 117) + "...";
|
|
2717
|
-
const sha = gitCheckpoint(cwd, summary);
|
|
2718
|
-
if (sha) {
|
|
2719
|
-
const { insertCheckpoint } = await import("../checkpoints/store.js");
|
|
2720
|
-
const cpId = `cp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
2721
|
-
await insertCheckpoint(cpId, threadId, run.runId, sha, summary);
|
|
2722
|
-
}
|
|
2698
|
+
}
|
|
2699
|
+
catch {
|
|
2700
|
+
// Checkpointing is best-effort — never break the run
|
|
2723
2701
|
}
|
|
2724
2702
|
}
|
|
2725
|
-
|
|
2726
|
-
// Checkpointing is best-effort — never break the run
|
|
2727
|
-
}
|
|
2728
|
-
}
|
|
2703
|
+
})();
|
|
2729
2704
|
};
|
|
2730
2705
|
// ─── Agent Teams: per-run send reference ─────────────────────────
|
|
2731
2706
|
// Team tools need to emit events to the parent chat's SSE stream.
|