@agent-native/core 0.137.2 → 0.137.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/analytics/actions/gong-calls.ts +37 -17
- package/corpus/templates/analytics/app/lib/data-sources.ts +1 -1
- package/corpus/templates/analytics/server/lib/gong.ts +51 -2
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/brain/app/routes/settings.tsx +1 -1
- package/corpus/templates/brain/server/register-secrets.ts +1 -1
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/chat/AGENTS.md +11 -0
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/chat/app/root.tsx +1 -1
- package/corpus/templates/chat/app/routes/agent.tsx +29 -13
- package/corpus/templates/chat/vite.config.ts +42 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/clips/app/components/library/empty-state.tsx +1 -3
- package/corpus/templates/clips/app/components/library/library-grid.tsx +2 -6
- package/corpus/templates/clips/app/components/library/library-layout.tsx +2 -6
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +1 -3
- package/corpus/templates/clips/app/routes/bug-report.tsx +1 -8
- package/corpus/templates/clips/app/routes/import.tsx +1 -3
- package/corpus/templates/clips/changelog/2026-08-04-recording-buttons-are-now-text-only-for-a-cleaner-clips-inte.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-04-save-settings-now-matches-the-other-clips-settings-buttons.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/styles.css +1 -0
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/crm/app/routes/settings.tsx +2 -2
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/design/actions/import-figma-clipboard.ts +1 -1
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/dispatch/changelog/2026-08-04-dispatch-keeps-connected-chats-out-of-local-history-by-defau.md +6 -0
- package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/factory/README.md +1 -1
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +0 -2
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +1 -1
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +53 -1
- package/corpus/templates/slides/actions/generate-image-api.ts +15 -4
- package/corpus/templates/slides/actions/import-google-slides-reference.ts +83 -0
- package/corpus/templates/slides/actions/import-pptx.ts +134 -117
- package/corpus/templates/slides/app/components/editor/GoogleSlidesReferenceImport.tsx +387 -0
- package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +78 -48
- package/corpus/templates/slides/app/components/editor/NewDeckReferenceStep.tsx +377 -187
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -1
- package/corpus/templates/slides/app/hooks/use-deck-design-system.ts +20 -1
- package/corpus/templates/slides/app/i18n/en-US.ts +15 -0
- package/corpus/templates/slides/app/lib/new-deck-reference-selection.ts +22 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +4 -1
- package/corpus/templates/slides/app/pages/Index.tsx +172 -85
- package/corpus/templates/slides/server/lib/assets-image-delegation.ts +4 -2
- package/corpus/templates/slides/shared/api.ts +14 -1
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +53 -1
- package/dist/chat-threads/schema.d.ts +57 -0
- package/dist/chat-threads/schema.js +3 -0
- package/dist/chat-threads/store.d.ts +26 -0
- package/dist/chat-threads/store.js +84 -6
- package/dist/client/AgentPanel.js +11 -5
- package/dist/client/ConnectBuilderCard.js +1 -1
- package/dist/client/agent-page/AgentEmptyState.d.ts +2 -1
- package/dist/client/agent-page/AgentEmptyState.js +6 -2
- package/dist/client/agent-page/AgentJobsTab.d.ts +3 -1
- package/dist/client/agent-page/AgentJobsTab.js +55 -44
- package/dist/client/agent-page/AgentTabFrame.d.ts +2 -1
- package/dist/client/agent-page/AgentTabFrame.js +4 -2
- package/dist/client/agent-page/AgentTabsPage.js +12 -8
- package/dist/client/agent-page/AgentWorkspaceContent.d.ts +10 -0
- package/dist/client/agent-page/AgentWorkspaceContent.js +110 -0
- package/dist/client/agent-page/AutomationDetailsDialog.js +1 -1
- package/dist/client/chat/run-recovery.js +3 -3
- package/dist/client/error-format.js +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts +1 -0
- package/dist/client/integrations/IntegrationsPanel.js +149 -5
- package/dist/client/onboarding/FirstRunOnboarding.js +130 -15
- package/dist/client/onboarding/index.d.ts +1 -1
- package/dist/client/onboarding/index.js +1 -1
- package/dist/client/onboarding/use-onboarding.js +12 -2
- package/dist/client/onboarding/use-preview-mode.d.ts +4 -0
- package/dist/client/onboarding/use-preview-mode.js +9 -0
- package/dist/client/resources/BuiltinCapabilityDetail.js +2 -2
- package/dist/client/resources/ResourceTree.d.ts +4 -1
- package/dist/client/resources/ResourceTree.js +13 -8
- package/dist/client/resources/ResourcesPanel.js +7 -3
- package/dist/client/resources/mcp-integration-catalog.js +4 -4
- package/dist/client/resources/use-mcp-servers.js +6 -6
- package/dist/client/settings/AgentsSection.js +15 -16
- package/dist/client/settings/AutomationsSection.js +1 -1
- package/dist/client/settings/DemoModeSection.js +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +3 -1
- package/dist/client/settings/SettingsPanel.js +284 -88
- package/dist/client/settings/SettingsRow.js +1 -1
- package/dist/client/settings/SettingsSection.d.ts +6 -4
- package/dist/client/settings/SettingsSection.js +6 -6
- package/dist/client/settings/SettingsTabsPage.js +47 -25
- package/dist/client/settings/VoiceTranscriptionSection.d.ts +3 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +20 -8
- package/dist/client/settings/agent-settings-search.d.ts +1 -1
- package/dist/client/settings/agent-settings-search.js +8 -8
- package/dist/client/transcription/BuilderTranscriptionCta.js +2 -2
- package/dist/client/use-chat-threads.d.ts +9 -0
- package/dist/client/use-chat-threads.js +22 -6
- package/dist/collab/routes.d.ts +1 -1
- package/dist/integrations/google-docs-poller.js +9 -1
- package/dist/integrations/webhook-handler.js +11 -1
- package/dist/jobs/scheduler.d.ts +4 -1
- package/dist/jobs/scheduler.js +34 -9
- package/dist/localization/default-messages.js +40 -40
- package/dist/mcp-client/oauth-routes.js +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
- package/dist/provider-api/actions/provider-api.d.ts +15 -15
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/onboarding.js +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-chat/browser-team-tools.d.ts +1 -0
- package/dist/server/agent-chat/browser-team-tools.js +1 -0
- package/dist/server/agent-chat-plugin.js +14 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-teams.d.ts +2 -0
- package/dist/server/agent-teams.js +2 -0
- package/dist/server/workspace-provider-oauth.js +1 -1
- package/dist/setup-connections/onboarding.js +2 -2
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +53 -1
- package/dist/templates/chat/AGENTS.md +11 -0
- package/dist/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/dist/templates/chat/app/root.tsx +1 -1
- package/dist/templates/chat/app/routes/agent.tsx +29 -13
- package/dist/templates/chat/vite.config.ts +42 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +53 -1
- package/dist/templates/default/AGENTS.md +11 -0
- package/dist/templates/default/vite.config.ts +42 -0
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +53 -1
- package/dist/templates/workspace-core/AGENTS.md +11 -0
- package/dist/templates/workspace-root/AGENTS.md +14 -0
- package/dist/vite/client.js +56 -0
- package/package.json +2 -2
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +53 -1
- package/src/templates/chat/AGENTS.md +11 -0
- package/src/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/src/templates/chat/app/root.tsx +1 -1
- package/src/templates/chat/app/routes/agent.tsx +29 -13
- package/src/templates/chat/vite.config.ts +42 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +53 -1
- package/src/templates/default/AGENTS.md +11 -0
- package/src/templates/default/vite.config.ts +42 -0
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +33 -0
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +53 -1
- package/src/templates/workspace-core/AGENTS.md +11 -0
- package/src/templates/workspace-root/AGENTS.md +14 -0
|
@@ -27,6 +27,9 @@ export interface ResourceTreeProps {
|
|
|
27
27
|
sectionAction?: React.ReactNode;
|
|
28
28
|
/** Scope-specific action shown beneath an empty collection message. */
|
|
29
29
|
emptyStateAction?: React.ReactNode;
|
|
30
|
+
/** Optional copy for collection empty states. */
|
|
31
|
+
emptyStateTitle?: string;
|
|
32
|
+
emptyStateDescription?: string;
|
|
30
33
|
}
|
|
31
|
-
export declare function ResourceTree({ tree, variant, selectedId, onSelect, onCreateFile, onCreateFolder, onDelete, onDrop, title, titleTooltip, isLoading, deletingId, readOnly, headingHint, sectionAction, emptyStateAction, }: ResourceTreeProps): React.JSX.Element;
|
|
34
|
+
export declare function ResourceTree({ tree, variant, selectedId, onSelect, onCreateFile, onCreateFolder, onDelete, onDrop, title, titleTooltip, isLoading, deletingId, readOnly, headingHint, sectionAction, emptyStateAction, emptyStateTitle, emptyStateDescription, }: ResourceTreeProps): React.JSX.Element;
|
|
32
35
|
//# sourceMappingURL=ResourceTree.d.ts.map
|
|
@@ -109,9 +109,9 @@ function getCollectionDescriptor(node) {
|
|
|
109
109
|
"Scheduled job");
|
|
110
110
|
}
|
|
111
111
|
if (node.kind === "mcp-server")
|
|
112
|
-
return "
|
|
112
|
+
return "Agent integration";
|
|
113
113
|
if (node.kind === "mcp-builtin")
|
|
114
|
-
return "Built-in
|
|
114
|
+
return "Built-in agent tool";
|
|
115
115
|
return formatResourceSize(node.resource.size);
|
|
116
116
|
}
|
|
117
117
|
function CollectionResourceRow({ node, selectedId, deletingId, readOnly, onSelect, onDelete, }) {
|
|
@@ -197,7 +197,7 @@ function InlineInput({ depth, onConfirm, onCancel, }) {
|
|
|
197
197
|
}, className: "min-w-0 flex-1 bg-transparent text-[12px] leading-none text-foreground outline-none placeholder:text-muted-foreground/50", placeholder: "filename.md" })] }));
|
|
198
198
|
}
|
|
199
199
|
// ─── ResourceTree ───────────────────────────────────────────────────────────
|
|
200
|
-
export function ResourceTree({ tree, variant = "tree", selectedId, onSelect, onCreateFile, onCreateFolder, onDelete, onDrop, title = "Files", titleTooltip, isLoading = false, deletingId = null, readOnly = false, headingHint, sectionAction, emptyStateAction, }) {
|
|
200
|
+
export function ResourceTree({ tree, variant = "tree", selectedId, onSelect, onCreateFile, onCreateFolder, onDelete, onDrop, title = "Files", titleTooltip, isLoading = false, deletingId = null, readOnly = false, headingHint, sectionAction, emptyStateAction, emptyStateTitle, emptyStateDescription, }) {
|
|
201
201
|
const [expanded, setExpanded] = useState(() => new Set());
|
|
202
202
|
const [creating, setCreating] = useState(null);
|
|
203
203
|
const [dragOver, setDragOver] = useState(false);
|
|
@@ -258,14 +258,19 @@ export function ResourceTree({ tree, variant = "tree", selectedId, onSelect, onC
|
|
|
258
258
|
onDrop(e.dataTransfer.files);
|
|
259
259
|
}
|
|
260
260
|
}, [onDrop, readOnly]);
|
|
261
|
-
return (_jsxs("div", { className: cn(
|
|
261
|
+
return (_jsxs("div", { className: cn(variant === "collection"
|
|
262
|
+
? "overflow-hidden rounded-xl border border-border/70 bg-card text-card-foreground"
|
|
263
|
+
: "p-1", dragOver && !readOnly && "ring-1 ring-inset ring-accent"), onDragOver: readOnly ? undefined : handleDragOver, onDragLeave: readOnly ? undefined : handleDragLeave, onDrop: readOnly ? undefined : handleDrop, children: [_jsx("div", { className: cn("group/root flex items-center justify-between", variant === "collection" ? "px-4 py-3" : "px-1.5 py-1"), children: _jsxs(TooltipProvider, { delayDuration: 200, children: [_jsxs("span", { className: cn("flex items-center gap-1.5 font-medium text-muted-foreground", variant === "collection"
|
|
264
|
+
? "text-sm"
|
|
265
|
+
: "text-[11px] uppercase tracking-wide text-muted-foreground/60"), children: [title, headingHint && (_jsx("span", { className: "text-[10px] font-normal normal-case tracking-normal text-muted-foreground/50", children: headingHint })), titleTooltip && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": `About ${title}`, className: "flex h-3.5 w-3.5 items-center justify-center rounded-full text-muted-foreground/40 hover:text-muted-foreground", children: _jsx(IconHelpCircle, { className: "h-3 w-3" }) }) }), _jsx(TooltipContent, { children: titleTooltip })] }))] }), sectionAction ??
|
|
262
266
|
(variant === "tree" && !readOnly && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => handleStartCreate("", "file"), "aria-label": "New file", className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground/50 opacity-0 group-hover/root:opacity-100 hover:text-foreground hover:bg-accent/50", children: _jsx(IconPlus, { className: "h-3 w-3" }) }) }), _jsx(TooltipContent, { children: "New file" })] })))] }) }), variant === "collection"
|
|
263
|
-
? leafResources.length > 0 && (_jsx("div", { className: "
|
|
267
|
+
? leafResources.length > 0 && (_jsx("div", { className: "divide-y divide-border/60 px-4", children: leafResources.map((node) => (_jsx(CollectionResourceRow, { node: node, selectedId: selectedId, deletingId: deletingId, readOnly: readOnly, onSelect: onSelect, onDelete: onDelete }, node.resource.id))) }))
|
|
264
268
|
: tree.map((node) => (_jsx(TreeNodeRow, { node: node, depth: 0, expanded: expanded, selectedId: selectedId, deletingId: deletingId, readOnly: readOnly, onToggle: toggleExpand, onSelect: onSelect, onDelete: onDelete, onStartCreate: handleStartCreate }, node.resource?.id ?? node.path))), isLoading && isEmpty && (_jsx("div", { className: cn("px-1 py-1"), children: Array.from({ length: 3 }).map((_, i) => (_jsxs("div", { className: cn("flex items-center gap-2 px-1.5 py-1", variant === "collection" && "gap-3 px-2.5 py-3"), children: [_jsx("div", { className: cn("rounded bg-muted-foreground/10 animate-pulse", variant === "collection" ? "size-8" : "h-3.5 w-3.5"), style: { animationDelay: `${i * 75}ms` } }), _jsx("div", { className: "h-3 rounded bg-muted-foreground/10 animate-pulse", style: {
|
|
265
269
|
width: `${50 + ((i * 37) % 40)}%`,
|
|
266
270
|
animationDelay: `${i * 75}ms`,
|
|
267
|
-
} })] }, i))) })), creating && creating.parentPath === "" && (_jsx(InlineInput, { depth: 0, onConfirm: handleConfirmCreate, onCancel: handleCancelCreate })), creating && creating.parentPath !== "" && (_jsx(InlineInput, { depth: creating.parentPath.split("/").filter(Boolean).length, onConfirm: handleConfirmCreate, onCancel: handleCancelCreate })), isEmpty && !creating && !isLoading && (_jsxs("div", { className: "flex flex-col items-
|
|
268
|
-
? "No resources in this collection yet"
|
|
269
|
-
: "No files yet" }),
|
|
271
|
+
} })] }, i))) })), creating && creating.parentPath === "" && (_jsx(InlineInput, { depth: 0, onConfirm: handleConfirmCreate, onCancel: handleCancelCreate })), creating && creating.parentPath !== "" && (_jsx(InlineInput, { depth: creating.parentPath.split("/").filter(Boolean).length, onConfirm: handleConfirmCreate, onCancel: handleCancelCreate })), isEmpty && !creating && !isLoading && (_jsxs("div", { className: cn("flex flex-col px-4 py-8", variant === "collection" && "items-center px-5 py-10 text-center"), children: [variant === "collection" && (_jsx("span", { className: "mb-3 flex size-10 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(IconFolder, { className: "size-5" }) })), _jsx("p", { className: "text-sm font-medium text-foreground", children: variant === "collection"
|
|
272
|
+
? (emptyStateTitle ?? "No resources in this collection yet")
|
|
273
|
+
: "No files yet" }), variant === "collection" && (_jsx("p", { className: "mt-1 max-w-sm text-xs leading-5 text-muted-foreground", children: emptyStateDescription ??
|
|
274
|
+
"Add a resource to give your agent more context." })), emptyStateAction && _jsx("div", { className: "mt-4", children: emptyStateAction })] }))] }));
|
|
270
275
|
}
|
|
271
276
|
//# sourceMappingURL=ResourceTree.js.map
|
|
@@ -892,7 +892,7 @@ export function ResourcesPanel({ showMcpServers = true, scope: requestedScope, s
|
|
|
892
892
|
: "Delete resource", className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-destructive hover:bg-accent/50", toolbarDeleteConfirmId === selectedResourceId &&
|
|
893
893
|
"bg-destructive/10 text-destructive"), children: _jsx(IconTrash, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: toolbarDeleteConfirmId === selectedResourceId
|
|
894
894
|
? "Click again to delete"
|
|
895
|
-
: "Delete resource" })] }) }))] })] })) : (_jsxs("div", { className: "absolute
|
|
895
|
+
: "Delete resource" })] }) }))] })] })) : (_jsxs("div", { className: "absolute end-3 top-3 z-10 flex items-center gap-1", children: [activeCreateMenuMode !== "hidden" &&
|
|
896
896
|
(!resourceFilter || resourceFilter === "files") && (_jsx(CreateMenu, { scope: activeScope, resourceFilter: resourceFilter, personalMcpOnly: activeCreateMenuMode === "personal-mcp", onCreateFile: (name) => handleCreateFromToolbar(activeScope, name), onCreateResource: (path, content, mimeType, opts) => handleCreateResourceFromToolbar(activeScope, path, content, mimeType, opts), onCreateMcpServer: handleCreateMcpServer, canCreateOrgMcp: canCreateOrgMcp, hasOrg: hasOrgForMcp, showToast: showToast, mcpIntegrations: mcpIntegrations })), (!resourceFilter || resourceFilter === "files") && (_jsxs(_Fragment, { children: [activeCreateMenuMode === "full" && (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => fileInputRef.current?.click(), "aria-label": "Upload file", className: "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconUpload, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Upload file" })] }) })), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => setShowAgentScratch((value) => !value), "aria-label": showAgentScratch
|
|
897
897
|
? "Hide agent scratch files"
|
|
898
898
|
: "Show agent scratch files", className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", showAgentScratch && "bg-accent/50 text-foreground"), children: _jsx(IconEye, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: showAgentScratch
|
|
@@ -910,13 +910,17 @@ export function ResourcesPanel({ showMcpServers = true, scope: requestedScope, s
|
|
|
910
910
|
? deleteResource.variables
|
|
911
911
|
: deleteMcpServer.isPending
|
|
912
912
|
? `mcp:${deleteMcpServer.variables.scope}:${deleteMcpServer.variables.id}`
|
|
913
|
-
: null, selectedId: selectedResourceId, onSelect: handleSelect, onCreateFile: (parentPath, name) => handleCreateFile(parentPath, name, "personal"), onCreateFolder: (parentPath, name) => handleCreateFolder(parentPath, name, "personal"), onDelete: handleDelete, onRename: handleRename, onDrop: (files) => handleUploadFiles(files, "personal"), title: "Personal", titleTooltip: "Files visible only to you", sectionAction: renderScopeCreateMenu("personal"), emptyStateAction: renderEmptyStateAction("personal")
|
|
913
|
+
: null, selectedId: selectedResourceId, onSelect: handleSelect, onCreateFile: (parentPath, name) => handleCreateFile(parentPath, name, "personal"), onCreateFolder: (parentPath, name) => handleCreateFolder(parentPath, name, "personal"), onDelete: handleDelete, onRename: handleRename, onDrop: (files) => handleUploadFiles(files, "personal"), title: "Personal", titleTooltip: "Files visible only to you", sectionAction: renderScopeCreateMenu("personal"), emptyStateAction: renderEmptyStateAction("personal"), emptyStateTitle: resourceFilter === "files" ? "No files yet" : undefined, emptyStateDescription: resourceFilter === "files"
|
|
914
|
+
? "Add a file to give your agent more context."
|
|
915
|
+
: undefined }) })), showSharedTree && (_jsx("div", { className: "pt-3", children: _jsx(ResourceTree, { tree: displayedSharedTree, variant: resourceTreeVariant, isLoading: sharedTreeQuery.isLoading, deletingId: deleteResource.isPending
|
|
914
916
|
? deleteResource.variables
|
|
915
917
|
: deleteMcpServer.isPending
|
|
916
918
|
? `mcp:${deleteMcpServer.variables.scope}:${deleteMcpServer.variables.id}`
|
|
917
919
|
: null, selectedId: selectedResourceId, onSelect: handleSelect, onCreateFile: (parentPath, name) => handleCreateFile(parentPath, name, "shared"), onCreateFolder: (parentPath, name) => handleCreateFolder(parentPath, name, "shared"), onDelete: handleDelete, onRename: handleRename, onDrop: (files) => handleUploadFiles(files, "shared"), title: "Organization", titleTooltip: canEditOrg
|
|
918
920
|
? "Files visible to everyone in your organization"
|
|
919
|
-
: "Files visible to everyone in your organization. Read-only — only admins can edit.", readOnly: !canEditOrg, headingHint: !canEditOrg ? "Read only" : undefined, sectionAction: renderScopeCreateMenu("shared"), emptyStateAction: renderEmptyStateAction("shared")
|
|
921
|
+
: "Files visible to everyone in your organization. Read-only — only admins can edit.", readOnly: !canEditOrg, headingHint: !canEditOrg ? "Read only" : undefined, sectionAction: renderScopeCreateMenu("shared"), emptyStateAction: renderEmptyStateAction("shared"), emptyStateTitle: resourceFilter === "files" ? "No files yet" : undefined, emptyStateDescription: resourceFilter === "files"
|
|
922
|
+
? "Add a file to give your agent more context."
|
|
923
|
+
: undefined }) }))] })) }), toast && (_jsx("div", { className: "pointer-events-none absolute bottom-3 left-1/2 z-[300] -translate-x-1/2", children: _jsxs("div", { role: "status", className: cn("pointer-events-auto flex max-w-[320px] items-center gap-3 rounded-md border px-3 py-2 text-[12px] shadow-md", toast.kind === "ok"
|
|
920
924
|
? "border-emerald-500/40 bg-emerald-500/10 text-emerald-600 dark:text-emerald-300"
|
|
921
925
|
: "border-red-500/40 bg-red-500/10 text-red-600 dark:text-red-300"), children: [_jsx("span", { className: "min-w-0 flex-1 truncate", children: toast.message }), toast.kind === "ok" && toast.resourceId && (_jsx("button", { type: "button", onClick: () => {
|
|
922
926
|
setSelectedResourceId(toast.resourceId);
|
|
@@ -189,7 +189,7 @@ export const DEFAULT_MCP_INTEGRATIONS = [
|
|
|
189
189
|
id: "cloudflare",
|
|
190
190
|
name: "Cloudflare",
|
|
191
191
|
provider: "cloudflare",
|
|
192
|
-
description: "Search and operate Cloudflare services
|
|
192
|
+
description: "Search and operate Cloudflare services.",
|
|
193
193
|
descriptionKey: "mcpIntegrations.catalog.cloudflare.description",
|
|
194
194
|
useCase: "DNS, Workers, domains, security, observability, platform APIs",
|
|
195
195
|
useCaseKey: "mcpIntegrations.catalog.cloudflare.useCase",
|
|
@@ -302,7 +302,7 @@ export const DEFAULT_MCP_INTEGRATIONS = [
|
|
|
302
302
|
id: "slack",
|
|
303
303
|
name: "Slack",
|
|
304
304
|
provider: "slack",
|
|
305
|
-
description: "Search Slack conversations and take workspace actions
|
|
305
|
+
description: "Search Slack conversations and take workspace actions.",
|
|
306
306
|
descriptionKey: "mcpIntegrations.catalog.slack.description",
|
|
307
307
|
useCase: "messages, channels, people, company memory, workflows",
|
|
308
308
|
useCaseKey: "mcpIntegrations.catalog.slack.useCase",
|
|
@@ -338,7 +338,7 @@ export const DEFAULT_MCP_INTEGRATIONS = [
|
|
|
338
338
|
id: "hubspot",
|
|
339
339
|
name: "HubSpot",
|
|
340
340
|
provider: "hubspot",
|
|
341
|
-
description: "Search and update HubSpot CRM records
|
|
341
|
+
description: "Search and update HubSpot CRM records.",
|
|
342
342
|
descriptionKey: "mcpIntegrations.catalog.hubspot.description",
|
|
343
343
|
useCase: "CRM, contacts, companies, deals, tickets, customer analytics",
|
|
344
344
|
useCaseKey: "mcpIntegrations.catalog.hubspot.useCase",
|
|
@@ -464,7 +464,7 @@ export const DEFAULT_MCP_INTEGRATIONS = [
|
|
|
464
464
|
id: "zapier",
|
|
465
465
|
name: "Zapier",
|
|
466
466
|
provider: "zapier",
|
|
467
|
-
description: "Connect
|
|
467
|
+
description: "Connect tools to thousands of app actions.",
|
|
468
468
|
descriptionKey: "mcpIntegrations.catalog.zapier.description",
|
|
469
469
|
useCase: "automation, workflows, app actions, cross-service operations",
|
|
470
470
|
useCaseKey: "mcpIntegrations.catalog.zapier.useCase",
|
|
@@ -62,7 +62,7 @@ export function useDeleteMcpServer() {
|
|
|
62
62
|
export function getMcpUrlValidationError(rawUrl) {
|
|
63
63
|
const trimmed = rawUrl.trim();
|
|
64
64
|
if (!trimmed)
|
|
65
|
-
return "Enter the Streamable HTTP
|
|
65
|
+
return "Enter the Streamable HTTP agent integration URL.";
|
|
66
66
|
let url;
|
|
67
67
|
try {
|
|
68
68
|
url = new URL(trimmed);
|
|
@@ -71,11 +71,11 @@ export function getMcpUrlValidationError(rawUrl) {
|
|
|
71
71
|
return "Enter a full URL, including https://.";
|
|
72
72
|
}
|
|
73
73
|
if (url.protocol !== "https:" && url.protocol !== "http:") {
|
|
74
|
-
return "
|
|
74
|
+
return "Agent integration URLs must start with https://.";
|
|
75
75
|
}
|
|
76
76
|
if (url.protocol === "http:" &&
|
|
77
77
|
!["localhost", "127.0.0.1"].includes(url.hostname)) {
|
|
78
|
-
return "Use https:// for remote
|
|
78
|
+
return "Use https:// for remote agent integrations. Plain http:// is only allowed for localhost.";
|
|
79
79
|
}
|
|
80
80
|
return null;
|
|
81
81
|
}
|
|
@@ -87,7 +87,7 @@ export function formatMcpServerError(error) {
|
|
|
87
87
|
: String(error ?? "");
|
|
88
88
|
const text = raw.trim();
|
|
89
89
|
if (!text)
|
|
90
|
-
return "Could not connect to that
|
|
90
|
+
return "Could not connect to that agent integration.";
|
|
91
91
|
if (/<!doctype|<html[\s>]|<\/html>|unexpected token '<'|is not valid json/i.test(text)) {
|
|
92
92
|
return "That URL returned a web page instead of an MCP response. Check that you pasted the Streamable HTTP endpoint, often ending in /mcp.";
|
|
93
93
|
}
|
|
@@ -96,10 +96,10 @@ export function formatMcpServerError(error) {
|
|
|
96
96
|
return "The server did not complete the Streamable HTTP MCP handshake. Check the URL and any required authorization headers.";
|
|
97
97
|
}
|
|
98
98
|
if (/failed to fetch|fetch failed|networkerror|econnrefused|enotfound|timed out/i.test(text)) {
|
|
99
|
-
return "Could not reach that
|
|
99
|
+
return "Could not reach that agent integration. Check the URL and make sure it is publicly reachable from this app.";
|
|
100
100
|
}
|
|
101
101
|
if (/401|403|unauthorized|forbidden/i.test(text)) {
|
|
102
|
-
return "The
|
|
102
|
+
return "The agent integration rejected the request. Add or update the required Authorization header.";
|
|
103
103
|
}
|
|
104
104
|
if (/404|not found|405|method not allowed/i.test(text)) {
|
|
105
105
|
return "That URL is reachable, but it does not look like the MCP endpoint. Check the server's Streamable HTTP path.";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { ButtonBase as ToolkitButtonBase } from "@agent-native/toolkit/ui/button";
|
|
3
|
-
import { IconPlus,
|
|
3
|
+
import { IconPlus, IconTrash, IconX, IconCheck, IconLoader2, IconAlertTriangle, IconExternalLink, IconRefresh, IconTopologyRing2, } from "@tabler/icons-react";
|
|
4
4
|
import { useState, useEffect, useRef, useCallback } from "react";
|
|
5
5
|
import { buildOpenRoutePath, buildSettingsRoute, STANDARD_SETTINGS_TABS, } from "../../navigation/index.js";
|
|
6
6
|
import { getRemoteAgentIdFromPath, isRemoteAgentPath, REMOTE_AGENT_RESOURCE_PREFIX, remoteAgentResourcePath, } from "../../resources/metadata.js";
|
|
@@ -397,26 +397,25 @@ export function AgentsSection() {
|
|
|
397
397
|
}
|
|
398
398
|
catch { }
|
|
399
399
|
};
|
|
400
|
-
return (_jsxs("div", { children: [
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
400
|
+
return (_jsxs("div", { children: [_jsx("div", { className: "mb-3 flex flex-wrap items-center justify-end gap-3", children: _jsxs("div", { className: "relative", children: [_jsxs("button", { onClick: () => {
|
|
401
|
+
setShowAdd(!showAdd);
|
|
402
|
+
setEditingAgent(null);
|
|
403
|
+
}, className: "inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent", children: [showAdd ? _jsx(IconX, { size: 13 }) : _jsx(IconPlus, { size: 13 }), showAdd ? "Cancel" : "Connect agent"] }), showAdd && (_jsx(AgentAddPopover, { initialName: prefill?.name, initialUrl: prefill?.url, initialDescription: prefill?.description, secretSet: org?.a2aSecretSet, syncSecret: syncSecret, onAdd: handleAdd, onClose: () => {
|
|
404
|
+
setShowAdd(false);
|
|
405
|
+
setPrefill(null);
|
|
406
|
+
} }))] }) }), _jsx(A2ASecretStatusRow, { org: org, syncSecret: syncSecret }), loading ? (_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "h-6 w-full rounded bg-muted/50 animate-pulse" }), _jsx("div", { className: "h-6 w-3/4 rounded bg-muted/50 animate-pulse" })] })) : agents.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center rounded-xl border border-border/70 bg-card px-5 py-8 text-center", children: [_jsx("span", { className: "mb-2 flex size-9 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(IconTopologyRing2, { size: 17 }) }), _jsx("p", { className: "text-sm font-medium text-foreground", children: "No connected agents yet" }), _jsx("p", { className: "mt-1 max-w-sm text-xs leading-5 text-muted-foreground", children: "Connect an A2A agent to delegate work from chat." }), _jsxs("button", { onClick: () => setShowAdd(true), className: "mt-4 inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent", children: [_jsx(IconPlus, { size: 13 }), "Connect agent"] })] })) : (_jsx("div", { className: "overflow-hidden rounded-xl border border-border/70 bg-card text-card-foreground", children: _jsx("div", { className: "divide-y divide-border/60 px-4", children: agents.map((agent) => {
|
|
407
407
|
const probe = probeById?.get(getRemoteAgentIdFromPath(agent.path).toLowerCase());
|
|
408
408
|
const dotState = !probe
|
|
409
409
|
? null
|
|
410
410
|
: probe.reachable && probe.authorized !== false
|
|
411
411
|
? "ok"
|
|
412
412
|
: "warn";
|
|
413
|
-
return (_jsxs("div", { className: "group relative", children: [_jsxs("div", { className: "flex w-full items-center gap-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
}, className: "flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30", children: [_jsx(IconPlus, { size: 12, className: "shrink-0" }), "Add agent"] })] }))] }));
|
|
413
|
+
return (_jsxs("div", { className: "group relative", children: [_jsxs("div", { className: "flex w-full items-center gap-3 py-4", children: [_jsx("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-lg border border-border bg-background text-muted-foreground", children: _jsx(IconTopologyRing2, { size: 15 }) }), dotState ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: `h-1.5 w-1.5 shrink-0 rounded-full ${dotState === "ok"
|
|
414
|
+
? "bg-primary"
|
|
415
|
+
: "bg-destructive"}` }) }), _jsx(TooltipContent, { children: probe && describeProbeTooltip(probe) })] })) : (_jsx("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-transparent" })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate text-sm font-medium text-foreground", children: agent.name }), _jsx("span", { className: "mt-0.5 block truncate text-xs text-muted-foreground", children: agent.url })] }), _jsx("button", { onClick: () => {
|
|
416
|
+
setEditingAgent(editingAgent === agent.id ? null : agent.id);
|
|
417
|
+
setShowAdd(false);
|
|
418
|
+
}, className: "shrink-0 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium text-foreground hover:bg-accent", children: "Manage" })] }), editingAgent === agent.id && (_jsx(AgentEditPopover, { agent: agent, onSave: handleSave, onDelete: handleDelete, onClose: () => setEditingAgent(null) }))] }, agent.id));
|
|
419
|
+
}) }) }))] }));
|
|
421
420
|
}
|
|
422
421
|
//# sourceMappingURL=AgentsSection.js.map
|
|
@@ -11,7 +11,7 @@ export function AutomationsSection() {
|
|
|
11
11
|
const t = useT();
|
|
12
12
|
return (_jsxs("div", { className: "space-y-3", children: [_jsx("p", { className: "text-xs leading-5 text-muted-foreground", children: t("jobs.settingsSummary", {
|
|
13
13
|
defaultValue: "Manage scheduled and event-triggered agent tasks together from the Automations page.",
|
|
14
|
-
}) }), _jsxs("div", { className: "flex flex-wrap gap-2 text-[11px] text-muted-foreground", children: [_jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-muted px-2 py-1", children: [_jsx(IconClock, { className: "size-3" }), t("jobs.scheduledTrigger", { defaultValue: "Scheduled" })] }), _jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-muted px-2 py-1", children: [_jsx(IconBolt, { className: "size-3" }), t("jobs.eventTrigger", { defaultValue: "Event-triggered" })] })] }), _jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsxs(Link, { to: "/agent
|
|
14
|
+
}) }), _jsxs("div", { className: "flex flex-wrap gap-2 text-[11px] text-muted-foreground", children: [_jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-muted px-2 py-1", children: [_jsx(IconClock, { className: "size-3" }), t("jobs.scheduledTrigger", { defaultValue: "Scheduled" })] }), _jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-muted px-2 py-1", children: [_jsx(IconBolt, { className: "size-3" }), t("jobs.eventTrigger", { defaultValue: "Event-triggered" })] })] }), _jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsxs(Link, { to: "/settings#agent:automations", children: [t("jobs.openAutomations", {
|
|
15
15
|
defaultValue: "Open Automations",
|
|
16
16
|
}), _jsx(IconArrowRight, { className: "size-3.5" })] }) })] }));
|
|
17
17
|
}
|
|
@@ -5,6 +5,6 @@ import { setBrowserDemoModeEnabled } from "../../demo/browser-state.js";
|
|
|
5
5
|
import { useDemoModeStatus } from "../use-demo-mode-status.js";
|
|
6
6
|
export function DemoModeSection() {
|
|
7
7
|
const { enabled } = useDemoModeStatus();
|
|
8
|
-
return (_jsxs("div", { className: "flex items-start justify-between gap-3 rounded-md border border-border bg-accent/30 px-2.5 py-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-[11px] font-medium text-foreground", children: "Enable demo mode" }), _jsx("p", { className: "text-[10px] text-muted-foreground mt-0.5", children: "Anonymize displayed emails in this browser and reshape supported dashboard charts for presentations. Backend,
|
|
8
|
+
return (_jsxs("div", { className: "flex items-start justify-between gap-3 rounded-md border border-border bg-accent/30 px-2.5 py-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-[11px] font-medium text-foreground", children: "Enable demo mode" }), _jsx("p", { className: "text-[10px] text-muted-foreground mt-0.5", children: "Anonymize displayed emails in this browser and reshape supported dashboard charts for presentations. Backend, agent integrations, and agent results stay real and access-scoped." })] }), _jsx(Switch, { checked: enabled, onChange: (checked) => setBrowserDemoModeEnabled(checked), "aria-label": "Enable demo mode", className: "shrink-0" })] }));
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=DemoModeSection.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { type SettingsSectionId } from "./agent-settings-search.js";
|
|
2
3
|
import type { SettingsTabItem } from "./SettingsTabsPage.js";
|
|
3
4
|
export declare function AppDefaultModelField({ engine, models, value, defaultModel, disabled, onValueChange, onEnter, }: {
|
|
4
5
|
engine: string;
|
|
@@ -29,8 +30,9 @@ export declare function SettingsPanel(props: SettingsPanelProps): React.JSX.Elem
|
|
|
29
30
|
export declare function ConnectionsSettingsContent({ settingsPanelProps, }: {
|
|
30
31
|
settingsPanelProps: SettingsPanelProps;
|
|
31
32
|
}): React.JSX.Element;
|
|
32
|
-
export declare function AgentSettingsContent({ className, }?: {
|
|
33
|
+
export declare function AgentSettingsContent({ className, sections, }?: {
|
|
33
34
|
className?: string;
|
|
35
|
+
sections?: readonly SettingsSectionId[];
|
|
34
36
|
}): React.JSX.Element;
|
|
35
37
|
export declare function useAgentSettingsTabs(options?: AgentSettingsTabsOptions): SettingsTabItem[];
|
|
36
38
|
//# sourceMappingURL=SettingsPanel.d.ts.map
|