@agent-native/core 0.8.1 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/agent/run-manager.d.ts +10 -0
  2. package/dist/agent/run-manager.d.ts.map +1 -1
  3. package/dist/agent/run-manager.js +77 -4
  4. package/dist/agent/run-manager.js.map +1 -1
  5. package/dist/agent/run-store.d.ts +4 -1
  6. package/dist/agent/run-store.d.ts.map +1 -1
  7. package/dist/agent/run-store.js +6 -5
  8. package/dist/agent/run-store.js.map +1 -1
  9. package/dist/cli/create.d.ts +26 -1
  10. package/dist/cli/create.d.ts.map +1 -1
  11. package/dist/cli/create.js +62 -18
  12. package/dist/cli/create.js.map +1 -1
  13. package/dist/cli/index.js +177 -22
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/workspace-dev.js +66 -5
  16. package/dist/cli/workspace-dev.js.map +1 -1
  17. package/dist/client/AgentPanel.d.ts +2 -0
  18. package/dist/client/AgentPanel.d.ts.map +1 -1
  19. package/dist/client/AgentPanel.js +4 -3
  20. package/dist/client/AgentPanel.js.map +1 -1
  21. package/dist/client/AssistantChat.d.ts.map +1 -1
  22. package/dist/client/AssistantChat.js +38 -84
  23. package/dist/client/AssistantChat.js.map +1 -1
  24. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  25. package/dist/client/agent-chat-adapter.js +122 -15
  26. package/dist/client/agent-chat-adapter.js.map +1 -1
  27. package/dist/client/analytics.d.ts +14 -0
  28. package/dist/client/analytics.d.ts.map +1 -1
  29. package/dist/client/analytics.js +34 -0
  30. package/dist/client/analytics.js.map +1 -1
  31. package/dist/client/components/PresenceBar.d.ts.map +1 -1
  32. package/dist/client/components/PresenceBar.js +21 -15
  33. package/dist/client/components/PresenceBar.js.map +1 -1
  34. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  35. package/dist/client/composer/ComposerPlusMenu.js +12 -11
  36. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  37. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  38. package/dist/client/composer/TiptapComposer.js +5 -4
  39. package/dist/client/composer/TiptapComposer.js.map +1 -1
  40. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  41. package/dist/client/composer/VoiceButton.js +9 -8
  42. package/dist/client/composer/VoiceButton.js.map +1 -1
  43. package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
  44. package/dist/client/dev-overlay/DevOverlay.js +4 -3
  45. package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
  46. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  47. package/dist/client/extensions/EmbeddedExtension.js +2 -1
  48. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  49. package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
  50. package/dist/client/extensions/ExtensionEditor.js +2 -1
  51. package/dist/client/extensions/ExtensionEditor.js.map +1 -1
  52. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  53. package/dist/client/extensions/ExtensionSlot.js +2 -1
  54. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  55. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  56. package/dist/client/extensions/ExtensionViewer.js +4 -3
  57. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  58. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  59. package/dist/client/extensions/ExtensionsSidebarSection.js +10 -9
  60. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  61. package/dist/client/index.d.ts +3 -1
  62. package/dist/client/index.d.ts.map +1 -1
  63. package/dist/client/index.js +3 -1
  64. package/dist/client/index.js.map +1 -1
  65. package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
  66. package/dist/client/integrations/IntegrationCard.js +2 -1
  67. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  68. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  69. package/dist/client/integrations/IntegrationsPanel.js +3 -2
  70. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  71. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  72. package/dist/client/onboarding/OnboardingPanel.js +3 -2
  73. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  74. package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
  75. package/dist/client/onboarding/SetupButton.js +14 -13
  76. package/dist/client/onboarding/SetupButton.js.map +1 -1
  77. package/dist/client/org/InvitationBanner.d.ts +8 -2
  78. package/dist/client/org/InvitationBanner.d.ts.map +1 -1
  79. package/dist/client/org/InvitationBanner.js +27 -6
  80. package/dist/client/org/InvitationBanner.js.map +1 -1
  81. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  82. package/dist/client/org/OrgSwitcher.js +29 -5
  83. package/dist/client/org/OrgSwitcher.js.map +1 -1
  84. package/dist/client/org/TeamPage.d.ts.map +1 -1
  85. package/dist/client/org/TeamPage.js +7 -6
  86. package/dist/client/org/TeamPage.js.map +1 -1
  87. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  88. package/dist/client/resources/ResourceEditor.js +2 -1
  89. package/dist/client/resources/ResourceEditor.js.map +1 -1
  90. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  91. package/dist/client/resources/ResourcesPanel.js +9 -9
  92. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  93. package/dist/client/settings/AgentsSection.d.ts.map +1 -1
  94. package/dist/client/settings/AgentsSection.js +8 -7
  95. package/dist/client/settings/AgentsSection.js.map +1 -1
  96. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  97. package/dist/client/settings/AutomationsSection.js +4 -3
  98. package/dist/client/settings/AutomationsSection.js.map +1 -1
  99. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  100. package/dist/client/settings/SecretsSection.js +2 -1
  101. package/dist/client/settings/SecretsSection.js.map +1 -1
  102. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  103. package/dist/client/settings/SettingsPanel.js +3 -2
  104. package/dist/client/settings/SettingsPanel.js.map +1 -1
  105. package/dist/client/settings/index.d.ts +1 -1
  106. package/dist/client/settings/index.d.ts.map +1 -1
  107. package/dist/client/settings/index.js.map +1 -1
  108. package/dist/client/sse-event-processor.d.ts.map +1 -1
  109. package/dist/client/sse-event-processor.js +45 -4
  110. package/dist/client/sse-event-processor.js.map +1 -1
  111. package/dist/client/theme.d.ts +4 -0
  112. package/dist/client/theme.d.ts.map +1 -0
  113. package/dist/client/theme.js +13 -0
  114. package/dist/client/theme.js.map +1 -0
  115. package/dist/client/use-session.d.ts.map +1 -1
  116. package/dist/client/use-session.js +14 -2
  117. package/dist/client/use-session.js.map +1 -1
  118. package/dist/collab/client.d.ts +1 -0
  119. package/dist/collab/client.d.ts.map +1 -1
  120. package/dist/collab/client.js +18 -1
  121. package/dist/collab/client.js.map +1 -1
  122. package/dist/org/auto-join-domain.d.ts +28 -0
  123. package/dist/org/auto-join-domain.d.ts.map +1 -0
  124. package/dist/org/auto-join-domain.js +92 -0
  125. package/dist/org/auto-join-domain.js.map +1 -0
  126. package/dist/org/index.d.ts +2 -0
  127. package/dist/org/index.d.ts.map +1 -1
  128. package/dist/org/index.js +1 -0
  129. package/dist/org/index.js.map +1 -1
  130. package/dist/scripts/db/exec.d.ts.map +1 -1
  131. package/dist/scripts/db/exec.js +27 -1
  132. package/dist/scripts/db/exec.js.map +1 -1
  133. package/dist/scripts/db/index.d.ts.map +1 -1
  134. package/dist/scripts/db/index.js +1 -0
  135. package/dist/scripts/db/index.js.map +1 -1
  136. package/dist/scripts/db/reset-dev-owner.d.ts +27 -0
  137. package/dist/scripts/db/reset-dev-owner.d.ts.map +1 -0
  138. package/dist/scripts/db/reset-dev-owner.js +225 -0
  139. package/dist/scripts/db/reset-dev-owner.js.map +1 -0
  140. package/dist/scripts/db/scoping.d.ts.map +1 -1
  141. package/dist/scripts/db/scoping.js +15 -30
  142. package/dist/scripts/db/scoping.js.map +1 -1
  143. package/dist/scripts/dev-session.d.ts +46 -0
  144. package/dist/scripts/dev-session.d.ts.map +1 -0
  145. package/dist/scripts/dev-session.js +81 -0
  146. package/dist/scripts/dev-session.js.map +1 -0
  147. package/dist/scripts/runner.d.ts.map +1 -1
  148. package/dist/scripts/runner.js +21 -0
  149. package/dist/scripts/runner.js.map +1 -1
  150. package/dist/secrets/register.d.ts +1 -1
  151. package/dist/secrets/register.d.ts.map +1 -1
  152. package/dist/secrets/register.js +4 -2
  153. package/dist/secrets/register.js.map +1 -1
  154. package/dist/secrets/routes.d.ts.map +1 -1
  155. package/dist/secrets/routes.js +32 -0
  156. package/dist/secrets/routes.js.map +1 -1
  157. package/dist/server/better-auth-instance.d.ts.map +1 -1
  158. package/dist/server/better-auth-instance.js +11 -0
  159. package/dist/server/better-auth-instance.js.map +1 -1
  160. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  161. package/dist/server/core-routes-plugin.js +56 -13
  162. package/dist/server/core-routes-plugin.js.map +1 -1
  163. package/dist/server/credential-provider.d.ts +47 -4
  164. package/dist/server/credential-provider.d.ts.map +1 -1
  165. package/dist/server/credential-provider.js +105 -29
  166. package/dist/server/credential-provider.js.map +1 -1
  167. package/dist/server/design-token-utils.d.ts +13 -2
  168. package/dist/server/design-token-utils.d.ts.map +1 -1
  169. package/dist/server/design-token-utils.js +48 -16
  170. package/dist/server/design-token-utils.js.map +1 -1
  171. package/dist/server/onboarding-html.d.ts.map +1 -1
  172. package/dist/server/onboarding-html.js +97 -8
  173. package/dist/server/onboarding-html.js.map +1 -1
  174. package/dist/templates/default/app/root.tsx +4 -0
  175. package/dist/templates/default/app/routes/_index.tsx +3 -2
  176. package/dist/vite/client.d.ts.map +1 -1
  177. package/dist/vite/client.js +76 -34
  178. package/dist/vite/client.js.map +1 -1
  179. package/package.json +1 -1
  180. package/src/templates/default/app/root.tsx +4 -0
  181. package/src/templates/default/app/routes/_index.tsx +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
@@ -13,7 +13,6 @@ import { cn } from "./utils.js";
13
13
  import { AgentTaskCard } from "./AgentTaskCard.js";
14
14
  import { ConnectBuilderCard } from "./ConnectBuilderCard.js";
15
15
  import { useBuilderConnectFlow } from "./settings/useBuilderStatus.js";
16
- import { useOnboarding } from "./onboarding/use-onboarding.js";
17
16
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "./components/ui/tooltip.js";
18
17
  import { IframeEmbed, parseEmbedBody } from "./IframeEmbed.js";
19
18
  import { useDevMode } from "./use-dev-mode.js";
@@ -749,19 +748,6 @@ function ThinkingIndicator({ label = "Thinking" } = {}) {
749
748
  // window.open call is intercepted by the main process's webview popup handler,
750
749
  // which opens the flow in an Electron BrowserWindow that shares the webview's
751
750
  // session. See packages/desktop-app/src/main/index.ts.
752
- /**
753
- * The OnboardingPanel sidebar checklist also surfaces the Builder Connect
754
- * step (id `llm`). When that's visible, dropping a duplicate "Connect Builder"
755
- * button into the empty-state chat card just confuses the user — they see two
756
- * primary CTAs that do the same thing. This hook returns true when we should
757
- * suppress the in-chat Connect CTA in favor of the sidebar checklist.
758
- */
759
- function useSuppressInChatBuilderCta() {
760
- const onboarding = useOnboarding();
761
- if (onboarding.loading || onboarding.dismissed)
762
- return false;
763
- return onboarding.steps.some((step) => step.id === "llm" && !step.complete);
764
- }
765
751
  function BuilderConnectCta({ variant = "primary", }) {
766
752
  const { configured, orgName, connecting, error, start } = useBuilderConnectFlow({
767
753
  onConnected: () => {
@@ -777,48 +763,9 @@ function BuilderConnectCta({ variant = "primary", }) {
777
763
  }
778
764
  return (_jsxs("div", { className: containerClass, children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "text-xs font-medium text-foreground", children: "Connect Builder.io" }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5 max-w-[220px]", children: "Free credits for LLM, hosting, and more \u2014 no API key needed" }), error && _jsx("p", { className: "mt-1 text-[10px] text-destructive", children: error })] }), _jsx("button", { type: "button", onClick: start, disabled: connecting, className: "ml-auto inline-flex items-center gap-1 shrink-0 rounded-md bg-foreground px-3 py-1.5 text-[11px] font-medium no-underline text-background hover:opacity-90 disabled:opacity-60 disabled:cursor-wait", "aria-busy": connecting, children: connecting ? (_jsxs(_Fragment, { children: [_jsx(IconLoader2, { size: 10, className: "animate-spin" }), "Waiting\u2026"] })) : (_jsxs(_Fragment, { children: ["Connect", _jsx(IconExternalLink, { size: 10 })] })) })] }));
779
765
  }
780
- // ─── API Key Setup Card ─────────────────────────────────────────────────────
781
- function ApiKeySetupCard({ apiUrl }) {
782
- const [apiKey, setApiKey] = useState("");
783
- const [saving, setSaving] = useState(false);
784
- const [saved, setSaved] = useState(false);
785
- const [error, setError] = useState(null);
786
- const suppressBuilderCta = useSuppressInChatBuilderCta();
787
- const handleSave = async () => {
788
- if (!apiKey.trim())
789
- return;
790
- setSaving(true);
791
- setError(null);
792
- try {
793
- const res = await fetch(`${apiUrl}/save-key`, {
794
- method: "POST",
795
- headers: { "Content-Type": "application/json" },
796
- body: JSON.stringify({ key: apiKey.trim(), provider: "anthropic" }),
797
- });
798
- if (!res.ok) {
799
- const data = await res.json().catch(() => ({}));
800
- throw new Error(data.error || "Failed to save");
801
- }
802
- setSaved(true);
803
- setTimeout(() => window.location.reload(), 1000);
804
- }
805
- catch (err) {
806
- setError(err instanceof Error ? err.message : "Failed to save");
807
- }
808
- finally {
809
- setSaving(false);
810
- }
811
- };
812
- if (saved) {
813
- return (_jsx("div", { className: "mx-4 my-6 rounded-lg border border-emerald-500/30 bg-emerald-500/5 p-4", children: _jsxs("div", { className: "flex items-center gap-2 text-sm text-emerald-400", children: [_jsx(IconCheck, { className: "h-4 w-4" }), "API key saved. Reloading..."] }) }));
814
- }
815
- return (_jsxs("div", { className: "mx-4 my-6 rounded-lg border border-border bg-card p-5", children: [_jsxs("div", { className: "flex items-center gap-3 mb-3", children: [_jsx("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted", children: _jsx(IconMessage, { className: "h-4.5 w-4.5 text-muted-foreground" }) }), _jsx("h3", { className: "text-sm font-medium text-foreground", children: "Connect your AI" })] }), _jsxs("div", { className: "space-y-3", children: [suppressBuilderCta ? null : (_jsxs(_Fragment, { children: [_jsx(BuilderConnectCta, {}), _jsxs("div", { className: "relative flex items-center", children: [_jsx("div", { className: "flex-grow border-t border-border" }), _jsx("span", { className: "mx-2 text-[10px] uppercase tracking-wider text-muted-foreground/60", children: "or" }), _jsx("div", { className: "flex-grow border-t border-border" })] })] })), _jsx("input", { type: "password", value: apiKey, onChange: (e) => {
816
- setApiKey(e.target.value);
817
- setError(null);
818
- }, onKeyDown: (e) => {
819
- if (e.key === "Enter")
820
- handleSave();
821
- }, placeholder: "sk-ant-...", className: "w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground/50 outline-none focus:ring-1 focus:ring-ring", autoComplete: "off" }), error && _jsx("p", { className: "text-xs text-destructive", children: error }), apiKey.trim() && (_jsx("button", { onClick: handleSave, disabled: saving, className: "w-full rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed", children: saving ? "Saving..." : "Save API key" })), _jsx("p", { className: "text-[10px] text-muted-foreground/60 text-center", children: _jsx("a", { href: "https://console.anthropic.com/settings/keys", target: "_blank", rel: "noopener noreferrer", className: "underline hover:text-foreground/80", children: "Get an Anthropic key" }) })] })] }));
766
+ // ─── Builder Setup Card ─────────────────────────────────────────────────────
767
+ function BuilderSetupCard() {
768
+ return (_jsxs("div", { className: "mx-4 my-6 rounded-lg border border-border bg-card p-5", children: [_jsxs("div", { className: "flex items-center gap-3 mb-3", children: [_jsx("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted", children: _jsx(IconMessage, { className: "h-4.5 w-4.5 text-muted-foreground" }) }), _jsxs("div", { children: [_jsx("h3", { className: "text-sm font-medium text-foreground", children: "Connect Builder.io" }), _jsx("p", { className: "mt-0.5 text-[11px] text-muted-foreground", children: "Use the hosted agent without adding a separate model provider key." })] })] }), _jsx("div", { className: "space-y-3", children: _jsx(BuilderConnectCta, {}) })] }));
822
769
  }
823
770
  function getLoopLimitMetadata(message) {
824
771
  const meta = message?.metadata;
@@ -1682,7 +1629,14 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1682
1629
  visibleRunErrorKey !== dismissedRunErrorKey;
1683
1630
  return (_jsx(CheckpointContext.Provider, { value: checkpointCtx, children: _jsx(MessageActionsContext.Provider, { value: messageActionsCtx, children: _jsx(ChatRunningContext.Provider, { value: isRunning, children: _jsxs("div", { className: cn("flex flex-1 flex-col h-full min-h-0 text-foreground", className), children: [showHeader && (_jsxs("div", { className: "flex h-11 shrink-0 items-center justify-between border-b border-border px-4", children: [_jsx("span", { className: "text-[13px] font-medium text-muted-foreground", children: "Agent" }), _jsx("div", { className: "flex items-center gap-1", children: onSwitchToCli && (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { onClick: onSwitchToCli, "aria-label": "Switch to CLI", className: "flex items-center gap-1 text-[12px] text-muted-foreground hover:text-foreground px-2 py-1 rounded-md hover:bg-accent", children: [_jsx(IconTerminal, { className: "h-3.5 w-3.5" }), "CLI"] }) }), _jsx(TooltipContent, { children: "Switch to CLI" })] }) })) })] })), _jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto overflow-x-hidden min-h-0", children: authError ? (_jsxs("div", { className: "flex flex-col items-center justify-center h-full px-4 gap-3", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10", children: _jsx(IconLock, { className: "h-5 w-5 text-destructive" }) }), _jsxs("div", { className: "text-center max-w-[280px]", children: [_jsx("p", { className: "text-sm font-medium text-foreground mb-1", children: authError.sessionExpired
1684
1631
  ? "Session expired"
1685
- : "Authentication required" }), _jsx("p", { className: "text-xs text-muted-foreground leading-relaxed", children: authError.sessionExpired ? ("Your session may have expired. Log out and log back in to reconnect.") : (_jsxs(_Fragment, { children: ["You need to log in to use the agent. If you're running locally, add", " ", _jsx("code", { className: "bg-muted px-1 py-0.5 rounded text-[10px]", children: "AUTH_MODE=local" }), " ", "to your", " ", _jsx("code", { className: "bg-muted px-1 py-0.5 rounded text-[10px]", children: ".env" }), " ", "file and restart the dev server."] })) })] }), _jsxs("div", { className: "flex gap-2", children: [authError.sessionExpired && (_jsx("button", { onClick: async () => {
1632
+ : "Authentication required" }), _jsx("p", { className: "text-xs text-muted-foreground leading-relaxed", children: authError.sessionExpired
1633
+ ? "Your session may have expired. Log out and log back in to reconnect."
1634
+ : "You need to log in to use the agent." })] }), _jsxs("div", { className: "flex gap-2", children: [!authError.sessionExpired && (_jsx("button", { onClick: () => {
1635
+ const ret = window.location.pathname + window.location.search;
1636
+ window.location.href =
1637
+ agentNativePath("/_agent-native/sign-in") +
1638
+ `?return=${encodeURIComponent(ret)}`;
1639
+ }, className: "text-xs text-background bg-foreground hover:opacity-90 px-3 py-1.5 rounded-md", children: "Log in" })), authError.sessionExpired && (_jsx("button", { onClick: async () => {
1686
1640
  try {
1687
1641
  await fetch(agentNativePath("/_agent-native/auth/logout"), {
1688
1642
  method: "POST",
@@ -1693,7 +1647,7 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1693
1647
  }, className: "text-xs text-destructive hover:text-destructive/80 px-3 py-1.5 rounded-md border border-destructive/30 hover:bg-destructive/10", children: "Log out" })), _jsx("button", { onClick: () => {
1694
1648
  setAuthError(null);
1695
1649
  window.location.reload();
1696
- }, className: "text-xs text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md border border-border hover:bg-accent", children: "Retry" })] })] })) : missingApiKey ? (_jsx("div", { className: "flex flex-col items-center justify-center h-full px-2", children: _jsx(ApiKeySetupCard, { apiUrl: apiUrl }) })) : isRestoring ? (_jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "flex justify-end", children: _jsx("div", { className: "h-8 w-32 rounded-lg bg-muted animate-pulse" }) }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("div", { className: "h-4 w-48 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-4 w-64 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-4 w-40 rounded bg-muted animate-pulse" })] })] })) : messages.length === 0 && !isReconnecting ? (_jsxs("div", { className: "flex flex-col items-center justify-center gap-4 py-16 px-4 h-full", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: _jsx(IconMessage, { className: "h-5 w-5 text-muted-foreground" }) }), _jsx("p", { className: "text-sm text-muted-foreground text-center max-w-[240px]", children: emptyStateText ?? "How can I help you?" }), suggestions && suggestions.length > 0 && (_jsx("div", { className: "flex flex-col gap-1.5 w-full max-w-[280px]", children: suggestions.map((suggestion) => (_jsx("button", { onClick: () => {
1650
+ }, className: "text-xs text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md border border-border hover:bg-accent", children: "Retry" })] })] })) : missingApiKey && messages.length === 0 ? (_jsx("div", { className: "flex flex-col items-center justify-center h-full px-2", children: _jsx(BuilderSetupCard, {}) })) : isRestoring ? (_jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "flex justify-end", children: _jsx("div", { className: "h-8 w-32 rounded-lg bg-muted animate-pulse" }) }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("div", { className: "h-4 w-48 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-4 w-64 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-4 w-40 rounded bg-muted animate-pulse" })] })] })) : messages.length === 0 && !isReconnecting ? (_jsxs("div", { className: "flex flex-col items-center justify-center gap-4 py-16 px-4 h-full", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: _jsx(IconMessage, { className: "h-5 w-5 text-muted-foreground" }) }), _jsx("p", { className: "text-sm text-muted-foreground text-center max-w-[240px]", children: emptyStateText ?? "How can I help you?" }), suggestions && suggestions.length > 0 && (_jsx("div", { className: "flex flex-col gap-1.5 w-full max-w-[280px]", children: suggestions.map((suggestion) => (_jsx("button", { onClick: () => {
1697
1651
  threadRuntime.append({
1698
1652
  role: "user",
1699
1653
  content: [{ type: "text", text: suggestion }],
@@ -1701,7 +1655,7 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1701
1655
  }, className: "w-full rounded-lg border border-border px-3 py-2 text-left text-[13px] text-muted-foreground hover:bg-accent hover:text-foreground", children: suggestion }, suggestion))) }))] })) : (_jsxs("div", { className: "agent-thread-content flex flex-col gap-4 px-4 py-4", children: [_jsx(ThreadPrimitive.Messages, { components: {
1702
1656
  UserMessage,
1703
1657
  AssistantMessage,
1704
- } }), visibleLoopLimit && !showRunningInUI && (_jsx(LoopLimitContinueCard, { info: visibleLoopLimit, onContinue: () => {
1658
+ } }), missingApiKey && _jsx(BuilderSetupCard, {}), visibleLoopLimit && !showRunningInUI && (_jsx(LoopLimitContinueCard, { info: visibleLoopLimit, onContinue: () => {
1705
1659
  setShowContinue(false);
1706
1660
  setLoopLimitInfo(null);
1707
1661
  addToQueue("Continue from where you left off.");
@@ -1733,31 +1687,31 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1733
1687
  : "Queue a message..."
1734
1688
  : undefined, onSubmit: isRunning
1735
1689
  ? (text, references) => addToQueue(text, undefined, references.length > 0 ? references : undefined)
1736
- : undefined, onSlashCommand: onSlashCommand, execMode: execMode, onExecModeChange: onExecModeChange, selectedModel: selectedModel ?? defaultModel, selectedEffort: selectedEffort, availableModels: availableModels, onModelChange: onModelChange, onEffortChange: onEffortChange, draftScope: threadId || tabId, interceptBuildRequestsForBuilder: true, extraActionButton: showRunningInUI ? (_jsx("button", { type: "button", onClick: () => {
1737
- // Nuclear stop: flip forceStopped so isRunning is false
1738
- // immediately. This unblocks submission even if the
1739
- // runtime or reconnect state is stuck.
1740
- setForceStopped(true);
1741
- const activeRun = getActiveRun();
1742
- const runIdToAbort = reconnectRunIdRef.current ?? activeRun?.runId;
1743
- if (runIdToAbort) {
1744
- fetch(`${apiUrl}/runs/${encodeURIComponent(runIdToAbort)}/abort`, { method: "POST" }).catch(() => { });
1745
- }
1746
- if (isReconnecting) {
1747
- reconnectAbortRef.current?.abort();
1748
- reconnectAbortRef.current = null;
1749
- reconnectRunIdRef.current = null;
1750
- setIsReconnecting(false);
1751
- setReconnectFrozen(reconnectContent.length > 0);
1752
- }
1753
- threadRuntime.cancelRun();
1754
- window.dispatchEvent(new CustomEvent("agentNative.chatRunning", {
1755
- detail: {
1756
- isRunning: false,
1757
- tabId: tabId || threadId,
1758
- },
1759
- }));
1760
- }, className: "shrink-0 flex h-7 w-7 items-center justify-center rounded-md bg-muted text-foreground hover:bg-muted/80", title: "Stop generating", children: _jsx(IconPlayerStop, { className: "h-3.5 w-3.5" }) })) : undefined })] }) })] }) }) }) }));
1690
+ : undefined, onSlashCommand: onSlashCommand, execMode: execMode, onExecModeChange: onExecModeChange, selectedModel: selectedModel ?? defaultModel, selectedEffort: selectedEffort, availableModels: availableModels, onModelChange: onModelChange, onEffortChange: onEffortChange, draftScope: threadId || tabId, interceptBuildRequestsForBuilder: true, extraActionButton: showRunningInUI ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => {
1691
+ // Nuclear stop: flip forceStopped so isRunning is false
1692
+ // immediately. This unblocks submission even if the
1693
+ // runtime or reconnect state is stuck.
1694
+ setForceStopped(true);
1695
+ const activeRun = getActiveRun();
1696
+ const runIdToAbort = reconnectRunIdRef.current ?? activeRun?.runId;
1697
+ if (runIdToAbort) {
1698
+ fetch(`${apiUrl}/runs/${encodeURIComponent(runIdToAbort)}/abort`, { method: "POST" }).catch(() => { });
1699
+ }
1700
+ if (isReconnecting) {
1701
+ reconnectAbortRef.current?.abort();
1702
+ reconnectAbortRef.current = null;
1703
+ reconnectRunIdRef.current = null;
1704
+ setIsReconnecting(false);
1705
+ setReconnectFrozen(reconnectContent.length > 0);
1706
+ }
1707
+ threadRuntime.cancelRun();
1708
+ window.dispatchEvent(new CustomEvent("agentNative.chatRunning", {
1709
+ detail: {
1710
+ isRunning: false,
1711
+ tabId: tabId || threadId,
1712
+ },
1713
+ }));
1714
+ }, className: "shrink-0 flex h-7 w-7 items-center justify-center rounded-md bg-muted text-foreground hover:bg-muted/80", children: _jsx(IconPlayerStop, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Stop generating" })] })) : undefined })] }) })] }) }) }) }));
1761
1715
  });
1762
1716
  export const AssistantChat = forwardRef(function AssistantChat({ apiUrl = agentNativePath("/_agent-native/agent-chat"), tabId, threadId, ...props }, ref) {
1763
1717
  const modelRef = useRef(props.selectedModel);