@toolplex/client 0.1.3 → 0.1.5
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/dist/mcp-server/toolHandlers/initHandler.js +6 -0
- package/dist/mcp-server/toolHandlers/listServersHandler.js +21 -9
- package/dist/mcp-server/toolHandlers/listToolsHandler.js +48 -24
- package/dist/mcp-server/toolHandlers/lookupEntityHandler.js +12 -4
- package/dist/mcp-server/toolHandlers/savePlaybookHandler.js +2 -2
- package/dist/mcp-server/toolHandlers/searchHandler.js +29 -24
- package/dist/mcp-server/toolplexApi/service.d.ts +2 -2
- package/dist/mcp-server/toolplexApi/service.js +4 -2
- package/dist/mcp-server/toolplexApi/types.d.ts +2 -0
- package/dist/shared/mcpServerTypes.d.ts +6 -0
- package/dist/shared/mcpServerTypes.js +2 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -100,6 +100,12 @@ export async function handleInitialize(params) {
|
|
|
100
100
|
.join("\n") +
|
|
101
101
|
"\n\nMore playbooks are available through the search tool.",
|
|
102
102
|
});
|
|
103
|
+
if (toolplexApiInitResponse.announcement) {
|
|
104
|
+
result.content.push({
|
|
105
|
+
type: "text",
|
|
106
|
+
text: `\nToolPlex Platform Announcements: ${toolplexApiInitResponse.announcement}`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
103
109
|
await telemetryLogger.log("client_initialize_toolplex", {
|
|
104
110
|
session_id: toolplexApiInitResponse.session_id,
|
|
105
111
|
success: Object.keys(allFailures).length === 0,
|
|
@@ -11,7 +11,6 @@ export async function handleListServers() {
|
|
|
11
11
|
const policyEnforcer = Registry.getPolicyEnforcer();
|
|
12
12
|
try {
|
|
13
13
|
await logger.debug("Listing all installed servers");
|
|
14
|
-
let response = "Currently installed MCP servers:\n\n";
|
|
15
14
|
// Collect all servers for updating the cache
|
|
16
15
|
const allServers = [];
|
|
17
16
|
for (const [runtime, client] of Object.entries(serverManagerClients)) {
|
|
@@ -28,10 +27,7 @@ export async function handleListServers() {
|
|
|
28
27
|
// Filter out blocked servers
|
|
29
28
|
const filteredServers = policyEnforcer.filterBlockedMcpServers(parsed.data.servers, (server) => server.server_id);
|
|
30
29
|
filteredServers.forEach((server) => {
|
|
31
|
-
|
|
32
|
-
response += ` Name: ${server.server_name}\n`;
|
|
33
|
-
response += ` Description: ${server.description}\n\n`;
|
|
34
|
-
// Add to allServers for cache update
|
|
30
|
+
// Add to allServers for cache update and structured response
|
|
35
31
|
allServers.push({
|
|
36
32
|
server_id: server.server_id,
|
|
37
33
|
server_name: server.server_name,
|
|
@@ -42,20 +38,36 @@ export async function handleListServers() {
|
|
|
42
38
|
}
|
|
43
39
|
// Update the servers cache with the fresh list
|
|
44
40
|
serversCache.updateServers(allServers);
|
|
45
|
-
if (response === "Currently installed MCP servers:\n\n") {
|
|
46
|
-
response = promptsCache.getPrompt("list_servers_empty");
|
|
47
|
-
}
|
|
48
41
|
await logger.debug("Successfully retrieved servers list");
|
|
49
42
|
await telemetryLogger.log("client_list_servers", {
|
|
50
43
|
success: true,
|
|
51
44
|
latency_ms: Date.now() - startTime,
|
|
52
45
|
});
|
|
46
|
+
// Build response content
|
|
47
|
+
if (allServers.length === 0) {
|
|
48
|
+
return {
|
|
49
|
+
role: "system",
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: "text",
|
|
53
|
+
text: promptsCache.getPrompt("list_servers_empty"),
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
53
58
|
return {
|
|
54
59
|
role: "system",
|
|
55
60
|
content: [
|
|
56
61
|
{
|
|
57
62
|
type: "text",
|
|
58
|
-
text:
|
|
63
|
+
text: JSON.stringify({
|
|
64
|
+
servers: allServers,
|
|
65
|
+
count: allServers.length,
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
type: "text",
|
|
70
|
+
text: `Found ${allServers.length} installed MCP server${allServers.length !== 1 ? "s" : ""}`,
|
|
59
71
|
},
|
|
60
72
|
],
|
|
61
73
|
};
|
|
@@ -11,7 +11,7 @@ export async function handleListTools(params) {
|
|
|
11
11
|
const policyEnforcer = Registry.getPolicyEnforcer();
|
|
12
12
|
try {
|
|
13
13
|
const server_id = params.server_id;
|
|
14
|
-
|
|
14
|
+
const content = [];
|
|
15
15
|
if (server_id) {
|
|
16
16
|
// Check if server is blocked using policy enforcer
|
|
17
17
|
policyEnforcer.enforceUseServerPolicy(server_id);
|
|
@@ -27,23 +27,34 @@ export async function handleListTools(params) {
|
|
|
27
27
|
if (!parsed.success) {
|
|
28
28
|
throw new Error(`Invalid response from server manager: ${parsed.error}`);
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
const tools = parsed.data.tools || [];
|
|
31
|
+
if (tools.length > 0) {
|
|
32
|
+
// First: Structured JSON for easy parsing
|
|
33
|
+
content.push({
|
|
34
|
+
type: "text",
|
|
35
|
+
text: JSON.stringify({
|
|
36
|
+
server_id: parsed.data.server_id,
|
|
37
|
+
server_name: parsed.data.server_name,
|
|
38
|
+
tools: tools,
|
|
39
|
+
tool_count: tools.length,
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
// Second: Human-readable summary
|
|
43
|
+
content.push({
|
|
44
|
+
type: "text",
|
|
45
|
+
text: `Available tools from server '${parsed.data.server_name}' (${parsed.data.server_id}): ${tools.length} tool${tools.length !== 1 ? "s" : ""}`,
|
|
46
|
+
});
|
|
36
47
|
}
|
|
37
48
|
else {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
content.push({
|
|
50
|
+
type: "text",
|
|
51
|
+
text: promptsCache.getPrompt("list_tools_empty"),
|
|
41
52
|
});
|
|
42
53
|
}
|
|
43
54
|
}
|
|
44
55
|
else {
|
|
45
56
|
await logger.debug("Listing tools from all installed servers");
|
|
46
|
-
|
|
57
|
+
const allServerTools = [];
|
|
47
58
|
for (const [runtime, client] of Object.entries(serverManagerClients)) {
|
|
48
59
|
const response_data = await client.sendRequest("list_all_tools", {});
|
|
49
60
|
if (response_data.error) {
|
|
@@ -59,17 +70,35 @@ export async function handleListTools(params) {
|
|
|
59
70
|
const filteredEntries = policyEnforcer.filterBlockedMcpServers(serverEntries, ([serverId]) => serverId);
|
|
60
71
|
for (const [serverId, serverTools] of filteredEntries) {
|
|
61
72
|
if (serverTools && serverTools.length > 0) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
response += ` Input Schema: ${JSON.stringify(tool.inputSchema, null, 2)}\n\n`;
|
|
73
|
+
allServerTools.push({
|
|
74
|
+
server_id: serverId,
|
|
75
|
+
tools: serverTools,
|
|
66
76
|
});
|
|
67
|
-
response += "\n";
|
|
68
77
|
}
|
|
69
78
|
}
|
|
70
79
|
}
|
|
71
|
-
if (
|
|
72
|
-
|
|
80
|
+
if (allServerTools.length > 0) {
|
|
81
|
+
const totalTools = allServerTools.reduce((sum, server) => sum + server.tools.length, 0);
|
|
82
|
+
// First: Structured JSON for easy parsing
|
|
83
|
+
content.push({
|
|
84
|
+
type: "text",
|
|
85
|
+
text: JSON.stringify({
|
|
86
|
+
server_tools: allServerTools,
|
|
87
|
+
server_count: allServerTools.length,
|
|
88
|
+
total_tools: totalTools,
|
|
89
|
+
}),
|
|
90
|
+
});
|
|
91
|
+
// Second: Human-readable summary
|
|
92
|
+
content.push({
|
|
93
|
+
type: "text",
|
|
94
|
+
text: `Found ${totalTools} tools across ${allServerTools.length} server${allServerTools.length !== 1 ? "s" : ""}`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
content.push({
|
|
99
|
+
type: "text",
|
|
100
|
+
text: promptsCache.getPrompt("list_tools_empty"),
|
|
101
|
+
});
|
|
73
102
|
}
|
|
74
103
|
}
|
|
75
104
|
await logger.debug("Successfully retrieved tools list");
|
|
@@ -82,12 +111,7 @@ export async function handleListTools(params) {
|
|
|
82
111
|
});
|
|
83
112
|
return {
|
|
84
113
|
role: "system",
|
|
85
|
-
content
|
|
86
|
-
{
|
|
87
|
-
type: "text",
|
|
88
|
-
text: response,
|
|
89
|
-
},
|
|
90
|
-
],
|
|
114
|
+
content,
|
|
91
115
|
};
|
|
92
116
|
}
|
|
93
117
|
catch (error) {
|
|
@@ -57,9 +57,6 @@ export async function handleLookupEntityTool(params) {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
await logger.debug(`Found entity: ${JSON.stringify(lookupResponse)}`);
|
|
60
|
-
let response = `Found ${params.entity_type}:\n`;
|
|
61
|
-
response += JSON.stringify(lookupResponse, null, 2);
|
|
62
|
-
response += "\n";
|
|
63
60
|
await logger.debug("Lookup completed successfully");
|
|
64
61
|
await telemetryLogger.log("client_lookup_entity", {
|
|
65
62
|
success: true,
|
|
@@ -69,10 +66,21 @@ export async function handleLookupEntityTool(params) {
|
|
|
69
66
|
},
|
|
70
67
|
latency_ms: Date.now() - startTime,
|
|
71
68
|
});
|
|
69
|
+
// Return structured data first for easy frontend parsing, then instructions
|
|
72
70
|
const content = [
|
|
71
|
+
// First: Structured JSON for easy parsing
|
|
73
72
|
{
|
|
74
73
|
type: "text",
|
|
75
|
-
text:
|
|
74
|
+
text: JSON.stringify({
|
|
75
|
+
entity_type: params.entity_type,
|
|
76
|
+
entity_id: params.entity_id,
|
|
77
|
+
result: lookupResponse,
|
|
78
|
+
}),
|
|
79
|
+
},
|
|
80
|
+
// Second: Human-readable summary
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: `Found ${params.entity_type}: ${lookupResponse.server_name || lookupResponse.description || params.entity_id}`,
|
|
76
84
|
},
|
|
77
85
|
];
|
|
78
86
|
if (params.entity_type === "server") {
|
|
@@ -21,8 +21,8 @@ export async function handleSavePlaybook(params) {
|
|
|
21
21
|
}
|
|
22
22
|
// Enforce playbook policy before saving
|
|
23
23
|
policyEnforcer.enforceSavePlaybookPolicy(params);
|
|
24
|
-
const { description, actions, domain, keywords, requirements, source_playbook_id, fork_reason, } = params;
|
|
25
|
-
const response = await apiService.createPlaybook(description, actions, domain, keywords, requirements, source_playbook_id, fork_reason);
|
|
24
|
+
const { description, actions, domain, keywords, requirements, privacy, source_playbook_id, fork_reason, } = params;
|
|
25
|
+
const response = await apiService.createPlaybook(description, actions, domain, keywords, requirements, privacy, source_playbook_id, fork_reason);
|
|
26
26
|
await logger.info(`Playbook created successfully with ID: ${response.id}`);
|
|
27
27
|
await telemetryLogger.log("client_save_playbook", {
|
|
28
28
|
success: true,
|
|
@@ -15,18 +15,20 @@ export async function handleSearchTool(params) {
|
|
|
15
15
|
const expandedKeywords = params.expanded_keywords || [];
|
|
16
16
|
const filter = params.filter || "all";
|
|
17
17
|
const size = params.size || 10;
|
|
18
|
+
const scope = params.scope || "all";
|
|
18
19
|
try {
|
|
19
20
|
// Check if the client is in restricted mode
|
|
20
21
|
if (clientContext.clientMode === "restricted") {
|
|
21
22
|
throw new Error("Search functionality is disabled in restricted mode.");
|
|
22
23
|
}
|
|
23
|
-
const results = await apiService.search(query, expandedKeywords, filter, size);
|
|
24
|
+
const results = await apiService.search(query, expandedKeywords, filter, size, scope);
|
|
24
25
|
// Log telemetry event
|
|
25
26
|
await telemetryLogger.log("client_search", {
|
|
26
27
|
success: true,
|
|
27
28
|
log_context: {
|
|
28
29
|
filter,
|
|
29
30
|
size,
|
|
31
|
+
scope,
|
|
30
32
|
num_expanded_keywords: expandedKeywords.length,
|
|
31
33
|
num_results: (results.mcp_servers?.length ?? -1) +
|
|
32
34
|
(results.playbooks?.length ?? -1),
|
|
@@ -63,32 +65,34 @@ export async function handleSearchTool(params) {
|
|
|
63
65
|
};
|
|
64
66
|
}
|
|
65
67
|
await logger.debug(`Found ${totalResults} results`);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
68
|
+
// Build structured response content
|
|
69
|
+
const content = [
|
|
70
|
+
// First: Structured JSON for easy parsing
|
|
71
|
+
{
|
|
72
|
+
type: "text",
|
|
73
|
+
text: JSON.stringify({
|
|
74
|
+
query,
|
|
75
|
+
expanded_keywords: expandedKeywords,
|
|
76
|
+
filter,
|
|
77
|
+
scope,
|
|
78
|
+
size,
|
|
79
|
+
servers: annotatedServers,
|
|
80
|
+
playbooks,
|
|
81
|
+
server_count: annotatedServers.length,
|
|
82
|
+
playbook_count: playbooks.length,
|
|
83
|
+
total_results: totalResults,
|
|
84
|
+
}),
|
|
85
|
+
},
|
|
86
|
+
// Second: Human-readable summary
|
|
87
|
+
{
|
|
88
|
+
type: "text",
|
|
89
|
+
text: `Found ${totalResults} results for "${query}": ${annotatedServers.length} servers, ${playbooks.length} playbooks`,
|
|
90
|
+
},
|
|
91
|
+
];
|
|
83
92
|
await logger.info("Search completed successfully");
|
|
84
93
|
return {
|
|
85
94
|
role: "system",
|
|
86
|
-
content
|
|
87
|
-
{
|
|
88
|
-
type: "text",
|
|
89
|
-
text: response,
|
|
90
|
-
},
|
|
91
|
-
],
|
|
95
|
+
content,
|
|
92
96
|
};
|
|
93
97
|
}
|
|
94
98
|
catch (error) {
|
|
@@ -99,6 +103,7 @@ export async function handleSearchTool(params) {
|
|
|
99
103
|
log_context: {
|
|
100
104
|
filter,
|
|
101
105
|
size,
|
|
106
|
+
scope,
|
|
102
107
|
num_expanded_keywords: expandedKeywords.length,
|
|
103
108
|
},
|
|
104
109
|
pii_sanitized_error_message: errorMessage,
|
|
@@ -21,11 +21,11 @@ export declare class ToolplexApiService {
|
|
|
21
21
|
data: Partial<Omit<LogTelemetryRequest, "event_type">>;
|
|
22
22
|
}>): Promise<LogTelemetryBatchResponse>;
|
|
23
23
|
lookupEntity(entityType: "server" | "playbook" | "feedback", entityId: string): Promise<any>;
|
|
24
|
-
search(query: string, expandedKeywords?: string[], filter?: string, size?: number): Promise<{
|
|
24
|
+
search(query: string, expandedKeywords?: string[], filter?: string, size?: number, scope?: string): Promise<{
|
|
25
25
|
mcp_servers?: any[];
|
|
26
26
|
playbooks?: any[];
|
|
27
27
|
}>;
|
|
28
|
-
createPlaybook(description: string, actions: Array<PlaybookAction>, domain?: string, keywords?: string[], requirements?: string[], sourcePlaybookId?: string, forkReason?: string): Promise<CreatePlaybookResponse>;
|
|
28
|
+
createPlaybook(description: string, actions: Array<PlaybookAction>, domain?: string, keywords?: string[], requirements?: string[], privacy?: "public" | "private", sourcePlaybookId?: string, forkReason?: string): Promise<CreatePlaybookResponse>;
|
|
29
29
|
logPlaybookUsage(playbookId: string, success: boolean, errorMessage?: string): Promise<LogPlaybookUsageResponse>;
|
|
30
30
|
submitFeedback(targetType: "server" | "playbook", targetId: string, vote: "up" | "down", message?: string, securityAssessment?: SecurityAssessment): Promise<SubmitFeedbackResponse>;
|
|
31
31
|
getFeedbackSummary(): Promise<FeedbackSummaryResponse>;
|
|
@@ -110,12 +110,13 @@ export class ToolplexApiService {
|
|
|
110
110
|
throw err;
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
async search(query, expandedKeywords = [], filter = "all", size = 10) {
|
|
113
|
+
async search(query, expandedKeywords = [], filter = "all", size = 10, scope = "all") {
|
|
114
114
|
const requestBody = {
|
|
115
115
|
query,
|
|
116
116
|
expanded_keywords: expandedKeywords,
|
|
117
117
|
filter,
|
|
118
118
|
size,
|
|
119
|
+
scope,
|
|
119
120
|
};
|
|
120
121
|
await logger.debug(`Searching API at ${this.baseUrl} with query: ${query}`);
|
|
121
122
|
try {
|
|
@@ -135,7 +136,7 @@ export class ToolplexApiService {
|
|
|
135
136
|
throw err;
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
|
-
async createPlaybook(description, actions, domain, keywords, requirements, sourcePlaybookId, forkReason) {
|
|
139
|
+
async createPlaybook(description, actions, domain, keywords, requirements, privacy, sourcePlaybookId, forkReason) {
|
|
139
140
|
const requestBody = {
|
|
140
141
|
description,
|
|
141
142
|
actions,
|
|
@@ -143,6 +144,7 @@ export class ToolplexApiService {
|
|
|
143
144
|
domain,
|
|
144
145
|
keywords,
|
|
145
146
|
requirements,
|
|
147
|
+
privacy,
|
|
146
148
|
source_playbook_id: sourcePlaybookId,
|
|
147
149
|
fork_reason: forkReason,
|
|
148
150
|
};
|
|
@@ -23,6 +23,7 @@ export interface InitResponse {
|
|
|
23
23
|
is_org_user: boolean;
|
|
24
24
|
prompts: Record<string, string>;
|
|
25
25
|
permissions: ClientPermissions;
|
|
26
|
+
announcement?: string;
|
|
26
27
|
flags: ClientFlags;
|
|
27
28
|
}
|
|
28
29
|
export type SecurityFlag = string;
|
|
@@ -51,6 +52,7 @@ export interface CreatePlaybookRequest {
|
|
|
51
52
|
domain?: string;
|
|
52
53
|
keywords?: string[];
|
|
53
54
|
requirements?: string[];
|
|
55
|
+
privacy?: "public" | "private";
|
|
54
56
|
source_playbook_id?: string;
|
|
55
57
|
fork_reason?: string;
|
|
56
58
|
}
|
|
@@ -96,16 +96,19 @@ export declare const SearchParamsSchema: z.ZodObject<{
|
|
|
96
96
|
expanded_keywords: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
97
97
|
filter: z.ZodOptional<z.ZodEnum<["all", "servers_only", "playbooks_only"]>>;
|
|
98
98
|
size: z.ZodOptional<z.ZodNumber>;
|
|
99
|
+
scope: z.ZodOptional<z.ZodEnum<["all", "public_only", "private_only"]>>;
|
|
99
100
|
}, "strip", z.ZodTypeAny, {
|
|
100
101
|
query: string;
|
|
101
102
|
filter?: "all" | "servers_only" | "playbooks_only" | undefined;
|
|
102
103
|
expanded_keywords?: string[] | undefined;
|
|
103
104
|
size?: number | undefined;
|
|
105
|
+
scope?: "all" | "public_only" | "private_only" | undefined;
|
|
104
106
|
}, {
|
|
105
107
|
query: string;
|
|
106
108
|
filter?: "all" | "servers_only" | "playbooks_only" | undefined;
|
|
107
109
|
expanded_keywords?: string[] | undefined;
|
|
108
110
|
size?: number | undefined;
|
|
111
|
+
scope?: "all" | "public_only" | "private_only" | undefined;
|
|
109
112
|
}>;
|
|
110
113
|
export type SearchParams = z.infer<typeof SearchParamsSchema>;
|
|
111
114
|
export declare const LookupEntityParamsSchema: z.ZodObject<{
|
|
@@ -295,6 +298,7 @@ export declare const SavePlaybookParamsSchema: z.ZodObject<{
|
|
|
295
298
|
domain: z.ZodOptional<z.ZodString>;
|
|
296
299
|
keywords: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
297
300
|
requirements: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
301
|
+
privacy: z.ZodOptional<z.ZodEnum<["public", "private"]>>;
|
|
298
302
|
source_playbook_id: z.ZodOptional<z.ZodString>;
|
|
299
303
|
fork_reason: z.ZodOptional<z.ZodString>;
|
|
300
304
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -310,6 +314,7 @@ export declare const SavePlaybookParamsSchema: z.ZodObject<{
|
|
|
310
314
|
domain?: string | undefined;
|
|
311
315
|
keywords?: string[] | undefined;
|
|
312
316
|
requirements?: string[] | undefined;
|
|
317
|
+
privacy?: "public" | "private" | undefined;
|
|
313
318
|
source_playbook_id?: string | undefined;
|
|
314
319
|
fork_reason?: string | undefined;
|
|
315
320
|
}, {
|
|
@@ -325,6 +330,7 @@ export declare const SavePlaybookParamsSchema: z.ZodObject<{
|
|
|
325
330
|
domain?: string | undefined;
|
|
326
331
|
keywords?: string[] | undefined;
|
|
327
332
|
requirements?: string[] | undefined;
|
|
333
|
+
privacy?: "public" | "private" | undefined;
|
|
328
334
|
source_playbook_id?: string | undefined;
|
|
329
335
|
fork_reason?: string | undefined;
|
|
330
336
|
}>;
|
|
@@ -43,6 +43,7 @@ export const SearchParamsSchema = z.object({
|
|
|
43
43
|
expanded_keywords: z.array(z.string()).optional(),
|
|
44
44
|
filter: z.enum(["all", "servers_only", "playbooks_only"]).optional(),
|
|
45
45
|
size: z.number().int().min(1).max(25).optional(),
|
|
46
|
+
scope: z.enum(["all", "public_only", "private_only"]).optional(),
|
|
46
47
|
});
|
|
47
48
|
// --------------------
|
|
48
49
|
// LookupEntityParams
|
|
@@ -121,6 +122,7 @@ export const SavePlaybookParamsSchema = z.object({
|
|
|
121
122
|
domain: z.string().optional(),
|
|
122
123
|
keywords: z.array(z.string()).optional(),
|
|
123
124
|
requirements: z.array(z.string()).optional(),
|
|
125
|
+
privacy: z.enum(["public", "private"]).optional(),
|
|
124
126
|
source_playbook_id: z.string().optional(),
|
|
125
127
|
fork_reason: z.string().optional(),
|
|
126
128
|
});
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "0.1.
|
|
1
|
+
export declare const version = "0.1.5";
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.1.
|
|
1
|
+
export const version = '0.1.5';
|