@agent-native/core 0.9.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/a2a/caller-auth.d.ts +12 -0
- package/dist/a2a/caller-auth.d.ts.map +1 -0
- package/dist/a2a/caller-auth.js +54 -0
- package/dist/a2a/caller-auth.js.map +1 -0
- package/dist/action.d.ts +17 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +22 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +5 -4
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +6 -3
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +8 -17
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +60 -30
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +12 -3
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts +12 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +96 -0
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +16 -10
- package/dist/cli/create.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +8 -22
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +130 -34
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +21 -7
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-sidebar-state.d.ts +3 -0
- package/dist/client/agent-sidebar-state.d.ts.map +1 -0
- package/dist/client/agent-sidebar-state.js +24 -0
- package/dist/client/agent-sidebar-state.js.map +1 -0
- package/dist/client/analytics.d.ts +25 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +40 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/client/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/client/components/ui/dropdown-menu.js +34 -0
- package/dist/client/components/ui/dropdown-menu.js.map +1 -0
- package/dist/client/components/ui/tooltip.d.ts +2 -1
- package/dist/client/components/ui/tooltip.d.ts.map +1 -1
- package/dist/client/components/ui/tooltip.js +9 -2
- package/dist/client/components/ui/tooltip.js.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.js +41 -8
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +30 -0
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +27 -2
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.js +4 -4
- package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +6 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +16 -4
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionEditor.js +6 -6
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +15 -2
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +41 -19
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.js +2 -2
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +52 -63
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/extensions/iframe-bridge.d.ts.map +1 -1
- package/dist/client/extensions/iframe-bridge.js +5 -8
- package/dist/client/extensions/iframe-bridge.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
- package/dist/client/notifications/NotificationsBell.js +42 -6
- package/dist/client/notifications/NotificationsBell.js.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.js +5 -5
- package/dist/client/org/InvitationBanner.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +7 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +8 -3
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +156 -22
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts +29 -1
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +39 -2
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +2 -1
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +1 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +11 -3
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +62 -12
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/use-mcp-servers.d.ts +2 -0
- package/dist/client/resources/use-mcp-servers.d.ts.map +1 -1
- package/dist/client/resources/use-mcp-servers.js +59 -3
- package/dist/client/resources/use-mcp-servers.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +9 -0
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +50 -12
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +13 -30
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +27 -1
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +4 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +5 -1
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +1 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +14 -7
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +100 -19
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +25 -49
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/route-discovery.d.ts.map +1 -1
- package/dist/deploy/route-discovery.js +1 -0
- package/dist/deploy/route-discovery.js.map +1 -1
- package/dist/deploy/workspace-core.d.ts +1 -1
- package/dist/deploy/workspace-core.d.ts.map +1 -1
- package/dist/deploy/workspace-core.js +1 -0
- package/dist/deploy/workspace-core.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +17 -3
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/routes.js +1 -1
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/schema.d.ts +14 -14
- package/dist/extensions/schema.d.ts.map +1 -1
- package/dist/extensions/schema.js +4 -4
- package/dist/extensions/schema.js.map +1 -1
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +23 -0
- package/dist/extensions/store.js.map +1 -1
- package/dist/extensions/theme.d.ts +8 -1
- package/dist/extensions/theme.d.ts.map +1 -1
- package/dist/extensions/theme.js +43 -34
- package/dist/extensions/theme.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-client/routes.d.ts +1 -0
- package/dist/mcp-client/routes.d.ts.map +1 -1
- package/dist/mcp-client/routes.js +28 -1
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/org/accept-pending.d.ts.map +1 -1
- package/dist/org/accept-pending.js +5 -3
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/free-email-providers.d.ts +18 -0
- package/dist/org/free-email-providers.d.ts.map +1 -0
- package/dist/org/free-email-providers.js +124 -0
- package/dist/org/free-email-providers.js.map +1 -0
- package/dist/org/handlers.d.ts +29 -5
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +178 -37
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/index.d.ts +2 -1
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +2 -1
- package/dist/org/index.js.map +1 -1
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +4 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/org/plugin.d.ts.map +1 -1
- package/dist/org/plugin.js +13 -4
- package/dist/org/plugin.js.map +1 -1
- package/dist/org/schema.d.ts +19 -0
- package/dist/org/schema.d.ts.map +1 -1
- package/dist/org/schema.js +1 -0
- package/dist/org/schema.js.map +1 -1
- package/dist/org/types.d.ts +1 -0
- package/dist/org/types.d.ts.map +1 -1
- package/dist/org/types.js.map +1 -1
- package/dist/resources/metadata.d.ts +1 -0
- package/dist/resources/metadata.d.ts.map +1 -1
- package/dist/resources/metadata.js +13 -3
- package/dist/resources/metadata.js.map +1 -1
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +44 -6
- package/dist/resources/store.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +115 -113
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +33 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +169 -68
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/credential-provider.d.ts +2 -2
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +31 -12
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +31 -0
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +10 -3
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/google-realtime-session.d.ts.map +1 -1
- package/dist/server/google-realtime-session.js +19 -6
- package/dist/server/google-realtime-session.js.map +1 -1
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +45 -6
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/request-context.d.ts +17 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +40 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/sentry-plugin.d.ts +11 -0
- package/dist/server/sentry-plugin.d.ts.map +1 -0
- package/dist/server/sentry-plugin.js +116 -0
- package/dist/server/sentry-plugin.js.map +1 -0
- package/dist/server/sentry.d.ts +92 -0
- package/dist/server/sentry.d.ts.map +1 -0
- package/dist/server/sentry.js +287 -0
- package/dist/server/sentry.js.map +1 -0
- package/dist/server/transcribe-voice.d.ts +2 -4
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +4 -16
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/server/voice-providers-status.d.ts.map +1 -1
- package/dist/server/voice-providers-status.js +19 -35
- package/dist/server/voice-providers-status.js.map +1 -1
- package/dist/styles/agent-native.css +15 -0
- package/docs/content/cloneable-saas.md +7 -9
- package/docs/content/deployment.md +6 -2
- package/docs/content/dispatch.md +1 -1
- package/docs/content/extensions.md +177 -142
- package/docs/content/faq.md +2 -2
- package/docs/content/getting-started.md +13 -11
- package/docs/content/multi-app-workspace.md +2 -2
- package/docs/content/observability.md +47 -0
- package/docs/content/pure-agent-apps.md +1 -1
- package/docs/content/template-clips.md +3 -3
- package/docs/content/template-design.md +3 -3
- package/docs/content/template-dispatch.md +1 -1
- package/docs/content/template-forms.md +1 -1
- package/docs/content/template-mail.md +1 -1
- package/docs/content/what-is-agent-native.md +4 -4
- package/docs/content/workspace.md +1 -1
- package/package.json +2 -1
|
@@ -9,7 +9,7 @@ import { ResourceTree } from "./ResourceTree.js";
|
|
|
9
9
|
import { ResourceEditor } from "./ResourceEditor.js";
|
|
10
10
|
import { serializeFrontmatter } from "../../resources/metadata.js";
|
|
11
11
|
import { useResourceTree, useResource, useCreateResource, useUpdateResource, useDeleteResource, useUploadResource, withMcpServersFolder, withAgentScratchFolder, } from "./use-resources.js";
|
|
12
|
-
import { useMcpServers, useCreateMcpServer, useDeleteMcpServer, testMcpServerUrl, parseMcpVirtualId, } from "./use-mcp-servers.js";
|
|
12
|
+
import { formatMcpServerError, getMcpUrlValidationError, useMcpServers, useCreateMcpServer, useDeleteMcpServer, testMcpServerUrl, parseMcpVirtualId, } from "./use-mcp-servers.js";
|
|
13
13
|
import { McpServerDetail } from "./McpServerDetail.js";
|
|
14
14
|
import { useOrg } from "../org/hooks.js";
|
|
15
15
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "../components/ui/tooltip.js";
|
|
@@ -76,10 +76,18 @@ function CreateMenu({ scope, onCreateFile, onCreateResource, onCreateMcpServer,
|
|
|
76
76
|
useEffect(() => {
|
|
77
77
|
if (view !== "menu" && view !== "agent-form") {
|
|
78
78
|
setValue("");
|
|
79
|
+
if (view === "mcp-server") {
|
|
80
|
+
setMcpError(null);
|
|
81
|
+
setMcpTestResult(null);
|
|
82
|
+
}
|
|
79
83
|
const t = setTimeout(() => inputRef.current?.focus(), 50);
|
|
80
84
|
return () => clearTimeout(t);
|
|
81
85
|
}
|
|
82
86
|
}, [view]);
|
|
87
|
+
const clearMcpFeedback = () => {
|
|
88
|
+
setMcpError(null);
|
|
89
|
+
setMcpTestResult(null);
|
|
90
|
+
};
|
|
83
91
|
useEffect(() => {
|
|
84
92
|
if (!open)
|
|
85
93
|
return;
|
|
@@ -100,6 +108,8 @@ function CreateMenu({ scope, onCreateFile, onCreateResource, onCreateMcpServer,
|
|
|
100
108
|
function handleKey(e) {
|
|
101
109
|
if (e.key === "Escape") {
|
|
102
110
|
if (view !== "menu") {
|
|
111
|
+
if (view === "mcp-server")
|
|
112
|
+
clearMcpFeedback();
|
|
103
113
|
setView("menu");
|
|
104
114
|
}
|
|
105
115
|
else {
|
|
@@ -130,7 +140,7 @@ Follow the create-skill pattern to build this. Before writing:
|
|
|
130
140
|
|
|
131
141
|
1. **Determine the skill name** — derive a hyphen-case name from the description (e.g. "code review" → "code-review")
|
|
132
142
|
2. **Determine the skill type** — Pattern (architectural rule), Workflow (step-by-step), or Generator (scaffolding)
|
|
133
|
-
3. **Write the skill** as a ${scope} resource at path "skills/<name
|
|
143
|
+
3. **Write the skill** as a ${scope} resource at path "skills/<name>/SKILL.md" using resource-write
|
|
134
144
|
|
|
135
145
|
The skill file MUST have YAML frontmatter with name and description (under 40 words), then markdown with:
|
|
136
146
|
- Clear rule/purpose statement
|
|
@@ -301,6 +311,12 @@ The result should be a reusable agent profile, not a one-off task response.`,
|
|
|
301
311
|
const url = mcpUrl.trim();
|
|
302
312
|
if (!name || !url || mcpBusy)
|
|
303
313
|
return;
|
|
314
|
+
const validationError = getMcpUrlValidationError(url);
|
|
315
|
+
if (validationError) {
|
|
316
|
+
setMcpError(validationError);
|
|
317
|
+
setMcpTestResult(null);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
304
320
|
setMcpError(null);
|
|
305
321
|
setMcpBusy(true);
|
|
306
322
|
try {
|
|
@@ -315,7 +331,7 @@ The result should be a reusable agent profile, not a one-off task response.`,
|
|
|
315
331
|
onCreated?.();
|
|
316
332
|
}
|
|
317
333
|
catch (err) {
|
|
318
|
-
setMcpError(
|
|
334
|
+
setMcpError(formatMcpServerError(err));
|
|
319
335
|
}
|
|
320
336
|
finally {
|
|
321
337
|
setMcpBusy(false);
|
|
@@ -325,6 +341,12 @@ The result should be a reusable agent profile, not a one-off task response.`,
|
|
|
325
341
|
const url = mcpUrl.trim();
|
|
326
342
|
if (!url || mcpBusy)
|
|
327
343
|
return;
|
|
344
|
+
const validationError = getMcpUrlValidationError(url);
|
|
345
|
+
if (validationError) {
|
|
346
|
+
setMcpTestResult({ ok: false, message: validationError });
|
|
347
|
+
setMcpError(null);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
328
350
|
setMcpTestResult(null);
|
|
329
351
|
setMcpError(null);
|
|
330
352
|
setMcpBusy(true);
|
|
@@ -341,7 +363,7 @@ The result should be a reusable agent profile, not a one-off task response.`,
|
|
|
341
363
|
}
|
|
342
364
|
}
|
|
343
365
|
catch (err) {
|
|
344
|
-
setMcpTestResult({ ok: false, message:
|
|
366
|
+
setMcpTestResult({ ok: false, message: formatMcpServerError(err) });
|
|
345
367
|
}
|
|
346
368
|
finally {
|
|
347
369
|
setMcpBusy(false);
|
|
@@ -418,15 +440,27 @@ The result should be a reusable agent profile, not a one-off task response.`,
|
|
|
418
440
|
: "text-muted-foreground hover:text-foreground"), children: "Personal" }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => hasOrg && canCreateOrgMcp && setMcpScope("org"), disabled: !hasOrg || !canCreateOrgMcp, className: cn("flex-1 rounded px-2 py-1 text-[11px] font-medium", mcpScope === "org"
|
|
419
441
|
? "bg-accent text-foreground"
|
|
420
442
|
: "text-muted-foreground hover:text-foreground", (!hasOrg || !canCreateOrgMcp) &&
|
|
421
|
-
"cursor-not-allowed opacity-
|
|
443
|
+
"cursor-not-allowed opacity-50 hover:text-muted-foreground"), children: "Organization" }) }), _jsx(TooltipContent, { children: !hasOrg
|
|
422
444
|
? "Join an organization to share MCP servers"
|
|
423
445
|
: !canCreateOrgMcp
|
|
424
446
|
? "Only owners and admins can add org-scope servers"
|
|
425
|
-
: undefined })] })] }), _jsx("input", { value: mcpName, onChange: (e) =>
|
|
447
|
+
: undefined })] })] }), _jsx("input", { value: mcpName, onChange: (e) => {
|
|
448
|
+
setMcpName(e.target.value);
|
|
449
|
+
clearMcpFeedback();
|
|
450
|
+
}, className: "w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent", placeholder: "Server name (e.g. zapier)" }), _jsx("input", { value: mcpUrl, onChange: (e) => {
|
|
451
|
+
setMcpUrl(e.target.value);
|
|
452
|
+
clearMcpFeedback();
|
|
453
|
+
}, className: "w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent", placeholder: "https://mcp.example.com/" }), _jsx("input", { value: mcpDescription, onChange: (e) => {
|
|
454
|
+
setMcpDescription(e.target.value);
|
|
455
|
+
clearMcpFeedback();
|
|
456
|
+
}, className: "w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent", placeholder: "Description (optional)" }), _jsxs("div", { children: [_jsx("label", { className: "block text-[10px] font-medium text-foreground", children: "Headers" }), _jsx("p", { className: "mt-0.5 text-[10px] leading-snug text-muted-foreground/70", children: "Optional. One per line, for example Authorization: Bearer sk-..." })] }), _jsx("textarea", { value: mcpHeadersText, onChange: (e) => {
|
|
457
|
+
setMcpHeadersText(e.target.value);
|
|
458
|
+
clearMcpFeedback();
|
|
459
|
+
}, rows: 2, className: "w-full resize-y rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent", style: {
|
|
426
460
|
fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',
|
|
427
|
-
}, placeholder: "Authorization: Bearer sk-..." }), mcpTestResult && (_jsxs("div", { className: cn("flex items-
|
|
461
|
+
}, placeholder: "Authorization: Bearer sk-..." }), mcpTestResult && (_jsxs("div", { className: cn("flex items-start gap-1 text-[11px] leading-snug", mcpTestResult.ok
|
|
428
462
|
? "text-green-600 dark:text-green-400"
|
|
429
|
-
: "text-red-600 dark:text-red-400"), children: [mcpTestResult.ok && _jsx(IconCheck, { className: "h-3 w-3" }), mcpTestResult.message] })), mcpError && (_jsx("div", { className: "text-[11px] text-red-600 dark:text-red-400", children: mcpError }))] }), _jsxs("div", { className: "mt-2.5 flex items-center justify-between gap-2", children: [_jsx("button", { type: "button", onClick: runMcpTest, disabled: !mcpUrl.trim() || mcpBusy, className: "rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent disabled:opacity-40 disabled:pointer-events-none", children: "Test" }), _jsx("button", { type: "button", onClick: submitMcpServer, disabled: !mcpName.trim() || !mcpUrl.trim() || mcpBusy, className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none", children: mcpBusy ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Connect") })] })] }))] }))] }));
|
|
463
|
+
: "text-red-600 dark:text-red-400"), children: [mcpTestResult.ok && (_jsx(IconCheck, { className: "mt-0.5 h-3 w-3 shrink-0" })), _jsx("span", { className: "min-w-0 break-words", children: mcpTestResult.message })] })), mcpError && (_jsx("div", { className: "break-words text-[11px] leading-snug text-red-600 dark:text-red-400", children: mcpError }))] }), _jsxs("div", { className: "mt-2.5 flex items-center justify-between gap-2", children: [_jsx("button", { type: "button", onClick: runMcpTest, disabled: !mcpUrl.trim() || mcpBusy, className: "rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent disabled:opacity-40 disabled:pointer-events-none", children: "Test" }), _jsx("button", { type: "button", onClick: submitMcpServer, disabled: !mcpName.trim() || !mcpUrl.trim() || mcpBusy, className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none", children: mcpBusy ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Connect") })] })] }))] }))] }));
|
|
430
464
|
}
|
|
431
465
|
// ─── PathBreadcrumb ─────────────────────────────────────────────────────────
|
|
432
466
|
function PathBreadcrumb({ path }) {
|
|
@@ -447,11 +481,11 @@ This file customizes how the AI agent behaves in this app. Edit it to add your o
|
|
|
447
481
|
|
|
448
482
|
## Skills
|
|
449
483
|
|
|
450
|
-
Create skill files under \`skills
|
|
484
|
+
Create skill files under \`skills/<name>/SKILL.md\` to give the agent specialized knowledge. Reference them here:
|
|
451
485
|
|
|
452
486
|
| Skill | Path | Description |
|
|
453
487
|
|-------|------|-------------|
|
|
454
|
-
| *(use the skill button to create one)* | | |
|
|
488
|
+
| *(use the skill button to create one)* | \`skills/example/SKILL.md\` | |
|
|
455
489
|
`;
|
|
456
490
|
// BuilderBrowserCard moved to settings/BrowserSection.tsx
|
|
457
491
|
export function ResourcesPanel() {
|
|
@@ -461,6 +495,7 @@ export function ResourcesPanel() {
|
|
|
461
495
|
const canEditOrg = !org?.orgId || org.role === "owner" || org.role === "admin";
|
|
462
496
|
const [activeScope, setActiveScope] = useState(canEditOrg ? "shared" : "personal");
|
|
463
497
|
const [selectedResourceId, setSelectedResourceId] = useState(null);
|
|
498
|
+
const [toolbarDeleteConfirmId, setToolbarDeleteConfirmId] = useState(null);
|
|
464
499
|
const [dragOver, setDragOver] = useState(false);
|
|
465
500
|
const [editorView, setEditorView] = useState(() => {
|
|
466
501
|
try {
|
|
@@ -471,6 +506,9 @@ export function ResourcesPanel() {
|
|
|
471
506
|
catch { }
|
|
472
507
|
return "visual";
|
|
473
508
|
});
|
|
509
|
+
useEffect(() => {
|
|
510
|
+
setToolbarDeleteConfirmId(null);
|
|
511
|
+
}, [selectedResourceId]);
|
|
474
512
|
const [saveStatus, setSaveStatus] = useState("idle");
|
|
475
513
|
const fileInputRef = useRef(null);
|
|
476
514
|
const sharedTreeQuery = useResourceTree("shared");
|
|
@@ -640,9 +678,21 @@ export function ResourcesPanel() {
|
|
|
640
678
|
: saveStatus === "saved"
|
|
641
679
|
? "Saved"
|
|
642
680
|
: "" }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => {
|
|
643
|
-
if (selectedResourceId)
|
|
681
|
+
if (!selectedResourceId)
|
|
682
|
+
return;
|
|
683
|
+
if (toolbarDeleteConfirmId === selectedResourceId) {
|
|
644
684
|
handleDelete(selectedResourceId);
|
|
645
|
-
|
|
685
|
+
setToolbarDeleteConfirmId(null);
|
|
686
|
+
}
|
|
687
|
+
else {
|
|
688
|
+
setToolbarDeleteConfirmId(selectedResourceId);
|
|
689
|
+
}
|
|
690
|
+
}, "aria-label": toolbarDeleteConfirmId === selectedResourceId
|
|
691
|
+
? "Confirm delete resource"
|
|
692
|
+
: "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 &&
|
|
693
|
+
"bg-destructive/10 text-destructive"), children: _jsx(IconTrash, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: toolbarDeleteConfirmId === selectedResourceId
|
|
694
|
+
? "Click again to delete"
|
|
695
|
+
: "Delete resource" })] }) })] })] })) : (_jsxs("div", { className: "absolute top-1 right-1 z-10 flex items-center gap-1", children: [_jsx(CreateMenu, { scope: activeScope, onCreateFile: handleCreateFromToolbar, onCreateResource: handleCreateResourceFromToolbar, onCreateMcpServer: handleCreateMcpServer, canCreateOrgMcp: canCreateOrgMcp, hasOrg: hasOrgForMcp }), _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("a", { href: WORKSPACE_DOCS_URL, target: "_blank", rel: "noopener noreferrer", "aria-label": "What is the Workspace? \u2014 open docs", className: "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconHelp, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "What is the Workspace? \u2014 open docs" })] }) }), _jsx("input", { ref: fileInputRef, type: "file", multiple: true, className: "hidden", onChange: (e) => {
|
|
646
696
|
if (e.target.files && e.target.files.length > 0) {
|
|
647
697
|
handleUploadFiles(e.target.files);
|
|
648
698
|
e.target.value = "";
|