@cplace/test-mcp-server 0.1.15 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +248 -113
- package/dist/conditional-registration.d.ts.map +1 -1
- package/dist/conditional-registration.js +19 -3
- package/dist/conditional-registration.js.map +1 -1
- package/dist/index.js +21 -93
- package/dist/index.js.map +1 -1
- package/dist/preference-file.d.ts +16 -0
- package/dist/preference-file.d.ts.map +1 -0
- package/dist/preference-file.js +133 -0
- package/dist/preference-file.js.map +1 -0
- package/dist/profiles.d.ts +1 -3
- package/dist/profiles.d.ts.map +1 -1
- package/dist/profiles.js +60 -112
- package/dist/profiles.js.map +1 -1
- package/dist/searchConversion.d.ts.map +1 -1
- package/dist/searchConversion.js +18 -5
- package/dist/searchConversion.js.map +1 -1
- package/dist/searchSchema.d.ts +25 -25
- package/dist/searchSchema.d.ts.map +1 -1
- package/dist/searchSchema.js +5 -5
- package/dist/searchSchema.js.map +1 -1
- package/dist/token-hashing.d.ts +3 -0
- package/dist/token-hashing.d.ts.map +1 -0
- package/dist/token-hashing.js +18 -0
- package/dist/token-hashing.js.map +1 -0
- package/dist/tool-metadata.d.ts +2 -0
- package/dist/tool-metadata.d.ts.map +1 -0
- package/dist/tool-metadata.js +43 -0
- package/dist/tool-metadata.js.map +1 -0
- package/dist/tools/change-listeners.d.ts +30 -0
- package/dist/tools/change-listeners.d.ts.map +1 -1
- package/dist/tools/change-listeners.js +24 -18
- package/dist/tools/change-listeners.js.map +1 -1
- package/dist/tools/common-schemas.d.ts +2 -0
- package/dist/tools/common-schemas.d.ts.map +1 -1
- package/dist/tools/common-schemas.js +16 -0
- package/dist/tools/common-schemas.js.map +1 -1
- package/dist/tools/csv-export.d.ts +1849 -0
- package/dist/tools/csv-export.d.ts.map +1 -0
- package/dist/tools/csv-export.js +61 -0
- package/dist/tools/csv-export.js.map +1 -0
- package/dist/tools/generic-layouts.d.ts +302 -0
- package/dist/tools/generic-layouts.d.ts.map +1 -1
- package/dist/tools/generic-layouts.js +102 -70
- package/dist/tools/generic-layouts.js.map +1 -1
- package/dist/tools/get-operations.d.ts +16 -0
- package/dist/tools/get-operations.d.ts.map +1 -0
- package/dist/tools/get-operations.js +63 -0
- package/dist/tools/get-operations.js.map +1 -0
- package/dist/tools/pages.d.ts +55 -0
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js +173 -257
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/ppt-export-schemas.d.ts +16 -16
- package/dist/tools/ppt-export.d.ts +1493 -0
- package/dist/tools/ppt-export.d.ts.map +1 -1
- package/dist/tools/ppt-export.js +23 -17
- package/dist/tools/ppt-export.js.map +1 -1
- package/dist/tools/profile-management.d.ts +20 -0
- package/dist/tools/profile-management.d.ts.map +1 -0
- package/dist/tools/profile-management.js +250 -0
- package/dist/tools/profile-management.js.map +1 -0
- package/dist/tools/references.d.ts +36 -0
- package/dist/tools/references.d.ts.map +1 -1
- package/dist/tools/references.js +48 -45
- package/dist/tools/references.js.map +1 -1
- package/dist/tools/richstring-widgets.d.ts +51 -0
- package/dist/tools/richstring-widgets.d.ts.map +1 -0
- package/dist/tools/richstring-widgets.js +173 -0
- package/dist/tools/richstring-widgets.js.map +1 -0
- package/dist/tools/schedule.d.ts +14 -0
- package/dist/tools/schedule.d.ts.map +1 -1
- package/dist/tools/schedule.js +7 -3
- package/dist/tools/schedule.js.map +1 -1
- package/dist/tools/script-logs.d.ts +29 -0
- package/dist/tools/script-logs.d.ts.map +1 -0
- package/dist/tools/script-logs.js +144 -0
- package/dist/tools/script-logs.js.map +1 -0
- package/dist/tools/search.d.ts +1870 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +49 -75
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/system.d.ts.map +1 -1
- package/dist/tools/system.js +4 -2
- package/dist/tools/system.js.map +1 -1
- package/dist/tools/type-layouts.d.ts +37 -0
- package/dist/tools/type-layouts.d.ts.map +1 -1
- package/dist/tools/type-layouts.js +30 -22
- package/dist/tools/type-layouts.js.map +1 -1
- package/dist/tools/type-management.d.ts +134 -0
- package/dist/tools/type-management.d.ts.map +1 -0
- package/dist/tools/{workspace.js → type-management.js} +67 -307
- package/dist/tools/type-management.js.map +1 -0
- package/dist/tools/users.d.ts +19 -0
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +14 -28
- package/dist/tools/users.js.map +1 -1
- package/dist/tools/validators.d.ts +28 -0
- package/dist/tools/validators.d.ts.map +1 -1
- package/dist/tools/validators.js +21 -15
- package/dist/tools/validators.js.map +1 -1
- package/dist/tools/version-check.d.ts.map +1 -1
- package/dist/tools/version-check.js +11 -9
- package/dist/tools/version-check.js.map +1 -1
- package/dist/tools/version-history.d.ts +48 -0
- package/dist/tools/version-history.d.ts.map +1 -1
- package/dist/tools/version-history.js +39 -29
- package/dist/tools/version-history.js.map +1 -1
- package/dist/tools/widgets.d.ts +182 -0
- package/dist/tools/widgets.d.ts.map +1 -1
- package/dist/tools/widgets.js +122 -343
- package/dist/tools/widgets.js.map +1 -1
- package/dist/tools/workflow-scripts.d.ts +40 -0
- package/dist/tools/workflow-scripts.d.ts.map +1 -0
- package/dist/tools/workflow-scripts.js +186 -0
- package/dist/tools/workflow-scripts.js.map +1 -0
- package/dist/tools/workflow.d.ts +70 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +259 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/tools/workspace-admin.d.ts +40 -0
- package/dist/tools/workspace-admin.d.ts.map +1 -0
- package/dist/tools/workspace-admin.js +125 -0
- package/dist/tools/workspace-admin.js.map +1 -0
- package/dist/tools/workspace-core.d.ts +45 -0
- package/dist/tools/workspace-core.d.ts.map +1 -0
- package/dist/tools/workspace-core.js +153 -0
- package/dist/tools/workspace-core.js.map +1 -0
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/dateValidation.d.ts +5 -0
- package/dist/utils/dateValidation.d.ts.map +1 -0
- package/dist/utils/dateValidation.js +57 -0
- package/dist/utils/dateValidation.js.map +1 -0
- package/dist/utils.js +7 -7
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/tools/workspace.d.ts +0 -4
- package/dist/tools/workspace.d.ts.map +0 -1
- package/dist/tools/workspace.js.map +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { CplaceApiClient } from '../api.js';
|
|
4
|
+
export declare const WORKFLOW_SCRIPT_TOOL_DEFINITIONS: {
|
|
5
|
+
readonly cplace_get_workflow_script: {
|
|
6
|
+
readonly description: "Retrieves workflow script content (state entry action or transition scripts). Supports action scripts (executed when entering state or after transition), condition scripts (control button visibility), and confirmation condition scripts (control confirmation dialog).";
|
|
7
|
+
readonly inputSchema: {
|
|
8
|
+
type: z.ZodEnum<["state", "transition"]>;
|
|
9
|
+
stateName: z.ZodOptional<z.ZodString>;
|
|
10
|
+
previousState: z.ZodOptional<z.ZodString>;
|
|
11
|
+
nextState: z.ZodOptional<z.ZodString>;
|
|
12
|
+
scriptType: z.ZodOptional<z.ZodEnum<["action", "condition", "confirmationCondition"]>>;
|
|
13
|
+
workspaceId: z.ZodString;
|
|
14
|
+
typeInternalName: z.ZodString;
|
|
15
|
+
attributeName: z.ZodString;
|
|
16
|
+
};
|
|
17
|
+
readonly annotations: {
|
|
18
|
+
readonly title: "Get Workflow Script";
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
readonly cplace_manage_workflow_script: {
|
|
22
|
+
readonly description: "Creates, updates, or deletes workflow scripts (state or transition). Provide non-empty script to create/update. Provide null or empty string to delete the script. Scripts are written in cplacejs and have access to page context.";
|
|
23
|
+
readonly inputSchema: {
|
|
24
|
+
script: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
25
|
+
type: z.ZodEnum<["state", "transition"]>;
|
|
26
|
+
stateName: z.ZodOptional<z.ZodString>;
|
|
27
|
+
previousState: z.ZodOptional<z.ZodString>;
|
|
28
|
+
nextState: z.ZodOptional<z.ZodString>;
|
|
29
|
+
scriptType: z.ZodOptional<z.ZodEnum<["action", "condition", "confirmationCondition"]>>;
|
|
30
|
+
workspaceId: z.ZodString;
|
|
31
|
+
typeInternalName: z.ZodString;
|
|
32
|
+
attributeName: z.ZodString;
|
|
33
|
+
};
|
|
34
|
+
readonly annotations: {
|
|
35
|
+
readonly title: "Manage Workflow Script";
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export declare function registerWorkflowScriptTools(server: McpServer, client: CplaceApiClient): void;
|
|
40
|
+
//# sourceMappingURL=workflow-scripts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-scripts.d.ts","sourceRoot":"","sources":["../../src/tools/workflow-scripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAoD5C,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWnC,CAAC;AAMX,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,QAmLrF"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { debugLogWithTag } from "../logger.js";
|
|
3
|
+
const workflowScriptBaseSchema = {
|
|
4
|
+
workspaceId: z.string().describe("UID of the workspace containing the type (e.g., 'workspace/abc123')"),
|
|
5
|
+
typeInternalName: z.string().describe("Internal name of the type definition (e.g., 'cf.example.Task')"),
|
|
6
|
+
attributeName: z.string().describe("Name of the workflow attribute (e.g., 'status')")
|
|
7
|
+
};
|
|
8
|
+
const getWorkflowScriptSchema = {
|
|
9
|
+
...workflowScriptBaseSchema,
|
|
10
|
+
type: z.enum(["state", "transition"]).describe("Workflow element type: 'state' for state scripts, 'transition' for transition scripts"),
|
|
11
|
+
stateName: z.string().optional().describe("Required when type='state': Internal name of the workflow state (e.g., 'in-progress')"),
|
|
12
|
+
previousState: z.string().optional().describe("Required when type='transition': Source state internal name (e.g., 'open')"),
|
|
13
|
+
nextState: z.string().optional().describe("Required when type='transition': Target state internal name (e.g., 'in-progress')"),
|
|
14
|
+
scriptType: z.enum(["action", "condition", "confirmationCondition"]).optional().describe("Script type. Required for transitions ('action' | 'condition' | 'confirmationCondition'). " +
|
|
15
|
+
"For states: always 'action' (can be omitted)")
|
|
16
|
+
};
|
|
17
|
+
const manageWorkflowScriptSchema = {
|
|
18
|
+
...getWorkflowScriptSchema,
|
|
19
|
+
script: z.string().optional().nullable().describe("⚠️ Script content in cplacejs. Review cplace Low-Code documentation before writing scripts. " +
|
|
20
|
+
"Set to null or empty string to delete the script.")
|
|
21
|
+
};
|
|
22
|
+
const TOOL_GET_WORKFLOW_SCRIPT = 'cplace_get_workflow_script';
|
|
23
|
+
const TOOL_MANAGE_WORKFLOW_SCRIPT = 'cplace_manage_workflow_script';
|
|
24
|
+
export const WORKFLOW_SCRIPT_TOOL_DEFINITIONS = {
|
|
25
|
+
[TOOL_GET_WORKFLOW_SCRIPT]: {
|
|
26
|
+
description: "Retrieves workflow script content (state entry action or transition scripts). Supports action scripts (executed when entering state or after transition), condition scripts (control button visibility), and confirmation condition scripts (control confirmation dialog).",
|
|
27
|
+
inputSchema: getWorkflowScriptSchema,
|
|
28
|
+
annotations: { title: "Get Workflow Script" }
|
|
29
|
+
},
|
|
30
|
+
[TOOL_MANAGE_WORKFLOW_SCRIPT]: {
|
|
31
|
+
description: "Creates, updates, or deletes workflow scripts (state or transition). Provide non-empty script to create/update. Provide null or empty string to delete the script. Scripts are written in cplacejs and have access to page context.",
|
|
32
|
+
inputSchema: manageWorkflowScriptSchema,
|
|
33
|
+
annotations: { title: "Manage Workflow Script" }
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export function registerWorkflowScriptTools(server, client) {
|
|
37
|
+
server.registerTool(TOOL_GET_WORKFLOW_SCRIPT, WORKFLOW_SCRIPT_TOOL_DEFINITIONS[TOOL_GET_WORKFLOW_SCRIPT], async (params) => {
|
|
38
|
+
if (params.type === "state") {
|
|
39
|
+
if (!params.stateName) {
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: "text", text: "Error: stateName is required when type='state'" }],
|
|
42
|
+
isError: true
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (params.type === "transition") {
|
|
47
|
+
if (!params.scriptType) {
|
|
48
|
+
return {
|
|
49
|
+
content: [{ type: "text", text: "Error: scriptType is required when type='transition'" }],
|
|
50
|
+
isError: true
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (!params.previousState || !params.nextState) {
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: "text", text: "Error: previousState and nextState are required when type='transition'" }],
|
|
56
|
+
isError: true
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (params.type === "state") {
|
|
61
|
+
const scriptType = params.scriptType || "action";
|
|
62
|
+
debugLogWithTag('WORKFLOW_STATE_SCRIPT', `Retrieving ${scriptType} script for state '${params.stateName}' on ${params.typeInternalName}.${params.attributeName}`);
|
|
63
|
+
try {
|
|
64
|
+
const result = await client.makeApiRequest('json/workflow-state-script', 'GET', {
|
|
65
|
+
workspaceId: params.workspaceId,
|
|
66
|
+
typeInternalName: params.typeInternalName,
|
|
67
|
+
attributeName: params.attributeName,
|
|
68
|
+
stateName: params.stateName,
|
|
69
|
+
scriptType
|
|
70
|
+
});
|
|
71
|
+
debugLogWithTag('WORKFLOW_STATE_SCRIPT', `Successfully retrieved script for state '${params.stateName}'`);
|
|
72
|
+
return {
|
|
73
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return {
|
|
78
|
+
content: [{ type: "text", text: `Error retrieving workflow state script: ${error instanceof Error ? error.message : String(error)}` }],
|
|
79
|
+
isError: true
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
debugLogWithTag('WORKFLOW_TRANSITION_SCRIPT', `Retrieving ${params.scriptType} script for transition '${params.previousState}' -> '${params.nextState}' on ${params.typeInternalName}.${params.attributeName}`);
|
|
85
|
+
try {
|
|
86
|
+
const result = await client.makeApiRequest('json/workflow-transition-script', 'GET', {
|
|
87
|
+
workspaceId: params.workspaceId,
|
|
88
|
+
typeInternalName: params.typeInternalName,
|
|
89
|
+
attributeName: params.attributeName,
|
|
90
|
+
previousState: params.previousState,
|
|
91
|
+
nextState: params.nextState,
|
|
92
|
+
scriptType: params.scriptType
|
|
93
|
+
});
|
|
94
|
+
debugLogWithTag('WORKFLOW_TRANSITION_SCRIPT', `Successfully retrieved ${params.scriptType} script for transition '${params.previousState}' -> '${params.nextState}'`);
|
|
95
|
+
return {
|
|
96
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return {
|
|
101
|
+
content: [{ type: "text", text: `Error retrieving workflow transition script: ${error instanceof Error ? error.message : String(error)}` }],
|
|
102
|
+
isError: true
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
server.registerTool(TOOL_MANAGE_WORKFLOW_SCRIPT, WORKFLOW_SCRIPT_TOOL_DEFINITIONS[TOOL_MANAGE_WORKFLOW_SCRIPT], async (params) => {
|
|
108
|
+
if (params.type === "state") {
|
|
109
|
+
if (!params.stateName) {
|
|
110
|
+
return {
|
|
111
|
+
content: [{ type: "text", text: "Error: stateName is required when type='state'" }],
|
|
112
|
+
isError: true
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else if (params.type === "transition") {
|
|
117
|
+
if (!params.scriptType) {
|
|
118
|
+
return {
|
|
119
|
+
content: [{ type: "text", text: "Error: scriptType is required when type='transition'" }],
|
|
120
|
+
isError: true
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (!params.previousState || !params.nextState) {
|
|
124
|
+
return {
|
|
125
|
+
content: [{ type: "text", text: "Error: previousState and nextState are required when type='transition'" }],
|
|
126
|
+
isError: true
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const normalizedScript = (params.script === null || params.script === undefined || params.script.trim() === '')
|
|
131
|
+
? null
|
|
132
|
+
: params.script;
|
|
133
|
+
const operation = normalizedScript === null ? 'delete' : 'create/update';
|
|
134
|
+
if (params.type === "state") {
|
|
135
|
+
const scriptType = params.scriptType || "action";
|
|
136
|
+
debugLogWithTag('WORKFLOW_STATE_SCRIPT', `${operation} script for state '${params.stateName}' on ${params.typeInternalName}.${params.attributeName}`);
|
|
137
|
+
try {
|
|
138
|
+
const requestBody = {
|
|
139
|
+
workspaceId: params.workspaceId,
|
|
140
|
+
typeInternalName: params.typeInternalName,
|
|
141
|
+
attributeName: params.attributeName,
|
|
142
|
+
stateName: params.stateName,
|
|
143
|
+
scriptType,
|
|
144
|
+
script: normalizedScript
|
|
145
|
+
};
|
|
146
|
+
const result = await client.makeApiRequest('json/workflow-state-script', 'PATCH', undefined, requestBody);
|
|
147
|
+
debugLogWithTag('WORKFLOW_STATE_SCRIPT', `Successfully ${operation}d script for state '${params.stateName}'`);
|
|
148
|
+
return {
|
|
149
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
return {
|
|
154
|
+
content: [{ type: "text", text: `Error managing workflow state script: ${error instanceof Error ? error.message : String(error)}` }],
|
|
155
|
+
isError: true
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
debugLogWithTag('WORKFLOW_TRANSITION_SCRIPT', `${operation} ${params.scriptType} script for transition '${params.previousState}' -> '${params.nextState}' on ${params.typeInternalName}.${params.attributeName}`);
|
|
161
|
+
try {
|
|
162
|
+
const requestBody = {
|
|
163
|
+
workspaceId: params.workspaceId,
|
|
164
|
+
typeInternalName: params.typeInternalName,
|
|
165
|
+
attributeName: params.attributeName,
|
|
166
|
+
previousState: params.previousState,
|
|
167
|
+
nextState: params.nextState,
|
|
168
|
+
scriptType: params.scriptType,
|
|
169
|
+
script: normalizedScript
|
|
170
|
+
};
|
|
171
|
+
const result = await client.makeApiRequest('json/workflow-transition-script', 'PATCH', undefined, requestBody);
|
|
172
|
+
debugLogWithTag('WORKFLOW_TRANSITION_SCRIPT', `Successfully ${operation}d ${params.scriptType} script for transition '${params.previousState}' -> '${params.nextState}'`);
|
|
173
|
+
return {
|
|
174
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
return {
|
|
179
|
+
content: [{ type: "text", text: `Error managing workflow transition script: ${error instanceof Error ? error.message : String(error)}` }],
|
|
180
|
+
isError: true
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=workflow-scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-scripts.js","sourceRoot":"","sources":["../../src/tools/workflow-scripts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { CplaceApiClient } from '../api.js';
|
|
4
|
+
export declare const WORKFLOW_TOOL_DEFINITIONS: {
|
|
5
|
+
readonly cplace_manage_workflow_state: {
|
|
6
|
+
readonly description: "Create or update workflow states with specified display properties. State internal names must be unique within the workflow and are immutable after creation.";
|
|
7
|
+
readonly inputSchema: {
|
|
8
|
+
readonly operation: z.ZodEnum<["create", "update"]>;
|
|
9
|
+
readonly workspaceId: z.ZodString;
|
|
10
|
+
readonly typeDefinitionInternalName: z.ZodString;
|
|
11
|
+
readonly attributeName: z.ZodString;
|
|
12
|
+
readonly internalName: z.ZodOptional<z.ZodString>;
|
|
13
|
+
readonly stateInternalName: z.ZodOptional<z.ZodString>;
|
|
14
|
+
readonly displayNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
15
|
+
readonly icon: z.ZodOptional<z.ZodString>;
|
|
16
|
+
readonly color: z.ZodOptional<z.ZodString>;
|
|
17
|
+
readonly isDefault: z.ZodOptional<z.ZodBoolean>;
|
|
18
|
+
};
|
|
19
|
+
readonly annotations: {
|
|
20
|
+
readonly title: "Manage Workflow State";
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
readonly cplace_delete_workflow_state: {
|
|
24
|
+
readonly description: "Remove a workflow state and all transitions involving it. Does NOT migrate existing pages - pages in the deleted state become uneditable (but remain readable). Returns warning with affected page count. Fixed states (isFixed=true) and default states (isDefault=true) cannot be deleted.";
|
|
25
|
+
readonly inputSchema: {
|
|
26
|
+
readonly workspaceId: z.ZodString;
|
|
27
|
+
readonly typeDefinitionInternalName: z.ZodString;
|
|
28
|
+
readonly attributeName: z.ZodString;
|
|
29
|
+
readonly stateInternalName: z.ZodString;
|
|
30
|
+
};
|
|
31
|
+
readonly annotations: {
|
|
32
|
+
readonly title: "Delete Workflow State";
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
readonly cplace_manage_workflow_transition: {
|
|
36
|
+
readonly description: "Create or update workflow transitions between states with specified display properties. Both state names must exist in the workflow. Transitions are uniquely identified by the composite key (previousStateName, nextStateName).";
|
|
37
|
+
readonly inputSchema: {
|
|
38
|
+
readonly operation: z.ZodEnum<["create", "update"]>;
|
|
39
|
+
readonly workspaceId: z.ZodString;
|
|
40
|
+
readonly typeDefinitionInternalName: z.ZodString;
|
|
41
|
+
readonly attributeName: z.ZodString;
|
|
42
|
+
readonly previousStateName: z.ZodString;
|
|
43
|
+
readonly nextStateName: z.ZodString;
|
|
44
|
+
readonly displayNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
45
|
+
readonly icon: z.ZodOptional<z.ZodString>;
|
|
46
|
+
readonly color: z.ZodOptional<z.ZodString>;
|
|
47
|
+
readonly successMessage: z.ZodOptional<z.ZodString>;
|
|
48
|
+
readonly confirm: z.ZodOptional<z.ZodBoolean>;
|
|
49
|
+
readonly executeValidators: z.ZodOptional<z.ZodBoolean>;
|
|
50
|
+
};
|
|
51
|
+
readonly annotations: {
|
|
52
|
+
readonly title: "Manage Workflow Transition";
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
readonly cplace_delete_workflow_transition: {
|
|
56
|
+
readonly description: "Remove a workflow transition. Fixed transitions (isFixed=true) cannot be deleted. Deleting a transition only removes the ability to transition between the states - it does not affect existing pages or the states themselves.";
|
|
57
|
+
readonly inputSchema: {
|
|
58
|
+
readonly workspaceId: z.ZodString;
|
|
59
|
+
readonly typeDefinitionInternalName: z.ZodString;
|
|
60
|
+
readonly attributeName: z.ZodString;
|
|
61
|
+
readonly previousStateName: z.ZodString;
|
|
62
|
+
readonly nextStateName: z.ZodString;
|
|
63
|
+
};
|
|
64
|
+
readonly annotations: {
|
|
65
|
+
readonly title: "Delete Workflow Transition";
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export declare function registerWorkflowTools(server: McpServer, client: CplaceApiClient): void;
|
|
70
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/tools/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAU5C,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE5B,CAAC;AAEX,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,QAiO/E"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { debugLogWithTag } from "../logger.js";
|
|
3
|
+
const TOOL_MANAGE_WORKFLOW_STATE = 'cplace_manage_workflow_state';
|
|
4
|
+
const TOOL_DELETE_WORKFLOW_STATE = 'cplace_delete_workflow_state';
|
|
5
|
+
const TOOL_MANAGE_WORKFLOW_TRANSITION = 'cplace_manage_workflow_transition';
|
|
6
|
+
const TOOL_DELETE_WORKFLOW_TRANSITION = 'cplace_delete_workflow_transition';
|
|
7
|
+
export const WORKFLOW_TOOL_DEFINITIONS = {
|
|
8
|
+
[TOOL_MANAGE_WORKFLOW_STATE]: {
|
|
9
|
+
description: "Create or update workflow states with specified display properties. State internal names must be unique within the workflow and are immutable after creation.",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
operation: z.enum(["create", "update"]).describe("Operation type: 'create' for new workflow state, 'update' for existing workflow state"),
|
|
12
|
+
workspaceId: z.string().describe("UID of the workspace containing the type (e.g., 'workspace/abc123')"),
|
|
13
|
+
typeDefinitionInternalName: z.string().describe("Internal name of the type definition (e.g., 'cf.example.Task')"),
|
|
14
|
+
attributeName: z.string().describe("Name of the workflow attribute (e.g., 'status')"),
|
|
15
|
+
internalName: z.string().optional().describe("Required for create: Unique internal name for the new state - immutable after creation (e.g., 'in-review')"),
|
|
16
|
+
stateInternalName: z.string().optional().describe("Required for update: Internal name of the state to update - immutable identifier (e.g., 'in-review')"),
|
|
17
|
+
displayNames: z.record(z.string()).optional().describe("Localized display names as language code -> text map. For create: required. For update: optional (e.g., {\"en\": \"In Review\", \"de\": \"In Überprüfung\"})"),
|
|
18
|
+
icon: z.string().optional().describe("FontAwesome icon name without 'fa-' prefix (e.g., 'eye', 'check')"),
|
|
19
|
+
color: z.string().optional().describe("Hex color code (e.g., '#3498db')"),
|
|
20
|
+
isDefault: z.boolean().optional().describe("Whether this state should be the default for new pages (default: false)")
|
|
21
|
+
},
|
|
22
|
+
annotations: { title: "Manage Workflow State" }
|
|
23
|
+
},
|
|
24
|
+
[TOOL_DELETE_WORKFLOW_STATE]: {
|
|
25
|
+
description: "Remove a workflow state and all transitions involving it. Does NOT migrate existing pages - pages in the deleted state become uneditable (but remain readable). Returns warning with affected page count. Fixed states (isFixed=true) and default states (isDefault=true) cannot be deleted.",
|
|
26
|
+
inputSchema: {
|
|
27
|
+
workspaceId: z.string().describe("UID of the workspace containing the type (e.g., 'workspace/abc123')"),
|
|
28
|
+
typeDefinitionInternalName: z.string().describe("Internal name of the type definition (e.g., 'cf.example.Task')"),
|
|
29
|
+
attributeName: z.string().describe("Name of the workflow attribute (e.g., 'status')"),
|
|
30
|
+
stateInternalName: z.string().describe("Internal name of the state to delete (e.g., 'in-review')")
|
|
31
|
+
},
|
|
32
|
+
annotations: { title: "Delete Workflow State" }
|
|
33
|
+
},
|
|
34
|
+
[TOOL_MANAGE_WORKFLOW_TRANSITION]: {
|
|
35
|
+
description: "Create or update workflow transitions between states with specified display properties. Both state names must exist in the workflow. Transitions are uniquely identified by the composite key (previousStateName, nextStateName).",
|
|
36
|
+
inputSchema: {
|
|
37
|
+
operation: z.enum(["create", "update"]).describe("Operation type: 'create' for new workflow transition, 'update' for existing workflow transition"),
|
|
38
|
+
workspaceId: z.string().describe("UID of the workspace containing the type (e.g., 'workspace/abc123')"),
|
|
39
|
+
typeDefinitionInternalName: z.string().describe("Internal name of the type definition (e.g., 'cf.example.Task')"),
|
|
40
|
+
attributeName: z.string().describe("Name of the workflow attribute (e.g., 'status')"),
|
|
41
|
+
previousStateName: z.string().describe("Source state internal name - must exist (e.g., 'open')"),
|
|
42
|
+
nextStateName: z.string().describe("Target state internal name - must exist (e.g., 'in-review')"),
|
|
43
|
+
displayNames: z.record(z.string()).optional().describe("Localized display names for the transition button. For create: required. For update: optional (e.g., {\"en\": \"Submit for Review\", \"de\": \"Zur Überprüfung einreichen\"})"),
|
|
44
|
+
icon: z.string().optional().describe("FontAwesome icon name without 'fa-' prefix (e.g., 'arrow-right')"),
|
|
45
|
+
color: z.string().optional().describe("Hex color code for the transition button (e.g., '#3498db')"),
|
|
46
|
+
successMessage: z.string().optional().describe("Message shown after successful transition (optional)"),
|
|
47
|
+
confirm: z.boolean().optional().describe("Whether to show confirmation dialog (default: false)"),
|
|
48
|
+
executeValidators: z.boolean().optional().describe("Whether to run validators before transition (default: true)")
|
|
49
|
+
},
|
|
50
|
+
annotations: { title: "Manage Workflow Transition" }
|
|
51
|
+
},
|
|
52
|
+
[TOOL_DELETE_WORKFLOW_TRANSITION]: {
|
|
53
|
+
description: "Remove a workflow transition. Fixed transitions (isFixed=true) cannot be deleted. Deleting a transition only removes the ability to transition between the states - it does not affect existing pages or the states themselves.",
|
|
54
|
+
inputSchema: {
|
|
55
|
+
workspaceId: z.string().describe("UID of the workspace containing the type (e.g., 'workspace/abc123')"),
|
|
56
|
+
typeDefinitionInternalName: z.string().describe("Internal name of the type definition (e.g., 'cf.example.Task')"),
|
|
57
|
+
attributeName: z.string().describe("Name of the workflow attribute (e.g., 'status')"),
|
|
58
|
+
previousStateName: z.string().describe("Source state internal name (e.g., 'open')"),
|
|
59
|
+
nextStateName: z.string().describe("Target state internal name (e.g., 'in-review')")
|
|
60
|
+
},
|
|
61
|
+
annotations: { title: "Delete Workflow Transition" }
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
export function registerWorkflowTools(server, client) {
|
|
65
|
+
server.registerTool(TOOL_MANAGE_WORKFLOW_STATE, WORKFLOW_TOOL_DEFINITIONS[TOOL_MANAGE_WORKFLOW_STATE], async (params) => {
|
|
66
|
+
if (params.operation === "create") {
|
|
67
|
+
if (!params.internalName || !params.displayNames) {
|
|
68
|
+
return {
|
|
69
|
+
content: [{ type: "text", text: "Error: Create operation requires internalName and displayNames parameters" }],
|
|
70
|
+
isError: true
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
debugLogWithTag('WORKFLOW_STATE', `Creating state '${params.internalName}' for ${params.typeDefinitionInternalName}.${params.attributeName}`);
|
|
74
|
+
try {
|
|
75
|
+
const requestBody = {
|
|
76
|
+
workspaceId: params.workspaceId,
|
|
77
|
+
typeDefinitionInternalName: params.typeDefinitionInternalName,
|
|
78
|
+
attributeName: params.attributeName,
|
|
79
|
+
internalName: params.internalName,
|
|
80
|
+
displayNames: params.displayNames
|
|
81
|
+
};
|
|
82
|
+
if (params.icon !== undefined)
|
|
83
|
+
requestBody.icon = params.icon;
|
|
84
|
+
if (params.color !== undefined)
|
|
85
|
+
requestBody.color = params.color;
|
|
86
|
+
if (params.isDefault !== undefined)
|
|
87
|
+
requestBody.isDefault = params.isDefault;
|
|
88
|
+
const result = await client.makeApiRequest('json/workflow-state', 'POST', undefined, requestBody);
|
|
89
|
+
debugLogWithTag('WORKFLOW_STATE', `Successfully created state '${params.internalName}'`);
|
|
90
|
+
return {
|
|
91
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return {
|
|
96
|
+
content: [{ type: "text", text: `Error creating workflow state: ${error instanceof Error ? error.message : String(error)}` }],
|
|
97
|
+
isError: true
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (!params.stateInternalName) {
|
|
103
|
+
return {
|
|
104
|
+
content: [{ type: "text", text: "Error: Update operation requires stateInternalName parameter" }],
|
|
105
|
+
isError: true
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
debugLogWithTag('WORKFLOW_STATE', `Updating state '${params.stateInternalName}' for ${params.typeDefinitionInternalName}.${params.attributeName}`);
|
|
109
|
+
try {
|
|
110
|
+
const requestBody = {
|
|
111
|
+
workspaceId: params.workspaceId,
|
|
112
|
+
typeDefinitionInternalName: params.typeDefinitionInternalName,
|
|
113
|
+
attributeName: params.attributeName,
|
|
114
|
+
stateInternalName: params.stateInternalName
|
|
115
|
+
};
|
|
116
|
+
if (params.displayNames !== undefined)
|
|
117
|
+
requestBody.displayNames = params.displayNames;
|
|
118
|
+
if (params.icon !== undefined)
|
|
119
|
+
requestBody.icon = params.icon;
|
|
120
|
+
if (params.color !== undefined)
|
|
121
|
+
requestBody.color = params.color;
|
|
122
|
+
if (params.isDefault !== undefined)
|
|
123
|
+
requestBody.isDefault = params.isDefault;
|
|
124
|
+
const result = await client.makeApiRequest('json/workflow-state', 'PATCH', undefined, requestBody);
|
|
125
|
+
debugLogWithTag('WORKFLOW_STATE', `Successfully updated state '${params.stateInternalName}'`);
|
|
126
|
+
return {
|
|
127
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
return {
|
|
132
|
+
content: [{ type: "text", text: `Error updating workflow state: ${error instanceof Error ? error.message : String(error)}` }],
|
|
133
|
+
isError: true
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
server.registerTool(TOOL_DELETE_WORKFLOW_STATE, WORKFLOW_TOOL_DEFINITIONS[TOOL_DELETE_WORKFLOW_STATE], async ({ workspaceId, typeDefinitionInternalName, attributeName, stateInternalName }) => {
|
|
139
|
+
debugLogWithTag('WORKFLOW_STATE', `Deleting state '${stateInternalName}' for ${typeDefinitionInternalName}.${attributeName}`);
|
|
140
|
+
try {
|
|
141
|
+
const result = await client.makeApiRequest('json/workflow-state', 'DELETE', {
|
|
142
|
+
workspaceId,
|
|
143
|
+
typeDefinitionInternalName,
|
|
144
|
+
attributeName,
|
|
145
|
+
stateInternalName
|
|
146
|
+
});
|
|
147
|
+
debugLogWithTag('WORKFLOW_STATE', `Successfully deleted state '${stateInternalName}'`);
|
|
148
|
+
return {
|
|
149
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
return {
|
|
154
|
+
content: [{ type: "text", text: `Error deleting workflow state: ${error instanceof Error ? error.message : String(error)}` }],
|
|
155
|
+
isError: true
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
server.registerTool(TOOL_MANAGE_WORKFLOW_TRANSITION, WORKFLOW_TOOL_DEFINITIONS[TOOL_MANAGE_WORKFLOW_TRANSITION], async (params) => {
|
|
160
|
+
if (params.operation === "create") {
|
|
161
|
+
if (!params.displayNames) {
|
|
162
|
+
return {
|
|
163
|
+
content: [{ type: "text", text: "Error: Create operation requires displayNames parameter" }],
|
|
164
|
+
isError: true
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
debugLogWithTag('WORKFLOW_TRANSITION', `Creating transition '${params.previousStateName}' -> '${params.nextStateName}' for ${params.typeDefinitionInternalName}.${params.attributeName}`);
|
|
168
|
+
try {
|
|
169
|
+
const requestBody = {
|
|
170
|
+
workspaceId: params.workspaceId,
|
|
171
|
+
typeDefinitionInternalName: params.typeDefinitionInternalName,
|
|
172
|
+
attributeName: params.attributeName,
|
|
173
|
+
previousStateName: params.previousStateName,
|
|
174
|
+
nextStateName: params.nextStateName,
|
|
175
|
+
displayNames: params.displayNames
|
|
176
|
+
};
|
|
177
|
+
if (params.icon !== undefined)
|
|
178
|
+
requestBody.icon = params.icon;
|
|
179
|
+
if (params.color !== undefined)
|
|
180
|
+
requestBody.color = params.color;
|
|
181
|
+
if (params.successMessage !== undefined)
|
|
182
|
+
requestBody.successMessage = params.successMessage;
|
|
183
|
+
if (params.confirm !== undefined)
|
|
184
|
+
requestBody.confirm = params.confirm;
|
|
185
|
+
if (params.executeValidators !== undefined)
|
|
186
|
+
requestBody.executeValidators = params.executeValidators;
|
|
187
|
+
const result = await client.makeApiRequest('json/workflow-transition', 'POST', undefined, requestBody);
|
|
188
|
+
debugLogWithTag('WORKFLOW_TRANSITION', `Successfully created transition '${params.previousStateName}' -> '${params.nextStateName}'`);
|
|
189
|
+
return {
|
|
190
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
return {
|
|
195
|
+
content: [{ type: "text", text: `Error creating workflow transition: ${error instanceof Error ? error.message : String(error)}` }],
|
|
196
|
+
isError: true
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
debugLogWithTag('WORKFLOW_TRANSITION', `Updating transition '${params.previousStateName}' -> '${params.nextStateName}' for ${params.typeDefinitionInternalName}.${params.attributeName}`);
|
|
202
|
+
try {
|
|
203
|
+
const requestBody = {
|
|
204
|
+
workspaceId: params.workspaceId,
|
|
205
|
+
typeDefinitionInternalName: params.typeDefinitionInternalName,
|
|
206
|
+
attributeName: params.attributeName,
|
|
207
|
+
previousStateName: params.previousStateName,
|
|
208
|
+
nextStateName: params.nextStateName
|
|
209
|
+
};
|
|
210
|
+
if (params.displayNames !== undefined)
|
|
211
|
+
requestBody.displayNames = params.displayNames;
|
|
212
|
+
if (params.icon !== undefined)
|
|
213
|
+
requestBody.icon = params.icon;
|
|
214
|
+
if (params.color !== undefined)
|
|
215
|
+
requestBody.color = params.color;
|
|
216
|
+
if (params.successMessage !== undefined)
|
|
217
|
+
requestBody.successMessage = params.successMessage;
|
|
218
|
+
if (params.confirm !== undefined)
|
|
219
|
+
requestBody.confirm = params.confirm;
|
|
220
|
+
if (params.executeValidators !== undefined)
|
|
221
|
+
requestBody.executeValidators = params.executeValidators;
|
|
222
|
+
const result = await client.makeApiRequest('json/workflow-transition', 'PATCH', undefined, requestBody);
|
|
223
|
+
debugLogWithTag('WORKFLOW_TRANSITION', `Successfully updated transition '${params.previousStateName}' -> '${params.nextStateName}'`);
|
|
224
|
+
return {
|
|
225
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
return {
|
|
230
|
+
content: [{ type: "text", text: `Error updating workflow transition: ${error instanceof Error ? error.message : String(error)}` }],
|
|
231
|
+
isError: true
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
server.registerTool(TOOL_DELETE_WORKFLOW_TRANSITION, WORKFLOW_TOOL_DEFINITIONS[TOOL_DELETE_WORKFLOW_TRANSITION], async ({ workspaceId, typeDefinitionInternalName, attributeName, previousStateName, nextStateName }) => {
|
|
237
|
+
debugLogWithTag('WORKFLOW_TRANSITION', `Deleting transition '${previousStateName}' -> '${nextStateName}' for ${typeDefinitionInternalName}.${attributeName}`);
|
|
238
|
+
try {
|
|
239
|
+
const result = await client.makeApiRequest('json/workflow-transition', 'DELETE', {
|
|
240
|
+
workspaceId,
|
|
241
|
+
typeDefinitionInternalName,
|
|
242
|
+
attributeName,
|
|
243
|
+
previousStateName,
|
|
244
|
+
nextStateName
|
|
245
|
+
});
|
|
246
|
+
debugLogWithTag('WORKFLOW_TRANSITION', `Successfully deleted transition '${previousStateName}' -> '${nextStateName}'`);
|
|
247
|
+
return {
|
|
248
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
return {
|
|
253
|
+
content: [{ type: "text", text: `Error deleting workflow transition: ${error instanceof Error ? error.message : String(error)}` }],
|
|
254
|
+
isError: true
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/tools/workflow.ts"],"names":[],"mappings":"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"}
|