@1mcp/agent 0.35.0-beta.4 → 0.36.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/build/admin/assets/{admin-AboutRuntimeWorkspace-CM2ZafTJ.js → admin-AboutRuntimeWorkspace-DH2QC2nJ.js} +1 -1
- package/build/admin/assets/admin-BackendLogsWorkspace-BKavXT9B.js +1 -0
- package/build/admin/assets/admin-InstructionTemplatesWorkspace-CvG4EPdZ.js +1 -0
- package/build/admin/assets/admin-OAuthServicesWorkspace-BCGj2hP4.js +1 -0
- package/build/admin/assets/admin-PresetAuthoringWorkspace-BboJVBFl.js +1 -0
- package/build/admin/assets/admin-console-D6jyI73o.css +1 -0
- package/build/admin/assets/admin-console-xbgqUjbT.js +3 -0
- package/build/admin/assets/admin-icons-CYGTDZA5.js +1 -0
- package/build/admin/assets/admin-mantine-xwbfu5Gd.js +53 -0
- package/build/admin/index.html +4 -4
- package/build/auth/sdkOAuthClientProvider.d.ts +4 -0
- package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -1
- package/build/auth/sdkOAuthClientProvider.js +29 -0
- package/build/auth/sdkOAuthClientProvider.js.map +1 -1
- package/build/commands/instructions/instructions.d.ts.map +1 -1
- package/build/commands/instructions/instructions.js +56 -1
- package/build/commands/instructions/instructions.js.map +1 -1
- package/build/commands/mcp/add.js +2 -2
- package/build/commands/mcp/add.js.map +1 -1
- package/build/commands/mcp/list.js +1 -1
- package/build/commands/mcp/list.js.map +1 -1
- package/build/commands/mcp/update.js +1 -1
- package/build/commands/mcp/update.js.map +1 -1
- package/build/commands/shared/serveTargetResolver.d.ts.map +1 -1
- package/build/commands/shared/serveTargetResolver.js +17 -22
- package/build/commands/shared/serveTargetResolver.js.map +1 -1
- package/build/config/configContext.d.ts +2 -0
- package/build/config/configContext.d.ts.map +1 -1
- package/build/config/configContext.js +5 -0
- package/build/config/configContext.js.map +1 -1
- package/build/config/configLoader.d.ts +8 -0
- package/build/config/configLoader.d.ts.map +1 -1
- package/build/config/configLoader.js +35 -11
- package/build/config/configLoader.js.map +1 -1
- package/build/config/configManager.d.ts +16 -1
- package/build/config/configManager.d.ts.map +1 -1
- package/build/config/configManager.js +77 -0
- package/build/config/configManager.js.map +1 -1
- package/build/config/configWatcher.d.ts +2 -0
- package/build/config/configWatcher.d.ts.map +1 -1
- package/build/config/configWatcher.js +9 -4
- package/build/config/configWatcher.js.map +1 -1
- package/build/config/configuredServerTargets.d.ts +3 -0
- package/build/config/configuredServerTargets.d.ts.map +1 -0
- package/build/config/configuredServerTargets.js +8 -0
- package/build/config/configuredServerTargets.js.map +1 -0
- package/build/config/envProcessor.d.ts +2 -1
- package/build/config/envProcessor.d.ts.map +1 -1
- package/build/config/envProcessor.js +16 -9
- package/build/config/envProcessor.js.map +1 -1
- package/build/config/mcpConfigManager.d.ts +3 -0
- package/build/config/mcpConfigManager.d.ts.map +1 -1
- package/build/config/mcpConfigManager.js +15 -0
- package/build/config/mcpConfigManager.js.map +1 -1
- package/build/config/runtimeScopeEnv.d.ts +15 -0
- package/build/config/runtimeScopeEnv.d.ts.map +1 -0
- package/build/config/runtimeScopeEnv.js +231 -0
- package/build/config/runtimeScopeEnv.js.map +1 -0
- package/build/config/runtimeTargetFingerprint.d.ts +3 -0
- package/build/config/runtimeTargetFingerprint.d.ts.map +1 -0
- package/build/config/runtimeTargetFingerprint.js +66 -0
- package/build/config/runtimeTargetFingerprint.js.map +1 -0
- package/build/config/types.d.ts +5 -0
- package/build/config/types.d.ts.map +1 -1
- package/build/config/types.js +1 -0
- package/build/config/types.js.map +1 -1
- package/build/constants/api.d.ts +1 -0
- package/build/constants/api.d.ts.map +1 -1
- package/build/constants/api.js +1 -0
- package/build/constants/api.js.map +1 -1
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.d.ts.map +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/constants/mcp.js.map +1 -1
- package/build/core/capabilities/capabilityAggregator.d.ts.map +1 -1
- package/build/core/capabilities/capabilityAggregator.js +33 -14
- package/build/core/capabilities/capabilityAggregator.js.map +1 -1
- package/build/core/capabilities/capabilityCatalog.d.ts +1 -1
- package/build/core/capabilities/capabilityCatalog.d.ts.map +1 -1
- package/build/core/capabilities/capabilityCatalog.js +19 -7
- package/build/core/capabilities/capabilityCatalog.js.map +1 -1
- package/build/core/capabilities/capabilityPagination.d.ts.map +1 -1
- package/build/core/capabilities/capabilityPagination.js +7 -4
- package/build/core/capabilities/capabilityPagination.js.map +1 -1
- package/build/core/capabilities/configuredToolSnapshot.d.ts +34 -0
- package/build/core/capabilities/configuredToolSnapshot.d.ts.map +1 -0
- package/build/core/capabilities/configuredToolSnapshot.js +137 -0
- package/build/core/capabilities/configuredToolSnapshot.js.map +1 -0
- package/build/core/capabilities/lazyLoadingOrchestrator.d.ts.map +1 -1
- package/build/core/capabilities/lazyLoadingOrchestrator.js +8 -4
- package/build/core/capabilities/lazyLoadingOrchestrator.js.map +1 -1
- package/build/core/capabilities/metaToolProvider.js +3 -3
- package/build/core/capabilities/metaToolProvider.js.map +1 -1
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +31 -19
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/client/connectionHandler.d.ts.map +1 -1
- package/build/core/client/connectionHandler.js +9 -6
- package/build/core/client/connectionHandler.js.map +1 -1
- package/build/core/client/postAuthOAuthRecovery.d.ts +6 -0
- package/build/core/client/postAuthOAuthRecovery.d.ts.map +1 -0
- package/build/core/client/postAuthOAuthRecovery.js +74 -0
- package/build/core/client/postAuthOAuthRecovery.js.map +1 -0
- package/build/core/configChangeHandler.d.ts +5 -0
- package/build/core/configChangeHandler.d.ts.map +1 -1
- package/build/core/configChangeHandler.js +58 -14
- package/build/core/configChangeHandler.js.map +1 -1
- package/build/core/instructions/effectiveServerInstructions.d.ts +17 -0
- package/build/core/instructions/effectiveServerInstructions.d.ts.map +1 -0
- package/build/core/instructions/effectiveServerInstructions.js +12 -0
- package/build/core/instructions/effectiveServerInstructions.js.map +1 -0
- package/build/core/instructions/instructionAggregator.d.ts +51 -2
- package/build/core/instructions/instructionAggregator.d.ts.map +1 -1
- package/build/core/instructions/instructionAggregator.js +191 -30
- package/build/core/instructions/instructionAggregator.js.map +1 -1
- package/build/core/instructions/instructionsDistribution.d.ts +53 -0
- package/build/core/instructions/instructionsDistribution.d.ts.map +1 -1
- package/build/core/instructions/instructionsDistribution.js +25 -0
- package/build/core/instructions/instructionsDistribution.js.map +1 -1
- package/build/core/instructions/templateTypes.d.ts +25 -3
- package/build/core/instructions/templateTypes.d.ts.map +1 -1
- package/build/core/instructions/templateTypes.js +45 -0
- package/build/core/instructions/templateTypes.js.map +1 -1
- package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
- package/build/core/loading/mcpLoadingManager.js +5 -3
- package/build/core/loading/mcpLoadingManager.js.map +1 -1
- package/build/core/protocol/requestHandlerUtils.d.ts.map +1 -1
- package/build/core/protocol/requestHandlerUtils.js +3 -3
- package/build/core/protocol/requestHandlerUtils.js.map +1 -1
- package/build/core/protocol/toolRequestHandlers.d.ts.map +1 -1
- package/build/core/protocol/toolRequestHandlers.js +18 -5
- package/build/core/protocol/toolRequestHandlers.js.map +1 -1
- package/build/core/server/backendStdioSupervisor.d.ts.map +1 -1
- package/build/core/server/backendStdioSupervisor.js +2 -1
- package/build/core/server/backendStdioSupervisor.js.map +1 -1
- package/build/core/server/clientInstanceFactory.d.ts +2 -1
- package/build/core/server/clientInstanceFactory.d.ts.map +1 -1
- package/build/core/server/clientInstanceFactory.js +9 -2
- package/build/core/server/clientInstanceFactory.js.map +1 -1
- package/build/core/server/clientInstancePool.d.ts +1 -0
- package/build/core/server/clientInstancePool.d.ts.map +1 -1
- package/build/core/server/clientInstancePool.js +92 -55
- package/build/core/server/clientInstancePool.js.map +1 -1
- package/build/core/server/clientInstancePoolTypes.d.ts +2 -0
- package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
- package/build/core/server/disabledTools.d.ts +2 -0
- package/build/core/server/disabledTools.d.ts.map +1 -1
- package/build/core/server/disabledTools.js +7 -4
- package/build/core/server/disabledTools.js.map +1 -1
- package/build/core/server/mcpServerLifecycleManager.d.ts +0 -4
- package/build/core/server/mcpServerLifecycleManager.d.ts.map +1 -1
- package/build/core/server/mcpServerLifecycleManager.js +18 -40
- package/build/core/server/mcpServerLifecycleManager.js.map +1 -1
- package/build/core/server/serverManager.d.ts +1 -0
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +32 -0
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/server/templateIdentity.d.ts +1 -0
- package/build/core/server/templateIdentity.d.ts.map +1 -1
- package/build/core/server/templateIdentity.js +11 -1
- package/build/core/server/templateIdentity.js.map +1 -1
- package/build/core/server/templateServerManager.d.ts +13 -1
- package/build/core/server/templateServerManager.d.ts.map +1 -1
- package/build/core/server/templateServerManager.js +68 -13
- package/build/core/server/templateServerManager.js.map +1 -1
- package/build/core/server/toolDescriptionOverrides.d.ts +9 -0
- package/build/core/server/toolDescriptionOverrides.d.ts.map +1 -0
- package/build/core/server/toolDescriptionOverrides.js +44 -0
- package/build/core/server/toolDescriptionOverrides.js.map +1 -0
- package/build/core/tools/handlers/serverManagementHandler.d.ts +22 -8
- package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -1
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +3 -1
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts.map +1 -1
- package/build/core/tools/internal/schemas/discovery.d.ts +1 -1
- package/build/core/tools/internal/schemas/index.d.ts +3 -3
- package/build/core/tools/internal/schemas/management.d.ts +2 -2
- package/build/core/types/transport.d.ts +39 -6
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +61 -2
- package/build/core/types/transport.js.map +1 -1
- package/build/domains/admin/adminConfiguredServerService.d.ts +65 -4
- package/build/domains/admin/adminConfiguredServerService.d.ts.map +1 -1
- package/build/domains/admin/adminConfiguredServerService.js +292 -49
- package/build/domains/admin/adminConfiguredServerService.js.map +1 -1
- package/build/domains/admin/adminDomain.d.ts +19 -0
- package/build/domains/admin/adminDomain.d.ts.map +1 -1
- package/build/domains/admin/adminDomain.js +17 -0
- package/build/domains/admin/adminDomain.js.map +1 -1
- package/build/domains/admin/adminInstructionPreviewRuntime.d.ts +7 -0
- package/build/domains/admin/adminInstructionPreviewRuntime.d.ts.map +1 -0
- package/build/domains/admin/adminInstructionPreviewRuntime.js +154 -0
- package/build/domains/admin/adminInstructionPreviewRuntime.js.map +1 -0
- package/build/domains/admin/adminInstructionTemplateService.d.ts +169 -0
- package/build/domains/admin/adminInstructionTemplateService.d.ts.map +1 -0
- package/build/domains/admin/adminInstructionTemplateService.js +181 -0
- package/build/domains/admin/adminInstructionTemplateService.js.map +1 -0
- package/build/domains/admin/configuredToolInventory.d.ts +64 -0
- package/build/domains/admin/configuredToolInventory.d.ts.map +1 -0
- package/build/domains/admin/configuredToolInventory.js +182 -0
- package/build/domains/admin/configuredToolInventory.js.map +1 -0
- package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts +21 -0
- package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts.map +1 -0
- package/build/domains/admin/runtimeConfiguredToolInspectionService.js +255 -0
- package/build/domains/admin/runtimeConfiguredToolInspectionService.js.map +1 -0
- package/build/domains/config-change/configChange.d.ts +1 -1
- package/build/domains/config-change/configChange.d.ts.map +1 -1
- package/build/domains/config-change/configChange.js +153 -13
- package/build/domains/config-change/configChange.js.map +1 -1
- package/build/domains/config-change/types.d.ts +30 -2
- package/build/domains/config-change/types.d.ts.map +1 -1
- package/build/domains/instruction-template/instructionTemplateManager.d.ts +58 -0
- package/build/domains/instruction-template/instructionTemplateManager.d.ts.map +1 -0
- package/build/domains/instruction-template/instructionTemplateManager.js +167 -0
- package/build/domains/instruction-template/instructionTemplateManager.js.map +1 -0
- package/build/domains/runtime-targets/runtimeIdentityVerification.d.ts +1 -0
- package/build/domains/runtime-targets/runtimeIdentityVerification.d.ts.map +1 -1
- package/build/domains/runtime-targets/runtimeIdentityVerification.js +6 -5
- package/build/domains/runtime-targets/runtimeIdentityVerification.js.map +1 -1
- package/build/transport/http/routes/adminRoutes.d.ts +2 -0
- package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/adminRoutes.js +345 -9
- package/build/transport/http/routes/adminRoutes.js.map +1 -1
- package/build/transport/http/routes/apiRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/apiRoutes.js +2 -0
- package/build/transport/http/routes/apiRoutes.js.map +1 -1
- package/build/transport/http/routes/inspectRequestContext.d.ts +2 -0
- package/build/transport/http/routes/inspectRequestContext.d.ts.map +1 -1
- package/build/transport/http/routes/inspectRequestContext.js +2 -2
- package/build/transport/http/routes/inspectRequestContext.js.map +1 -1
- package/build/transport/http/routes/inspectRoutes.d.ts +9 -0
- package/build/transport/http/routes/inspectRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/inspectRoutes.js +15 -10
- package/build/transport/http/routes/inspectRoutes.js.map +1 -1
- package/build/transport/http/routes/instructionsRoutes.d.ts +4 -0
- package/build/transport/http/routes/instructionsRoutes.d.ts.map +1 -0
- package/build/transport/http/routes/instructionsRoutes.js +147 -0
- package/build/transport/http/routes/instructionsRoutes.js.map +1 -0
- package/build/transport/http/routes/toolRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/toolRoutes.js +5 -4
- package/build/transport/http/routes/toolRoutes.js.map +1 -1
- package/build/transport/http/server.d.ts.map +1 -1
- package/build/transport/http/server.js +16 -0
- package/build/transport/http/server.js.map +1 -1
- package/build/transport/transportFactory.d.ts.map +1 -1
- package/build/transport/transportFactory.js +34 -12
- package/build/transport/transportFactory.js.map +1 -1
- package/build/utils/validation/discoveredServer.d.ts +15 -0
- package/build/utils/validation/discoveredServer.d.ts.map +1 -0
- package/build/utils/validation/discoveredServer.js +2 -0
- package/build/utils/validation/discoveredServer.js.map +1 -0
- package/build/utils/validation/urlDetection.d.ts +4 -5
- package/build/utils/validation/urlDetection.d.ts.map +1 -1
- package/build/utils/validation/urlDetection.js +94 -25
- package/build/utils/validation/urlDetection.js.map +1 -1
- package/package.json +7 -2
- package/build/admin/assets/admin-BackendLogsWorkspace-CvJs1npx.js +0 -1
- package/build/admin/assets/admin-OAuthServicesWorkspace-BswG57Gm.js +0 -1
- package/build/admin/assets/admin-PresetAuthoringWorkspace-BIIRs_EN.js +0 -1
- package/build/admin/assets/admin-console-Brz9bnhv.css +0 -1
- package/build/admin/assets/admin-console-MT8QZmIC.js +0 -3
- package/build/admin/assets/admin-icons-D-JtMXSq.js +0 -1
- package/build/admin/assets/admin-mantine-DSFdoMaN.js +0 -53
|
@@ -6,6 +6,7 @@ import { MCP_PROJECT_METADATA } from '../../../constants.js';
|
|
|
6
6
|
import { parseTemplateConnectionKey } from '../../../core/server/templateIdentity.js';
|
|
7
7
|
import { AdminConfiguredServerApplyError, AdminConfiguredServerNotFoundError, } from '../../../domains/admin/adminConfiguredServerService.js';
|
|
8
8
|
import { ADMIN_SESSION_COOKIE_NAME, AdminIdentityError, } from '../../../domains/admin/adminIdentityService.js';
|
|
9
|
+
import { AdminInstructionTemplateNotFoundError, } from '../../../domains/admin/adminInstructionTemplateService.js';
|
|
9
10
|
import { AdminPresetConflictError, AdminPresetNotFoundError, } from '../../../domains/admin/adminPresetService.js';
|
|
10
11
|
import { sensitiveOperationLimiter } from '../../../transport/http/middlewares/securityMiddleware.js';
|
|
11
12
|
import { sanitizeErrorMessage } from '../../../utils/validation/sanitization.js';
|
|
@@ -40,6 +41,8 @@ const adminOAuthServiceParamsSchema = z.object({
|
|
|
40
41
|
const backendLogSnapshotQuerySchema = z.object({
|
|
41
42
|
sourceId: z.string().trim().min(1).max(256).optional(),
|
|
42
43
|
});
|
|
44
|
+
const configuredServerModelSchema = z.string().trim().min(1).max(64);
|
|
45
|
+
const configuredToolInventoryRefreshSchema = z.object({ model: configuredServerModelSchema.optional() }).strict();
|
|
43
46
|
const cliConfiguredServerMutationBodySchema = z.object({
|
|
44
47
|
targetName: z.string().trim().min(1).max(256),
|
|
45
48
|
dryRun: z.boolean().optional(),
|
|
@@ -53,6 +56,67 @@ const cliBackendRestartBodySchema = z
|
|
|
53
56
|
.refine((value) => !(value.instance !== undefined && value.allInstances === true), {
|
|
54
57
|
message: 'instance and allInstances are mutually exclusive',
|
|
55
58
|
});
|
|
59
|
+
const instructionTemplateIdentitySchema = z.string().trim().min(1).max(128);
|
|
60
|
+
const instructionTemplateVariantsSchema = z.object({ initialization: z.string(), cli: z.string() }).strict();
|
|
61
|
+
const instructionPreviewSelectionSchema = z.discriminatedUnion('mode', [
|
|
62
|
+
z.object({ mode: z.literal('all') }).strict(),
|
|
63
|
+
z.object({ mode: z.literal('preset'), preset: z.string().trim().min(1).max(128) }).strict(),
|
|
64
|
+
z.object({ mode: z.literal('tags'), tags: z.array(z.string().trim().min(1).max(128)).max(256) }).strict(),
|
|
65
|
+
z.object({ mode: z.literal('tag-filter'), expression: z.string().trim().min(1).max(4096) }).strict(),
|
|
66
|
+
]);
|
|
67
|
+
const requestContextSchema = z
|
|
68
|
+
.object({
|
|
69
|
+
project: z
|
|
70
|
+
.object({
|
|
71
|
+
path: z.string().optional(),
|
|
72
|
+
cwd: z.string().optional(),
|
|
73
|
+
name: z.string().optional(),
|
|
74
|
+
environment: z.string().optional(),
|
|
75
|
+
custom: z.record(z.string(), z.unknown()).optional(),
|
|
76
|
+
git: z
|
|
77
|
+
.object({
|
|
78
|
+
branch: z.string().optional(),
|
|
79
|
+
commit: z.string().optional(),
|
|
80
|
+
repository: z.string().optional(),
|
|
81
|
+
isRepo: z.boolean().optional(),
|
|
82
|
+
})
|
|
83
|
+
.strict()
|
|
84
|
+
.optional(),
|
|
85
|
+
})
|
|
86
|
+
.strict(),
|
|
87
|
+
user: z
|
|
88
|
+
.object({
|
|
89
|
+
name: z.string().optional(),
|
|
90
|
+
email: z.string().optional(),
|
|
91
|
+
home: z.string().optional(),
|
|
92
|
+
username: z.string().optional(),
|
|
93
|
+
uid: z.string().optional(),
|
|
94
|
+
gid: z.string().optional(),
|
|
95
|
+
shell: z.string().optional(),
|
|
96
|
+
})
|
|
97
|
+
.strict(),
|
|
98
|
+
environment: z
|
|
99
|
+
.object({
|
|
100
|
+
variables: z.record(z.string(), z.string()).optional(),
|
|
101
|
+
prefixes: z.array(z.string()).optional(),
|
|
102
|
+
})
|
|
103
|
+
.strict(),
|
|
104
|
+
timestamp: z.string().optional(),
|
|
105
|
+
sessionId: z.string().optional(),
|
|
106
|
+
version: z.string().optional(),
|
|
107
|
+
transport: z
|
|
108
|
+
.object({
|
|
109
|
+
type: z.string(),
|
|
110
|
+
url: z.string().optional(),
|
|
111
|
+
connectionId: z.string().optional(),
|
|
112
|
+
connectionTimestamp: z.string().optional(),
|
|
113
|
+
client: z.object({ name: z.string(), version: z.string(), title: z.string().optional() }).strict().optional(),
|
|
114
|
+
})
|
|
115
|
+
.strict()
|
|
116
|
+
.optional(),
|
|
117
|
+
})
|
|
118
|
+
.strict();
|
|
119
|
+
const configuredServerSourceSchema = z.enum(['mcpServers', 'mcpTemplates']);
|
|
56
120
|
export function createAdminRoutes(options) {
|
|
57
121
|
if (!options.adminEnabled) {
|
|
58
122
|
options.adminService.revokeAllSessions();
|
|
@@ -421,8 +485,47 @@ export function createAdminRoutes(options) {
|
|
|
421
485
|
ok: true,
|
|
422
486
|
operationId: result.operationId,
|
|
423
487
|
servers: result.result.servers,
|
|
488
|
+
configFingerprint: result.result.configFingerprint,
|
|
424
489
|
});
|
|
425
490
|
});
|
|
491
|
+
router.get('/api/instruction-templates', async (req, res) => {
|
|
492
|
+
const service = options.instructionTemplateService;
|
|
493
|
+
if (!service)
|
|
494
|
+
return void res.status(404).json({ error: 'admin_instruction_templates_unavailable' });
|
|
495
|
+
sendAdminOperationResult(res, await service.listTemplates({
|
|
496
|
+
context: buildAdminOperationContext(req, options, { type: 'instruction_template_collection' }),
|
|
497
|
+
}));
|
|
498
|
+
});
|
|
499
|
+
router.get('/api/instruction-templates/:identity', async (req, res) => {
|
|
500
|
+
await handleInstructionTemplateRequest(req, res, options, 'get');
|
|
501
|
+
});
|
|
502
|
+
router.post('/api/instruction-templates', async (req, res) => {
|
|
503
|
+
await handleInstructionTemplateRequest(req, res, options, 'create');
|
|
504
|
+
});
|
|
505
|
+
router.post('/api/instruction-templates/import-legacy', async (req, res) => {
|
|
506
|
+
await handleInstructionTemplateRequest(req, res, options, 'import');
|
|
507
|
+
});
|
|
508
|
+
router.post('/api/instruction-templates/:identity/clone', async (req, res) => {
|
|
509
|
+
await handleInstructionTemplateRequest(req, res, options, 'clone');
|
|
510
|
+
});
|
|
511
|
+
router.post('/api/instruction-templates/:identity/update', async (req, res) => {
|
|
512
|
+
await handleInstructionTemplateRequest(req, res, options, 'update');
|
|
513
|
+
});
|
|
514
|
+
router.post('/api/instruction-templates/:identity/validate', async (req, res) => {
|
|
515
|
+
await handleInstructionTemplateRequest(req, res, options, 'validate');
|
|
516
|
+
});
|
|
517
|
+
router.post('/api/instruction-templates/:identity/preview', async (req, res) => {
|
|
518
|
+
await handleInstructionTemplateRequest(req, res, options, 'preview');
|
|
519
|
+
});
|
|
520
|
+
router.post('/api/instruction-templates/:identity/activate', async (req, res) => {
|
|
521
|
+
await handleInstructionTemplateRequest(req, res, options, 'activate');
|
|
522
|
+
});
|
|
523
|
+
router.post('/api/instruction-templates/:identity/delete-preview', async (req, res) => {
|
|
524
|
+
await handleInstructionTemplateRequest(req, res, options, 'delete-preview');
|
|
525
|
+
});
|
|
526
|
+
router.delete('/api/instruction-templates/:identity', async (req, res) => {
|
|
527
|
+
await handleInstructionTemplateRequest(req, res, options, 'delete');
|
|
528
|
+
});
|
|
426
529
|
router.get('/api/configured-servers/create-contract', async (req, res) => {
|
|
427
530
|
await handleConfiguredServerCreateContract(req, res, options);
|
|
428
531
|
});
|
|
@@ -432,9 +535,39 @@ export function createAdminRoutes(options) {
|
|
|
432
535
|
router.post('/api/configured-servers', async (req, res) => {
|
|
433
536
|
await handleConfiguredServerCreateApply(req, res, options);
|
|
434
537
|
});
|
|
538
|
+
router.get('/api/configured-servers/:source/:name', async (req, res) => {
|
|
539
|
+
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
540
|
+
if (!source.success)
|
|
541
|
+
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
542
|
+
await handleConfiguredServerDetail(req, res, options, source.data);
|
|
543
|
+
});
|
|
435
544
|
router.get('/api/configured-servers/:name', async (req, res) => {
|
|
436
545
|
await handleConfiguredServerDetail(req, res, options);
|
|
437
546
|
});
|
|
547
|
+
router.post('/api/configured-servers/:source/:name/tool-inventory/refresh', async (req, res) => {
|
|
548
|
+
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
549
|
+
if (!source.success)
|
|
550
|
+
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
551
|
+
await handleConfiguredToolInventoryRefresh(req, res, options, source.data);
|
|
552
|
+
});
|
|
553
|
+
router.post('/api/configured-servers/:source/:name/preview', async (req, res) => {
|
|
554
|
+
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
555
|
+
if (!source.success)
|
|
556
|
+
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
557
|
+
await handleConfiguredServerPreview(req, res, options, source.data);
|
|
558
|
+
});
|
|
559
|
+
router.post('/api/configured-servers/:source/:name/apply', async (req, res) => {
|
|
560
|
+
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
561
|
+
if (!source.success)
|
|
562
|
+
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
563
|
+
await handleConfiguredServerApply(req, res, options, source.data);
|
|
564
|
+
});
|
|
565
|
+
router.post('/api/configured-servers/mcpServers/:name/enable', async (req, res) => {
|
|
566
|
+
await handleConfiguredServerMutation(req, res, options, 'enableConfiguredServer', 'mcpServers');
|
|
567
|
+
});
|
|
568
|
+
router.post('/api/configured-servers/mcpServers/:name/disable', async (req, res) => {
|
|
569
|
+
await handleConfiguredServerMutation(req, res, options, 'disableConfiguredServer', 'mcpServers');
|
|
570
|
+
});
|
|
438
571
|
router.post('/api/configured-servers/:name/preview', async (req, res) => {
|
|
439
572
|
await handleConfiguredServerPreview(req, res, options);
|
|
440
573
|
});
|
|
@@ -480,6 +613,113 @@ export function createAdminRoutes(options) {
|
|
|
480
613
|
});
|
|
481
614
|
return router;
|
|
482
615
|
}
|
|
616
|
+
async function handleInstructionTemplateRequest(req, res, options, action) {
|
|
617
|
+
const service = options.instructionTemplateService;
|
|
618
|
+
if (!service)
|
|
619
|
+
return void res.status(404).json({ error: 'admin_instruction_templates_unavailable' });
|
|
620
|
+
const body = req.body && typeof req.body === 'object' ? req.body : {};
|
|
621
|
+
const identityValue = action === 'create' || action === 'import' ? body.identity : req.params.identity;
|
|
622
|
+
const identity = instructionTemplateIdentitySchema.safeParse(identityValue);
|
|
623
|
+
if (!identity.success)
|
|
624
|
+
return void res.status(400).json({ error: 'instruction_template_identity_invalid' });
|
|
625
|
+
const context = buildAdminOperationContext(req, options, { type: 'instruction_template', id: identity.data });
|
|
626
|
+
const expectedConfigFingerprint = typeof body.expectedConfigFingerprint === 'string' ? body.expectedConfigFingerprint : '';
|
|
627
|
+
try {
|
|
628
|
+
switch (action) {
|
|
629
|
+
case 'get':
|
|
630
|
+
return sendAdminOperationResult(res, await service.getTemplate({ context, identity: identity.data }));
|
|
631
|
+
case 'create':
|
|
632
|
+
case 'update': {
|
|
633
|
+
const variants = instructionTemplateVariantsSchema.safeParse(body.variants);
|
|
634
|
+
if (!variants.success || !expectedConfigFingerprint) {
|
|
635
|
+
return void res.status(400).json({ error: 'instruction_template_request_invalid' });
|
|
636
|
+
}
|
|
637
|
+
return sendInstructionTemplateResult(res, await (action === 'create' ? service.createTemplate : service.updateTemplate).call(service, {
|
|
638
|
+
context,
|
|
639
|
+
identity: identity.data,
|
|
640
|
+
variants: variants.data,
|
|
641
|
+
expectedConfigFingerprint,
|
|
642
|
+
}));
|
|
643
|
+
}
|
|
644
|
+
case 'clone': {
|
|
645
|
+
const destination = instructionTemplateIdentitySchema.safeParse(body.identity);
|
|
646
|
+
if (!destination.success || !expectedConfigFingerprint) {
|
|
647
|
+
return void res.status(400).json({ error: 'instruction_template_request_invalid' });
|
|
648
|
+
}
|
|
649
|
+
return sendInstructionTemplateResult(res, await service.cloneTemplate({
|
|
650
|
+
context,
|
|
651
|
+
sourceIdentity: identity.data,
|
|
652
|
+
identity: destination.data,
|
|
653
|
+
expectedConfigFingerprint,
|
|
654
|
+
}));
|
|
655
|
+
}
|
|
656
|
+
case 'validate':
|
|
657
|
+
return sendAdminOperationResult(res, await service.validateTemplate({ context, identity: identity.data, expectedConfigFingerprint }));
|
|
658
|
+
case 'preview': {
|
|
659
|
+
const preview = z
|
|
660
|
+
.object({
|
|
661
|
+
surface: z.enum(['initialize', 'cli']),
|
|
662
|
+
selection: instructionPreviewSelectionSchema,
|
|
663
|
+
requestContext: requestContextSchema.optional(),
|
|
664
|
+
})
|
|
665
|
+
.strict()
|
|
666
|
+
.safeParse(body);
|
|
667
|
+
if (!preview.success)
|
|
668
|
+
return void res.status(400).json({ error: 'instruction_template_preview_invalid' });
|
|
669
|
+
return sendAdminOperationResult(res, await service.previewTemplate({ context, identity: identity.data, ...preview.data }));
|
|
670
|
+
}
|
|
671
|
+
case 'activate':
|
|
672
|
+
case 'delete': {
|
|
673
|
+
const previewFingerprint = typeof body.previewFingerprint === 'string' ? body.previewFingerprint : '';
|
|
674
|
+
if (!expectedConfigFingerprint || !previewFingerprint) {
|
|
675
|
+
return void res.status(400).json({ error: 'instruction_template_request_invalid' });
|
|
676
|
+
}
|
|
677
|
+
return sendInstructionTemplateResult(res, await (action === 'activate' ? service.activateTemplate : service.deleteTemplate).call(service, {
|
|
678
|
+
context,
|
|
679
|
+
identity: identity.data,
|
|
680
|
+
expectedConfigFingerprint,
|
|
681
|
+
previewFingerprint,
|
|
682
|
+
}));
|
|
683
|
+
}
|
|
684
|
+
case 'import':
|
|
685
|
+
if (!expectedConfigFingerprint) {
|
|
686
|
+
return void res.status(400).json({ error: 'instruction_template_request_invalid' });
|
|
687
|
+
}
|
|
688
|
+
return sendInstructionTemplateResult(res, await service.importLegacyTemplate({ context, identity: identity.data, expectedConfigFingerprint }));
|
|
689
|
+
case 'delete-preview':
|
|
690
|
+
return sendAdminOperationResult(res, await service.previewDeleteTemplate({ context, identity: identity.data, expectedConfigFingerprint }));
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
catch (error) {
|
|
694
|
+
if (error instanceof AdminInstructionTemplateNotFoundError) {
|
|
695
|
+
res.status(404).json({ error: error.code });
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
698
|
+
throw error;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
function sendInstructionTemplateResult(res, result) {
|
|
702
|
+
if (!result.ok)
|
|
703
|
+
return sendAdminOperationResult(res, result);
|
|
704
|
+
const status = result.result?.status;
|
|
705
|
+
if (status === 'not_found')
|
|
706
|
+
return void res.status(404).json({ ok: false, error: 'instruction_template_not_found' });
|
|
707
|
+
if (status === 'invalid') {
|
|
708
|
+
return void res
|
|
709
|
+
.status(422)
|
|
710
|
+
.json({ ok: false, error: 'instruction_template_invalid', validation: result.result.validation });
|
|
711
|
+
}
|
|
712
|
+
if (status === 'legacy_unavailable') {
|
|
713
|
+
return void res.status(409).json({ ok: false, error: 'legacy_instruction_template_unavailable' });
|
|
714
|
+
}
|
|
715
|
+
if (status === 'conflict' ||
|
|
716
|
+
status === 'identity_conflict' ||
|
|
717
|
+
status === 'protected' ||
|
|
718
|
+
status === 'active_conflict') {
|
|
719
|
+
return void res.status(409).json({ ok: false, error: `instruction_template_${status}` });
|
|
720
|
+
}
|
|
721
|
+
sendAdminOperationResult(res, result);
|
|
722
|
+
}
|
|
483
723
|
function streamBackendLogs(req, res, broker, adminService) {
|
|
484
724
|
const sessionToken = getAdminSessionCookie(req);
|
|
485
725
|
let closed = false;
|
|
@@ -786,16 +1026,22 @@ function backendRestartFailure(outcome) {
|
|
|
786
1026
|
};
|
|
787
1027
|
}
|
|
788
1028
|
}
|
|
789
|
-
async function handleConfiguredServerDetail(req, res, options) {
|
|
1029
|
+
async function handleConfiguredServerDetail(req, res, options, targetSource) {
|
|
790
1030
|
if (!options.configuredServerService) {
|
|
791
1031
|
res.status(404).json({ error: 'admin_configured_servers_unavailable' });
|
|
792
1032
|
return;
|
|
793
1033
|
}
|
|
794
1034
|
const targetName = req.params.name;
|
|
795
1035
|
try {
|
|
1036
|
+
const model = configuredServerModelSchema.safeParse(req.query.model);
|
|
796
1037
|
const result = await options.configuredServerService.getConfiguredServerDetail({
|
|
797
|
-
context: buildAdminOperationContext(req, options, {
|
|
1038
|
+
context: buildAdminOperationContext(req, options, {
|
|
1039
|
+
type: 'configured_server',
|
|
1040
|
+
id: `${targetSource ?? 'mcpServers'}:${targetName}`,
|
|
1041
|
+
}),
|
|
798
1042
|
targetName,
|
|
1043
|
+
...(targetSource ? { targetSource } : {}),
|
|
1044
|
+
...(model.success ? { model: model.data } : {}),
|
|
799
1045
|
});
|
|
800
1046
|
if (!result.ok) {
|
|
801
1047
|
sendAdminOperationResult(res, result);
|
|
@@ -806,6 +1052,7 @@ async function handleConfiguredServerDetail(req, res, options) {
|
|
|
806
1052
|
operationId: result.operationId,
|
|
807
1053
|
server: result.result.server,
|
|
808
1054
|
editContract: result.result.editContract,
|
|
1055
|
+
...(result.result.toolInventory ? { toolInventory: result.result.toolInventory } : {}),
|
|
809
1056
|
});
|
|
810
1057
|
}
|
|
811
1058
|
catch (error) {
|
|
@@ -822,6 +1069,51 @@ async function handleConfiguredServerDetail(req, res, options) {
|
|
|
822
1069
|
throw error;
|
|
823
1070
|
}
|
|
824
1071
|
}
|
|
1072
|
+
async function handleConfiguredToolInventoryRefresh(req, res, options, targetSource) {
|
|
1073
|
+
if (!options.configuredServerService?.refreshConfiguredToolInventory) {
|
|
1074
|
+
res.status(404).json({ error: 'admin_configured_servers_unavailable' });
|
|
1075
|
+
return;
|
|
1076
|
+
}
|
|
1077
|
+
const body = configuredToolInventoryRefreshSchema.safeParse(req.body ?? {});
|
|
1078
|
+
if (!body.success) {
|
|
1079
|
+
res.status(400).json({ error: 'configured_tool_inventory_refresh_invalid' });
|
|
1080
|
+
return;
|
|
1081
|
+
}
|
|
1082
|
+
const targetName = req.params.name;
|
|
1083
|
+
try {
|
|
1084
|
+
const result = await options.configuredServerService.refreshConfiguredToolInventory({
|
|
1085
|
+
context: buildAdminOperationContext(req, options, {
|
|
1086
|
+
type: 'configured_server',
|
|
1087
|
+
id: `${targetSource}:${targetName}`,
|
|
1088
|
+
}),
|
|
1089
|
+
targetName,
|
|
1090
|
+
targetSource,
|
|
1091
|
+
...(body.data.model ? { model: body.data.model } : {}),
|
|
1092
|
+
});
|
|
1093
|
+
if (!result.ok) {
|
|
1094
|
+
sendAdminOperationResult(res, result);
|
|
1095
|
+
return;
|
|
1096
|
+
}
|
|
1097
|
+
res.status(200).json({
|
|
1098
|
+
ok: true,
|
|
1099
|
+
operationId: result.operationId,
|
|
1100
|
+
toolInventory: result.result,
|
|
1101
|
+
});
|
|
1102
|
+
}
|
|
1103
|
+
catch (error) {
|
|
1104
|
+
if (error instanceof AdminConfiguredServerNotFoundError) {
|
|
1105
|
+
res.status(404).json({
|
|
1106
|
+
ok: false,
|
|
1107
|
+
error: error.code,
|
|
1108
|
+
code: error.code,
|
|
1109
|
+
message: 'Configured server target was not found',
|
|
1110
|
+
target: { type: 'configured_server', id: `${targetSource}:${targetName}` },
|
|
1111
|
+
});
|
|
1112
|
+
return;
|
|
1113
|
+
}
|
|
1114
|
+
throw error;
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
825
1117
|
async function handleConfiguredServerCreateContract(req, res, options) {
|
|
826
1118
|
if (!options.configuredServerService) {
|
|
827
1119
|
res.status(404).json({ error: 'admin_configured_servers_unavailable' });
|
|
@@ -906,7 +1198,7 @@ function configuredServerCreateDraftName(draft) {
|
|
|
906
1198
|
const name = draft.name;
|
|
907
1199
|
return typeof name === 'string' ? name : '';
|
|
908
1200
|
}
|
|
909
|
-
async function handleConfiguredServerPreview(req, res, options) {
|
|
1201
|
+
async function handleConfiguredServerPreview(req, res, options, targetSource) {
|
|
910
1202
|
if (!options.configuredServerService) {
|
|
911
1203
|
res.status(404).json({ error: 'admin_configured_servers_unavailable' });
|
|
912
1204
|
return;
|
|
@@ -914,11 +1206,17 @@ async function handleConfiguredServerPreview(req, res, options) {
|
|
|
914
1206
|
const targetName = req.params.name;
|
|
915
1207
|
const edit = getBodyValue(req.body, 'edit');
|
|
916
1208
|
try {
|
|
1209
|
+
const model = configuredServerModelSchema.safeParse(getBodyString(req.body, 'model'));
|
|
917
1210
|
const result = await options.configuredServerService.previewConfiguredServerEdit({
|
|
918
|
-
context: buildAdminOperationContext(req, options, {
|
|
1211
|
+
context: buildAdminOperationContext(req, options, {
|
|
1212
|
+
type: 'configured_server',
|
|
1213
|
+
id: `${targetSource ?? 'mcpServers'}:${targetName}`,
|
|
1214
|
+
}),
|
|
919
1215
|
targetName,
|
|
1216
|
+
...(targetSource ? { targetSource } : {}),
|
|
920
1217
|
edit: edit === undefined ? {} : edit,
|
|
921
1218
|
connectivityCheck: getBodyString(req.body, 'connectivityCheck') === 'manual' ? 'manual' : 'auto',
|
|
1219
|
+
...(model.success ? { model: model.data } : {}),
|
|
922
1220
|
});
|
|
923
1221
|
if (!result.ok) {
|
|
924
1222
|
sendAdminOperationResult(res, result);
|
|
@@ -944,7 +1242,7 @@ async function handleConfiguredServerPreview(req, res, options) {
|
|
|
944
1242
|
throw error;
|
|
945
1243
|
}
|
|
946
1244
|
}
|
|
947
|
-
async function handleConfiguredServerApply(req, res, options) {
|
|
1245
|
+
async function handleConfiguredServerApply(req, res, options, targetSource) {
|
|
948
1246
|
if (!options.configuredServerService) {
|
|
949
1247
|
res.status(404).json({ error: 'admin_configured_servers_unavailable' });
|
|
950
1248
|
return;
|
|
@@ -962,11 +1260,17 @@ async function handleConfiguredServerApply(req, res, options) {
|
|
|
962
1260
|
}
|
|
963
1261
|
const targetName = req.params.name;
|
|
964
1262
|
try {
|
|
1263
|
+
const model = configuredServerModelSchema.safeParse(getBodyString(req.body, 'model'));
|
|
965
1264
|
const result = await options.configuredServerService.applyConfiguredServerEdit({
|
|
966
|
-
context: buildAdminOperationContext(req, options, {
|
|
1265
|
+
context: buildAdminOperationContext(req, options, {
|
|
1266
|
+
type: 'configured_server',
|
|
1267
|
+
id: `${targetSource ?? 'mcpServers'}:${targetName}`,
|
|
1268
|
+
}),
|
|
967
1269
|
targetName,
|
|
1270
|
+
...(targetSource ? { targetSource } : {}),
|
|
968
1271
|
edit: getBodyValue(req.body, 'edit') ?? {},
|
|
969
1272
|
previewFingerprint: getBodyString(req.body, 'previewFingerprint'),
|
|
1273
|
+
...(model.success ? { model: model.data } : {}),
|
|
970
1274
|
});
|
|
971
1275
|
if (!result.ok && result.status === 'mutation_failed' && isConfiguredServerApplyErrorCode(result.error)) {
|
|
972
1276
|
sendConfiguredServerApplyError(res, result.error);
|
|
@@ -1020,7 +1324,7 @@ function configuredServerApplyErrorMessage(code) {
|
|
|
1020
1324
|
return 'The configured server edit could not be applied.';
|
|
1021
1325
|
}
|
|
1022
1326
|
}
|
|
1023
|
-
async function handleConfiguredServerMutation(req, res, options, operationName) {
|
|
1327
|
+
async function handleConfiguredServerMutation(req, res, options, operationName, targetSource) {
|
|
1024
1328
|
if (!options.configuredServerService) {
|
|
1025
1329
|
res.status(404).json({ error: 'admin_configured_servers_unavailable' });
|
|
1026
1330
|
return;
|
|
@@ -1037,8 +1341,11 @@ async function handleConfiguredServerMutation(req, res, options, operationName)
|
|
|
1037
1341
|
return;
|
|
1038
1342
|
}
|
|
1039
1343
|
const targetName = req.params.name;
|
|
1040
|
-
const context = buildAdminOperationContext(req, options, {
|
|
1041
|
-
|
|
1344
|
+
const context = buildAdminOperationContext(req, options, {
|
|
1345
|
+
type: 'configured_server',
|
|
1346
|
+
id: `${targetSource ?? 'mcpServers'}:${targetName}`,
|
|
1347
|
+
});
|
|
1348
|
+
const input = { context, targetName, ...(targetSource ? { targetSource } : {}) };
|
|
1042
1349
|
const result = operationName === 'enableConfiguredServer'
|
|
1043
1350
|
? await options.configuredServerService.enableConfiguredServer(input)
|
|
1044
1351
|
: await options.configuredServerService.disableConfiguredServer(input);
|
|
@@ -1531,6 +1838,11 @@ function configuredServerRequestFingerprint(operationName, targetName, body) {
|
|
|
1531
1838
|
},
|
|
1532
1839
|
}
|
|
1533
1840
|
: {}),
|
|
1841
|
+
...(operationName.includes('InstructionTemplate') || operationName === 'applyConfiguredServerInstructionOverride'
|
|
1842
|
+
? {
|
|
1843
|
+
bodyDigest: keyedRequestFingerprint(previewFingerprint || getBodyString(body, 'expectedConfigFingerprint') || operationName, 'admin-instruction-operation', stableJsonStringify(body ?? {})),
|
|
1844
|
+
}
|
|
1845
|
+
: {}),
|
|
1534
1846
|
});
|
|
1535
1847
|
if (operationName === 'applyConfiguredServerCreate') {
|
|
1536
1848
|
return `configured_server_create_${keyedRequestFingerprint(previewFingerprint, 'configured-server-create', normalized)}`;
|
|
@@ -1621,6 +1933,30 @@ function cliOperationErrorDetails(result) {
|
|
|
1621
1933
|
return details;
|
|
1622
1934
|
}
|
|
1623
1935
|
function operationNameForRequest(req) {
|
|
1936
|
+
if (req.path.startsWith('/api/instruction-templates')) {
|
|
1937
|
+
if (req.path.endsWith('/clone'))
|
|
1938
|
+
return 'cloneInstructionTemplate';
|
|
1939
|
+
if (req.path.endsWith('/update'))
|
|
1940
|
+
return 'updateInstructionTemplate';
|
|
1941
|
+
if (req.path.endsWith('/validate'))
|
|
1942
|
+
return 'validateInstructionTemplate';
|
|
1943
|
+
if (req.path.endsWith('/preview'))
|
|
1944
|
+
return 'previewInstructionTemplate';
|
|
1945
|
+
if (req.path.endsWith('/activate'))
|
|
1946
|
+
return 'activateInstructionTemplate';
|
|
1947
|
+
if (req.path.endsWith('/delete-preview'))
|
|
1948
|
+
return 'previewDeleteInstructionTemplate';
|
|
1949
|
+
if (req.path.endsWith('/import-legacy'))
|
|
1950
|
+
return 'importLegacyInstructionTemplate';
|
|
1951
|
+
if (req.method === 'DELETE')
|
|
1952
|
+
return 'deleteInstructionTemplate';
|
|
1953
|
+
if (req.method === 'POST')
|
|
1954
|
+
return 'createInstructionTemplate';
|
|
1955
|
+
return req.path === '/api/instruction-templates' ? 'listInstructionTemplates' : 'getInstructionTemplate';
|
|
1956
|
+
}
|
|
1957
|
+
if (req.path.endsWith('/instruction-override')) {
|
|
1958
|
+
return 'applyConfiguredServerInstructionOverride';
|
|
1959
|
+
}
|
|
1624
1960
|
if (req.path.startsWith('/api/oauth/')) {
|
|
1625
1961
|
return req.path.endsWith('/restart') ? 'restartBackendOAuth' : 'authorizeBackendOAuth';
|
|
1626
1962
|
}
|