@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
package/dist/jobs/scheduler.js
CHANGED
|
@@ -12,7 +12,8 @@ export function parseJobFrontmatter(content) {
|
|
|
12
12
|
export function buildJobContent(meta, body) {
|
|
13
13
|
return buildJobResourceContent(meta, body);
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
const MAX_CONCURRENT_SCHEDULED_JOBS = 8;
|
|
16
|
+
const _activeScheduledJobs = new Set();
|
|
16
17
|
// Skip the DB query on every tick if we recently confirmed no jobs exist.
|
|
17
18
|
// `_hasJobsCache` is invalidated whenever a `jobs/*` resource is written or
|
|
18
19
|
// deleted (subscribed below), and refreshed at most every 5 minutes.
|
|
@@ -39,12 +40,12 @@ function subscribeToJobsResourceEvents() {
|
|
|
39
40
|
}
|
|
40
41
|
/**
|
|
41
42
|
* Process all due recurring jobs. Called every 60 seconds.
|
|
42
|
-
*
|
|
43
|
+
*
|
|
44
|
+
* Scans may overlap while a long-running job is executing. Each resource is
|
|
45
|
+
* still protected by its persisted running state and a process-local key, so
|
|
46
|
+
* one job cannot run twice while leaving other due jobs waiting behind it.
|
|
43
47
|
*/
|
|
44
48
|
export async function processRecurringJobs(deps) {
|
|
45
|
-
// Prevent concurrent runs
|
|
46
|
-
if (_isRunning)
|
|
47
|
-
return;
|
|
48
49
|
subscribeToJobsResourceEvents();
|
|
49
50
|
// Skip if we recently confirmed there are no job resources to run.
|
|
50
51
|
const nowMs = Date.now();
|
|
@@ -52,7 +53,8 @@ export async function processRecurringJobs(deps) {
|
|
|
52
53
|
nowMs - _lastJobsCheck < JOBS_CHECK_INTERVAL_MS) {
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
+
const reservedJobKeys = new Set();
|
|
57
|
+
const startedJobKeys = new Set();
|
|
56
58
|
try {
|
|
57
59
|
const jobResources = await resourceListAllOwners("jobs/");
|
|
58
60
|
_hasJobsCache = jobResources.some((r) => r.path.endsWith(".md") && !r.path.endsWith(".keep"));
|
|
@@ -60,6 +62,7 @@ export async function processRecurringJobs(deps) {
|
|
|
60
62
|
if (!_hasJobsCache)
|
|
61
63
|
return;
|
|
62
64
|
const now = new Date();
|
|
65
|
+
const dueJobs = [];
|
|
63
66
|
for (const resource of jobResources) {
|
|
64
67
|
// Skip non-markdown or .keep files
|
|
65
68
|
if (!resource.path.endsWith(".md"))
|
|
@@ -104,8 +107,25 @@ export async function processRecurringJobs(deps) {
|
|
|
104
107
|
// Skip if body is empty
|
|
105
108
|
if (!body.trim())
|
|
106
109
|
continue;
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
const key = `${resource.owner}:${resource.path}`;
|
|
111
|
+
if (_activeScheduledJobs.has(key))
|
|
112
|
+
continue;
|
|
113
|
+
if (_activeScheduledJobs.size >= MAX_CONCURRENT_SCHEDULED_JOBS)
|
|
114
|
+
continue;
|
|
115
|
+
_activeScheduledJobs.add(key);
|
|
116
|
+
reservedJobKeys.add(key);
|
|
117
|
+
dueJobs.push({ key, resource, meta, body });
|
|
118
|
+
}
|
|
119
|
+
const outcomes = await Promise.allSettled(dueJobs.map(({ key, resource, meta, body }) => {
|
|
120
|
+
startedJobKeys.add(key);
|
|
121
|
+
return executeJob(resource, meta, body, deps, now).finally(() => {
|
|
122
|
+
_activeScheduledJobs.delete(key);
|
|
123
|
+
});
|
|
124
|
+
}));
|
|
125
|
+
for (const outcome of outcomes) {
|
|
126
|
+
if (outcome.status === "rejected") {
|
|
127
|
+
console.error("[recurring-jobs] Job execution error:", outcome.reason);
|
|
128
|
+
}
|
|
109
129
|
}
|
|
110
130
|
}
|
|
111
131
|
catch (err) {
|
|
@@ -125,7 +145,12 @@ export async function processRecurringJobs(deps) {
|
|
|
125
145
|
console.error("[recurring-jobs] Error processing jobs:", detail);
|
|
126
146
|
}
|
|
127
147
|
finally {
|
|
128
|
-
|
|
148
|
+
// A scan can fail after reserving a job but before dispatching it. Do not
|
|
149
|
+
// leave that reservation blocking the job on every subsequent tick.
|
|
150
|
+
for (const key of reservedJobKeys) {
|
|
151
|
+
if (!startedJobKeys.has(key))
|
|
152
|
+
_activeScheduledJobs.delete(key);
|
|
153
|
+
}
|
|
129
154
|
}
|
|
130
155
|
}
|
|
131
156
|
export const jobRunCutOffReason = backgroundRunCutOffReason;
|
|
@@ -34,9 +34,9 @@ const messages = {
|
|
|
34
34
|
openTeamSettings: "Open team settings",
|
|
35
35
|
openResourceSettings: "Open resource settings",
|
|
36
36
|
backHome: "Back to home",
|
|
37
|
-
mcpConnectionsTitle: "
|
|
38
|
-
mcpConnectionsDescription: "Connect
|
|
39
|
-
openMcpConnections: "
|
|
37
|
+
mcpConnectionsTitle: "Agent integrations",
|
|
38
|
+
mcpConnectionsDescription: "Connect tools and services so the agent can use them.",
|
|
39
|
+
openMcpConnections: "Open integrations",
|
|
40
40
|
profileTitle: "Account",
|
|
41
41
|
profileDescription: "Your name, profile photo, and signed-in identity.",
|
|
42
42
|
profileLoading: "Loading...",
|
|
@@ -256,17 +256,17 @@ const messages = {
|
|
|
256
256
|
openApp: "Open app",
|
|
257
257
|
notDispatchOrWorkspaceApp: " a Dispatch tab or a workspace app in this workspace.",
|
|
258
258
|
agentsDescription: "Dispatch can delegate to the built-in app suite over A2A by default. Add extra agents here only if you want to route work to apps outside that built-in set.",
|
|
259
|
-
mcpAccessUpdated: "
|
|
259
|
+
mcpAccessUpdated: "Agent integration access updated",
|
|
260
260
|
selectAppForMcp: "Select at least one app, or expose all apps.",
|
|
261
|
-
mcpUrlCopied: "
|
|
262
|
-
mcpUrlCopyFailed: "Could not copy
|
|
263
|
-
unifiedMcpGateway: "Unified
|
|
261
|
+
mcpUrlCopied: "Agent integration URL copied",
|
|
262
|
+
mcpUrlCopyFailed: "Could not copy agent integration URL",
|
|
263
|
+
unifiedMcpGateway: "Unified agent integration gateway",
|
|
264
264
|
unifiedMcpGatewayDescription: "Connect external agents to Dispatch once, then route to granted workspace apps through",
|
|
265
265
|
allApps: "All apps",
|
|
266
266
|
selectedApps: "Selected apps",
|
|
267
267
|
loading: "Loading",
|
|
268
268
|
grantedCount: "{{count}} granted",
|
|
269
|
-
exposeAllAppsMcp: "Expose all apps through Dispatch
|
|
269
|
+
exposeAllAppsMcp: "Expose all apps through Dispatch",
|
|
270
270
|
copyUrl: "Copy URL",
|
|
271
271
|
metricsUnavailable: "Metrics unavailable",
|
|
272
272
|
unableToLoadUsage: "Unable to load usage.",
|
|
@@ -388,7 +388,7 @@ const messages = {
|
|
|
388
388
|
askAgentTitle: "Ask the agent",
|
|
389
389
|
askAgentPlaceholder: "Tell the agent what you want to do…",
|
|
390
390
|
connectAi: "Connect AI",
|
|
391
|
-
builderOrOwnKeys: "Use Builder.io
|
|
391
|
+
builderOrOwnKeys: "Use Builder.io free credits, or add your own provider keys.",
|
|
392
392
|
connectBuilderIo: "Connect Builder.io",
|
|
393
393
|
connectingBuilder: "Connecting Builder.io…",
|
|
394
394
|
builderModelCredits: "Free credits for Claude, OpenAI & Gemini",
|
|
@@ -566,7 +566,7 @@ const messages = {
|
|
|
566
566
|
automationPrompt: "Create an automation that does this: ",
|
|
567
567
|
cancel: "Cancel",
|
|
568
568
|
instructions: "Instructions",
|
|
569
|
-
mcpTools: "Connected
|
|
569
|
+
mcpTools: "Connected agent tools",
|
|
570
570
|
automationEventTrigger: "On {{event}}",
|
|
571
571
|
scheduledTrigger: "Scheduled",
|
|
572
572
|
eventTrigger: "Event-triggered",
|
|
@@ -838,9 +838,9 @@ const messages = {
|
|
|
838
838
|
},
|
|
839
839
|
mcpIntegrations: {
|
|
840
840
|
menuLabel: "Integrations",
|
|
841
|
-
menuDescription: "Connect
|
|
841
|
+
menuDescription: "Connect tools and services to the agent",
|
|
842
842
|
title: "Connect integrations",
|
|
843
|
-
description: "Browse {{count}}
|
|
843
|
+
description: "Browse {{count}} agent integrations or add a custom one.",
|
|
844
844
|
searchPlaceholder: "Search integrations",
|
|
845
845
|
addYourOwn: "Add your own",
|
|
846
846
|
noMatches: "No integrations match that search.",
|
|
@@ -853,21 +853,21 @@ const messages = {
|
|
|
853
853
|
connectSuggestionWithApiToken: "Connect {{name}} with an API token to use it in chat",
|
|
854
854
|
dismissSuggestion: "Dismiss integration suggestion",
|
|
855
855
|
backToIntegrations: "Back to integrations",
|
|
856
|
-
customTitle: "Add custom
|
|
856
|
+
customTitle: "Add custom agent integration",
|
|
857
857
|
configureTitle: "Configure {{name}}",
|
|
858
858
|
presetNoAuthDescription: "Preset values are filled in. Test the endpoint or connect it now.",
|
|
859
859
|
presetAuthDescription: "Preset values are filled in. Add any required authorization details before connecting.",
|
|
860
|
-
customDescription: "Paste a Streamable HTTP or SSE
|
|
860
|
+
customDescription: "Paste a Streamable HTTP or SSE endpoint and optional headers.",
|
|
861
861
|
oauthNotice: "This provider usually requires an OAuth setup. Follow the provider docs, or add an Authorization header if your endpoint supports token-based access.",
|
|
862
862
|
personal: "Personal",
|
|
863
863
|
organization: "Organization",
|
|
864
|
-
serverNameRequired: "Enter
|
|
865
|
-
serverName: "
|
|
864
|
+
serverNameRequired: "Enter an integration name before connecting with OAuth.",
|
|
865
|
+
serverName: "Integration name",
|
|
866
866
|
url: "URL",
|
|
867
867
|
fieldDescription: "Description",
|
|
868
868
|
headers: "Headers",
|
|
869
|
-
serverNamePlaceholder: "
|
|
870
|
-
urlPlaceholder: "https://
|
|
869
|
+
serverNamePlaceholder: "Integration name",
|
|
870
|
+
urlPlaceholder: "https://example.com/agent-integration",
|
|
871
871
|
descriptionPlaceholder: "Description (optional)",
|
|
872
872
|
headersPlaceholder: "Authorization: Bearer <token>",
|
|
873
873
|
openSetupDocs: "Open setup docs",
|
|
@@ -889,12 +889,12 @@ const messages = {
|
|
|
889
889
|
notion: {
|
|
890
890
|
description: "Search pages and team knowledge.",
|
|
891
891
|
useCase: "Documentation, knowledge management, notes, content creation",
|
|
892
|
-
setupNote: "Notion
|
|
892
|
+
setupNote: "The Notion integration uses user OAuth. Enterprise workspaces can audit integration usage and allow or block clients; reconnect after admin policy changes.",
|
|
893
893
|
},
|
|
894
894
|
granola: {
|
|
895
895
|
description: "Search meeting notes, transcripts, and action items.",
|
|
896
896
|
useCase: "Meeting notes, recordings, transcripts, action items, follow-ups",
|
|
897
|
-
setupNote: "Granola
|
|
897
|
+
setupNote: "The Granola integration uses browser OAuth. Authorize the signed-in Granola account and review which meeting notes and transcripts the agent can access.",
|
|
898
898
|
},
|
|
899
899
|
semgrep: {
|
|
900
900
|
description: "Scan code for security findings.",
|
|
@@ -919,32 +919,32 @@ const messages = {
|
|
|
919
919
|
atlassian: {
|
|
920
920
|
description: "Read and write Jira issues and Confluence content.",
|
|
921
921
|
useCase: "Project management, issue tracking, documentation, team collaboration",
|
|
922
|
-
setupNote: "Atlassian admins manage the allowed AI domains and Rovo
|
|
922
|
+
setupNote: "Atlassian admins manage the allowed AI domains and Rovo integration permissions. Use the current Streamable HTTP endpoint, /v1/mcp, and reconnect after policy changes.",
|
|
923
923
|
},
|
|
924
924
|
cloudflare: {
|
|
925
|
-
description: "Search and operate Cloudflare services through
|
|
925
|
+
description: "Search and operate Cloudflare services through its integration.",
|
|
926
926
|
useCase: "DNS, Workers, domains, security, observability, platform APIs",
|
|
927
|
-
setupNote: "Cloudflare's managed
|
|
927
|
+
setupNote: "Cloudflare's managed integration directory contains product-specific integrations as well as the broad API integration. Review the scopes and choose the narrowest endpoint that fits your workflow.",
|
|
928
928
|
},
|
|
929
929
|
gitlab: {
|
|
930
930
|
description: "Read and manage GitLab projects, issues, and merge requests.",
|
|
931
931
|
useCase: "Repositories, issues, merge requests, CI/CD, code analytics",
|
|
932
|
-
setupNote: "GitLab
|
|
932
|
+
setupNote: "The GitLab integration is currently beta. On GitLab.com, a top-level group admin must allow integration access before OAuth can complete; self-managed instances have an equivalent instance setting.",
|
|
933
933
|
},
|
|
934
934
|
figma: {
|
|
935
935
|
description: "Bring Figma design context and canvas actions into an agent.",
|
|
936
936
|
useCase: "Design files, components, variables, design systems, canvas",
|
|
937
|
-
setupNote: "Figma
|
|
937
|
+
setupNote: "The Figma integration only allows clients listed in Figma's integration catalog, so this remote endpoint cannot connect from Agent Native yet. Use the Figma REST API fallback with a personal access token for reading file and node context; canvas actions remain unavailable until Figma approves Agent Native.",
|
|
938
938
|
},
|
|
939
939
|
canva: {
|
|
940
940
|
description: "Search, create, and update Canva designs and assets.",
|
|
941
941
|
useCase: "Designs, templates, assets, brand kits, exports, collaboration",
|
|
942
|
-
setupNote: "Canva
|
|
942
|
+
setupNote: "The Canva integration uses per-user OAuth and requires clients to allow Canva's canva.com and canva.ai domains. Confirm the current redirect and client setup in Canva's integration documentation before connecting.",
|
|
943
943
|
},
|
|
944
944
|
vercel: {
|
|
945
945
|
description: "Search Vercel docs and inspect projects, deployments, and logs.",
|
|
946
946
|
useCase: "Deployments, projects, logs, domains, hosting, documentation",
|
|
947
|
-
setupNote: "Vercel
|
|
947
|
+
setupNote: "The Vercel integration only accepts reviewed and approved AI clients. Agent Native must be added to Vercel's supported-client list before a generic framework connection will work.",
|
|
948
948
|
},
|
|
949
949
|
github: {
|
|
950
950
|
description: "Read repositories, issues, pull requests, and code context.",
|
|
@@ -952,54 +952,54 @@ const messages = {
|
|
|
952
952
|
setupNote: "GitHub does not use a Figma-style vendor client allowlist. Its hosted endpoint is tied to GitHub Copilot integrations; clients need a registered OAuth app, and organizations may enforce OAuth App Access Policies.",
|
|
953
953
|
},
|
|
954
954
|
slack: {
|
|
955
|
-
description: "Search Slack conversations and take workspace actions through
|
|
955
|
+
description: "Search Slack conversations and take workspace actions through its integration.",
|
|
956
956
|
useCase: "Messages, channels, people, company memory, workflows",
|
|
957
|
-
setupNote: "Slack
|
|
957
|
+
setupNote: "The Slack integration requires a registered Slack app with a fixed app ID. Dynamic client registration is not supported, and only Slack Marketplace or internal apps may connect. Use Slack's managed messaging OAuth flow for Agent Native workflows.",
|
|
958
958
|
},
|
|
959
959
|
asana: {
|
|
960
960
|
description: "Search and manage Asana tasks, projects, and work graph data.",
|
|
961
961
|
useCase: "Tasks, projects, portfolios, planning, workload",
|
|
962
|
-
setupNote: "Asana's
|
|
962
|
+
setupNote: "Asana's agent integration requires a pre-registered OAuth app and does not support dynamic client registration. Configure an Asana app client before connecting.",
|
|
963
963
|
},
|
|
964
964
|
hubspot: {
|
|
965
|
-
description: "Search and update HubSpot CRM records through
|
|
965
|
+
description: "Search and update HubSpot CRM records through its integration.",
|
|
966
966
|
useCase: "CRM, contacts, companies, deals, tickets, customer analytics",
|
|
967
|
-
setupNote: "HubSpot
|
|
967
|
+
setupNote: "The HubSpot integration requires a HubSpot Auth App and PKCE. Create the app in the HubSpot Developer Platform before connecting; the existing HubSpot OAuth connector remains available to app actions.",
|
|
968
968
|
},
|
|
969
969
|
intercom: {
|
|
970
970
|
description: "Search conversations and customer support knowledge.",
|
|
971
971
|
useCase: "Customer support, conversations, contacts, help center content",
|
|
972
|
-
setupNote: "Intercom
|
|
972
|
+
setupNote: "The Intercom integration uses OAuth and is available for US-hosted workspaces. Confirm the workspace region and requested scopes during authorization.",
|
|
973
973
|
},
|
|
974
974
|
monday: {
|
|
975
975
|
description: "Work with boards, items, and team workflows.",
|
|
976
976
|
useCase: "Work management, boards, projects, tasks, team operations",
|
|
977
|
-
setupNote: "monday.com
|
|
977
|
+
setupNote: "The monday.com integration uses OAuth over Streamable HTTP. Choose the workspace and permissions to share during authorization.",
|
|
978
978
|
},
|
|
979
979
|
webflow: {
|
|
980
980
|
description: "Read and update Webflow sites and content.",
|
|
981
981
|
useCase: "Websites, CMS, site content, publishing, design workflows",
|
|
982
|
-
setupNote: "Webflow
|
|
982
|
+
setupNote: "The Webflow integration uses OAuth. Designer capabilities may install Webflow's Bridge App during authorization; Data API access is available separately.",
|
|
983
983
|
},
|
|
984
984
|
paypal: {
|
|
985
985
|
description: "Work with PayPal payments, invoices, and commerce data.",
|
|
986
986
|
useCase: "Payments, invoices, transactions, merchant operations",
|
|
987
|
-
setupNote: "PayPal exposes OAuth discovery and login for its remote
|
|
987
|
+
setupNote: "PayPal exposes OAuth discovery and login for its remote agent integration. Agent Native uses the currently live /sse endpoint; review the merchant permissions before authorizing.",
|
|
988
988
|
},
|
|
989
989
|
box: {
|
|
990
990
|
description: "Search and manage files and folders in Box.",
|
|
991
991
|
useCase: "Files, folders, enterprise content, search, collaboration",
|
|
992
|
-
setupNote: "Box
|
|
992
|
+
setupNote: "The Box integration is beta and requires an administrator to enable it. Custom clients also need Box Integration Credentials, a redirect URI, and approved scopes.",
|
|
993
993
|
},
|
|
994
994
|
netlify: {
|
|
995
995
|
description: "Inspect and operate Netlify sites and deployments.",
|
|
996
996
|
useCase: "Sites, deployments, builds, domains, hosting operations",
|
|
997
|
-
setupNote: "Netlify documents a remote
|
|
997
|
+
setupNote: "Netlify documents a remote integration setup for supported clients. Review the site and team permissions before completing OAuth.",
|
|
998
998
|
},
|
|
999
999
|
zapier: {
|
|
1000
|
-
description: "Connect
|
|
1000
|
+
description: "Connect tools to thousands of app actions.",
|
|
1001
1001
|
useCase: "Automation, workflows, app actions, cross-service operations",
|
|
1002
|
-
setupNote: "Zapier
|
|
1002
|
+
setupNote: "Zapier's agent integration uses a user-created connection and token for unlisted clients. Create the connection in Zapier, then paste its generated bearer token into the header field.",
|
|
1003
1003
|
},
|
|
1004
1004
|
},
|
|
1005
1005
|
auth: {
|
|
@@ -190,7 +190,7 @@ async function handleMcpOAuthCallback(event, options) {
|
|
|
190
190
|
}
|
|
191
191
|
await options.reconfigure();
|
|
192
192
|
const returnPath = flow.returnUrl ??
|
|
193
|
-
`/settings
|
|
193
|
+
`/settings?connected=mcp-${encodeURIComponent(flow.name)}#integrations`;
|
|
194
194
|
return redirectWithStagedCookies(event, getAppUrl(event, returnPath));
|
|
195
195
|
}
|
|
196
196
|
catch {
|
|
@@ -75,10 +75,8 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
|
|
|
75
75
|
user: "user";
|
|
76
76
|
}>>;
|
|
77
77
|
}, z.core.$strip>>, {
|
|
78
|
-
id?: undefined;
|
|
79
|
-
provider?: undefined;
|
|
80
78
|
deleted?: undefined;
|
|
81
|
-
|
|
79
|
+
message?: undefined;
|
|
82
80
|
providers: {
|
|
83
81
|
id: string;
|
|
84
82
|
label: string;
|
|
@@ -89,45 +87,47 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
|
|
|
89
87
|
updatedAt: number;
|
|
90
88
|
}[];
|
|
91
89
|
count: number;
|
|
90
|
+
provider?: undefined;
|
|
91
|
+
found?: undefined;
|
|
92
92
|
registered?: undefined;
|
|
93
|
+
id?: undefined;
|
|
93
94
|
label?: undefined;
|
|
94
|
-
message?: undefined;
|
|
95
95
|
} | {
|
|
96
|
-
count?: undefined;
|
|
97
|
-
id?: undefined;
|
|
98
96
|
deleted?: undefined;
|
|
97
|
+
count?: undefined;
|
|
98
|
+
message?: undefined;
|
|
99
99
|
providers?: undefined;
|
|
100
100
|
found: boolean;
|
|
101
101
|
provider: import("../custom-registry.js").CustomProviderConfig;
|
|
102
102
|
registered?: undefined;
|
|
103
|
+
id?: undefined;
|
|
103
104
|
label?: undefined;
|
|
104
|
-
message?: undefined;
|
|
105
105
|
} | {
|
|
106
|
-
count?: undefined;
|
|
107
|
-
provider?: undefined;
|
|
108
106
|
deleted?: undefined;
|
|
107
|
+
count?: undefined;
|
|
108
|
+
message?: undefined;
|
|
109
109
|
providers?: undefined;
|
|
110
|
+
provider?: undefined;
|
|
110
111
|
found: boolean;
|
|
111
112
|
id: string;
|
|
112
113
|
registered?: undefined;
|
|
113
114
|
label?: undefined;
|
|
114
|
-
message?: undefined;
|
|
115
115
|
} | {
|
|
116
116
|
count?: undefined;
|
|
117
|
+
message?: undefined;
|
|
118
|
+
providers?: undefined;
|
|
117
119
|
provider?: undefined;
|
|
118
120
|
found?: undefined;
|
|
119
|
-
providers?: undefined;
|
|
120
121
|
deleted: boolean;
|
|
121
122
|
id: string;
|
|
122
123
|
registered?: undefined;
|
|
123
124
|
label?: undefined;
|
|
124
|
-
message?: undefined;
|
|
125
125
|
} | {
|
|
126
|
+
deleted?: undefined;
|
|
126
127
|
count?: undefined;
|
|
128
|
+
providers?: undefined;
|
|
127
129
|
provider?: undefined;
|
|
128
|
-
deleted?: undefined;
|
|
129
130
|
found?: undefined;
|
|
130
|
-
providers?: undefined;
|
|
131
131
|
registered: boolean;
|
|
132
132
|
id: string;
|
|
133
133
|
label: string;
|
|
@@ -311,9 +311,9 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
|
|
|
311
311
|
notes?: string | undefined;
|
|
312
312
|
scope?: "org" | "user" | undefined;
|
|
313
313
|
}, {
|
|
314
|
-
message?: undefined;
|
|
315
314
|
id?: undefined;
|
|
316
|
-
|
|
315
|
+
provider?: undefined;
|
|
316
|
+
deleted?: undefined;
|
|
317
317
|
providers: {
|
|
318
318
|
id: string;
|
|
319
319
|
label: string;
|
|
@@ -324,46 +324,46 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
|
|
|
324
324
|
updatedAt: number;
|
|
325
325
|
}[];
|
|
326
326
|
count: number;
|
|
327
|
-
|
|
328
|
-
deleted?: undefined;
|
|
327
|
+
found?: undefined;
|
|
329
328
|
registered?: undefined;
|
|
330
329
|
label?: undefined;
|
|
331
|
-
} | {
|
|
332
330
|
message?: undefined;
|
|
331
|
+
} | {
|
|
333
332
|
id?: undefined;
|
|
333
|
+
deleted?: undefined;
|
|
334
334
|
count?: undefined;
|
|
335
335
|
providers?: undefined;
|
|
336
336
|
found: boolean;
|
|
337
337
|
provider: import("../custom-registry.js").CustomProviderConfig;
|
|
338
|
-
deleted?: undefined;
|
|
339
338
|
registered?: undefined;
|
|
340
339
|
label?: undefined;
|
|
341
|
-
} | {
|
|
342
340
|
message?: undefined;
|
|
341
|
+
} | {
|
|
342
|
+
provider?: undefined;
|
|
343
|
+
deleted?: undefined;
|
|
343
344
|
count?: undefined;
|
|
344
345
|
providers?: undefined;
|
|
345
|
-
provider?: undefined;
|
|
346
346
|
found: boolean;
|
|
347
347
|
id: string;
|
|
348
|
-
deleted?: undefined;
|
|
349
348
|
registered?: undefined;
|
|
350
349
|
label?: undefined;
|
|
351
|
-
} | {
|
|
352
350
|
message?: undefined;
|
|
353
|
-
|
|
351
|
+
} | {
|
|
352
|
+
provider?: undefined;
|
|
354
353
|
count?: undefined;
|
|
355
354
|
providers?: undefined;
|
|
356
|
-
|
|
355
|
+
found?: undefined;
|
|
357
356
|
deleted: boolean;
|
|
358
357
|
id: string;
|
|
359
358
|
registered?: undefined;
|
|
360
359
|
label?: undefined;
|
|
360
|
+
message?: undefined;
|
|
361
361
|
} | {
|
|
362
|
-
found?: undefined;
|
|
363
|
-
count?: undefined;
|
|
364
|
-
providers?: undefined;
|
|
365
362
|
provider?: undefined;
|
|
366
363
|
deleted?: undefined;
|
|
364
|
+
count?: undefined;
|
|
365
|
+
providers?: undefined;
|
|
366
|
+
found?: undefined;
|
|
367
367
|
registered: boolean;
|
|
368
368
|
id: string;
|
|
369
369
|
label: string;
|
|
@@ -48,8 +48,8 @@ export declare function handleUpdateResource(event: any): Promise<import("./stor
|
|
|
48
48
|
}>;
|
|
49
49
|
/** DELETE /_agent-native/resources/:id — delete a resource */
|
|
50
50
|
export declare function handleDeleteResource(event: any): Promise<{
|
|
51
|
-
ok?: undefined;
|
|
52
51
|
error: string;
|
|
52
|
+
ok?: undefined;
|
|
53
53
|
} | {
|
|
54
54
|
error?: undefined;
|
|
55
55
|
ok: boolean;
|
|
@@ -44,7 +44,7 @@ export function maybeRegisterSecretOnboardingStep(secret) {
|
|
|
44
44
|
kind: "link",
|
|
45
45
|
primary: true,
|
|
46
46
|
label: `Open ${secret.label} settings`,
|
|
47
|
-
description: "Paste the key in
|
|
47
|
+
description: "Paste the key in Settings → Integrations → API keys.",
|
|
48
48
|
payload: {
|
|
49
49
|
// Fragment handled by the sidebar — expands the Secrets section
|
|
50
50
|
// and focuses the matching input.
|
package/dist/secrets/routes.d.ts
CHANGED
|
@@ -34,37 +34,37 @@ export declare function createListSecretsHandler(): import("h3").EventHandlerWit
|
|
|
34
34
|
/** POST /_agent-native/secrets/:key — write a secret. */
|
|
35
35
|
export declare function createWriteSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
36
36
|
error: string;
|
|
37
|
-
ok?: undefined;
|
|
38
37
|
status?: undefined;
|
|
38
|
+
ok?: undefined;
|
|
39
39
|
} | {
|
|
40
|
-
error?: undefined;
|
|
41
40
|
ok: boolean;
|
|
42
41
|
status: string;
|
|
42
|
+
error?: undefined;
|
|
43
43
|
} | {
|
|
44
|
-
ok?: undefined;
|
|
45
44
|
error: string;
|
|
46
45
|
removed?: undefined;
|
|
46
|
+
ok?: undefined;
|
|
47
47
|
} | {
|
|
48
|
-
error?: undefined;
|
|
49
48
|
ok: boolean;
|
|
50
49
|
removed: boolean;
|
|
50
|
+
error?: undefined;
|
|
51
51
|
}>>;
|
|
52
52
|
/**
|
|
53
53
|
* POST /_agent-native/secrets/:key/test — validate an optional candidate value
|
|
54
54
|
* or the current stored value without changing anything.
|
|
55
55
|
*/
|
|
56
56
|
export declare function createTestSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
57
|
-
ok?: undefined;
|
|
58
57
|
error: string;
|
|
59
58
|
note?: undefined;
|
|
59
|
+
ok?: undefined;
|
|
60
60
|
} | {
|
|
61
|
-
error?: undefined;
|
|
62
61
|
ok: boolean;
|
|
63
62
|
note?: undefined;
|
|
64
|
-
} | {
|
|
65
63
|
error?: undefined;
|
|
64
|
+
} | {
|
|
66
65
|
ok: boolean;
|
|
67
66
|
note: string;
|
|
67
|
+
error?: undefined;
|
|
68
68
|
} | {
|
|
69
69
|
note?: undefined;
|
|
70
70
|
ok: boolean;
|
|
@@ -95,12 +95,12 @@ export interface AdHocSecretPayload {
|
|
|
95
95
|
export declare function createAdHocSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<AdHocSecretPayload[] | {
|
|
96
96
|
error: string;
|
|
97
97
|
} | {
|
|
98
|
-
error?: undefined;
|
|
99
98
|
ok: boolean;
|
|
100
99
|
key: string;
|
|
101
|
-
} | {
|
|
102
100
|
error?: undefined;
|
|
101
|
+
} | {
|
|
103
102
|
ok: boolean;
|
|
104
103
|
removed: boolean;
|
|
104
|
+
error?: undefined;
|
|
105
105
|
}>>;
|
|
106
106
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -16,6 +16,7 @@ export declare function createTeamTools(deps: {
|
|
|
16
16
|
getEngine: () => AgentEngine;
|
|
17
17
|
getModel: () => string;
|
|
18
18
|
getParentThreadId: () => string;
|
|
19
|
+
getAppId?: () => string | null | undefined;
|
|
19
20
|
getParentRunId?: () => string;
|
|
20
21
|
getSend: () => ((event: import("../../agent/types.js").AgentChatEvent) => void) | null;
|
|
21
22
|
}): Record<string, ActionEntry>;
|
|
@@ -402,6 +402,7 @@ export function createTeamTools(deps) {
|
|
|
402
402
|
model: selectedModel,
|
|
403
403
|
name: selectedName || undefined,
|
|
404
404
|
parentThreadId: deps.getParentThreadId(),
|
|
405
|
+
parentSourceAppId: deps.getAppId?.() ?? null,
|
|
405
406
|
parentRunId: deps.getParentRunId?.(),
|
|
406
407
|
parentSend: (event) => {
|
|
407
408
|
if (capturedSend)
|
|
@@ -20,7 +20,7 @@ import { appendThreadDebugHistory } from "../agent/thread-debug-history.js";
|
|
|
20
20
|
import { attachToolSearch } from "../agent/tool-search.js";
|
|
21
21
|
import { readAppStateForCurrentTab } from "../application-state/script-helpers.js";
|
|
22
22
|
import { runChatThreadDataMigrations } from "../chat-threads/migrations.js";
|
|
23
|
-
import { adoptThreadScopeIfUnscoped, createThread, forkThread, getThread, registerChatThreadsShareable, resolveRunThreadScope, resolveThreadAccess, listThreads, searchThreads, renameThread, createThreadShareLink, getThreadByShareToken, getThreadShareState, revokeThreadShareLink, setThreadArchived, setThreadPinned, setThreadScope, updateThreadData, withThreadDataLock, deleteThread, setThreadQueuedMessages, } from "../chat-threads/store.js";
|
|
23
|
+
import { adoptThreadScopeIfUnscoped, createThread, forkThread, getThread, registerChatThreadsShareable, resolveRunThreadScope, resolveThreadAccess, listThreads, searchThreads, renameThread, createThreadShareLink, getThreadByShareToken, getThreadShareState, revokeThreadShareLink, setThreadArchived, setThreadPinned, setThreadScope, updateThreadData, withThreadDataLock, deleteThread, setThreadQueuedMessages, setThreadSourceIfMissing, } from "../chat-threads/store.js";
|
|
24
24
|
import { isCheckpointRestorePath } from "../checkpoints/route-match.js";
|
|
25
25
|
import { createDbAdminAgentTools } from "../db-admin/agent-tools.js";
|
|
26
26
|
import { isTransientDatabaseError } from "../db/client.js";
|
|
@@ -2014,12 +2014,18 @@ export function createAgentChatPlugin(options) {
|
|
|
2014
2014
|
thread = await createThread(ownerEmail, {
|
|
2015
2015
|
id: threadId,
|
|
2016
2016
|
scope: runScope,
|
|
2017
|
+
source: options?.appId ? { appId: options.appId } : null,
|
|
2017
2018
|
});
|
|
2018
2019
|
}
|
|
2019
2020
|
catch {
|
|
2020
2021
|
thread = await getThread(threadId);
|
|
2021
2022
|
}
|
|
2022
2023
|
}
|
|
2024
|
+
if (options?.appId) {
|
|
2025
|
+
await setThreadSourceIfMissing(threadId, {
|
|
2026
|
+
appId: options.appId,
|
|
2027
|
+
});
|
|
2028
|
+
}
|
|
2023
2029
|
if (!thread) {
|
|
2024
2030
|
throw createError({
|
|
2025
2031
|
statusCode: 404,
|
|
@@ -2113,6 +2119,7 @@ export function createAgentChatPlugin(options) {
|
|
|
2113
2119
|
},
|
|
2114
2120
|
getModel: () => getRequestRunContext()?.model ?? resolvedModel,
|
|
2115
2121
|
getParentThreadId: () => getRequestRunContext()?.threadId ?? "",
|
|
2122
|
+
getAppId: () => options?.appId ?? null,
|
|
2116
2123
|
getParentRunId: () => getRequestRunContext()?.runId ?? "",
|
|
2117
2124
|
getSend: () => {
|
|
2118
2125
|
// Return the send for the current run's thread
|
|
@@ -4318,10 +4325,13 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
4318
4325
|
const q = query.q ? String(query.q).trim() : "";
|
|
4319
4326
|
const scope = parseScopeFromQuery(query);
|
|
4320
4327
|
const unscopedOnly = String(query.unscoped ?? "") === "1";
|
|
4328
|
+
const includeExternal = String(query.includeExternal ?? "") === "1";
|
|
4321
4329
|
if (q) {
|
|
4322
4330
|
const threads = await searchThreads(owner, q, limit, {
|
|
4323
4331
|
scope: scope ?? undefined,
|
|
4324
4332
|
orgId,
|
|
4333
|
+
includeExternal,
|
|
4334
|
+
sourceAppId: options?.appId ?? null,
|
|
4325
4335
|
});
|
|
4326
4336
|
return { threads };
|
|
4327
4337
|
}
|
|
@@ -4332,6 +4342,8 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
4332
4342
|
scope: scope ?? undefined,
|
|
4333
4343
|
unscopedOnly,
|
|
4334
4344
|
orgId,
|
|
4345
|
+
includeExternal,
|
|
4346
|
+
sourceAppId: options?.appId ?? null,
|
|
4335
4347
|
});
|
|
4336
4348
|
return { threads };
|
|
4337
4349
|
}
|
|
@@ -4358,6 +4370,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
4358
4370
|
id: body?.id,
|
|
4359
4371
|
title: body?.title ?? "",
|
|
4360
4372
|
scope: parseScopeFromBody(body?.scope),
|
|
4373
|
+
source: options?.appId ? { appId: options.appId } : null,
|
|
4361
4374
|
});
|
|
4362
4375
|
return thread;
|
|
4363
4376
|
}
|
|
@@ -27,11 +27,11 @@ export declare function resolveAgentEngineApiKeyWriteTarget(event: H3Event, scop
|
|
|
27
27
|
export declare function createAgentEngineApiKeyHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
28
28
|
error: any;
|
|
29
29
|
} | {
|
|
30
|
+
error?: undefined;
|
|
30
31
|
ok: boolean;
|
|
31
32
|
key: string;
|
|
32
33
|
baseUrlKey?: string;
|
|
33
34
|
scope: AgentEngineApiKeyScope;
|
|
34
|
-
error?: undefined;
|
|
35
35
|
}>>;
|
|
36
36
|
export {};
|
|
37
37
|
//# sourceMappingURL=agent-engine-api-key-route.d.ts.map
|