@minicor/mcp-server 2.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.
Files changed (134) hide show
  1. package/README.md +169 -0
  2. package/dist/__tests__/diff.test.d.ts +2 -0
  3. package/dist/__tests__/diff.test.d.ts.map +1 -0
  4. package/dist/__tests__/diff.test.js +23 -0
  5. package/dist/__tests__/diff.test.js.map +1 -0
  6. package/dist/__tests__/helpers.test.d.ts +2 -0
  7. package/dist/__tests__/helpers.test.d.ts.map +1 -0
  8. package/dist/__tests__/helpers.test.js +70 -0
  9. package/dist/__tests__/helpers.test.js.map +1 -0
  10. package/dist/__tests__/inspect-scripts.test.d.ts +2 -0
  11. package/dist/__tests__/inspect-scripts.test.d.ts.map +1 -0
  12. package/dist/__tests__/inspect-scripts.test.js +66 -0
  13. package/dist/__tests__/inspect-scripts.test.js.map +1 -0
  14. package/dist/browser-client.d.ts +42 -0
  15. package/dist/browser-client.d.ts.map +1 -0
  16. package/dist/browser-client.js +66 -0
  17. package/dist/browser-client.js.map +1 -0
  18. package/dist/cli.d.ts +14 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +256 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/config.d.ts +21 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +57 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/diff.d.ts +7 -0
  27. package/dist/diff.d.ts.map +1 -0
  28. package/dist/diff.js +97 -0
  29. package/dist/diff.js.map +1 -0
  30. package/dist/helpers.d.ts +28 -0
  31. package/dist/helpers.d.ts.map +1 -0
  32. package/dist/helpers.js +91 -0
  33. package/dist/helpers.js.map +1 -0
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +193 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/inspect-scripts.d.ts +18 -0
  39. package/dist/inspect-scripts.d.ts.map +1 -0
  40. package/dist/inspect-scripts.js +572 -0
  41. package/dist/inspect-scripts.js.map +1 -0
  42. package/dist/laminar-client.d.ts +160 -0
  43. package/dist/laminar-client.d.ts.map +1 -0
  44. package/dist/laminar-client.js +237 -0
  45. package/dist/laminar-client.js.map +1 -0
  46. package/dist/lds-client.d.ts +107 -0
  47. package/dist/lds-client.d.ts.map +1 -0
  48. package/dist/lds-client.js +81 -0
  49. package/dist/lds-client.js.map +1 -0
  50. package/dist/paths.d.ts +17 -0
  51. package/dist/paths.d.ts.map +1 -0
  52. package/dist/paths.js +46 -0
  53. package/dist/paths.js.map +1 -0
  54. package/dist/prompts/build-browser-rpa.d.ts +3 -0
  55. package/dist/prompts/build-browser-rpa.d.ts.map +1 -0
  56. package/dist/prompts/build-browser-rpa.js +90 -0
  57. package/dist/prompts/build-browser-rpa.js.map +1 -0
  58. package/dist/prompts/build-rpa.d.ts +3 -0
  59. package/dist/prompts/build-rpa.d.ts.map +1 -0
  60. package/dist/prompts/build-rpa.js +168 -0
  61. package/dist/prompts/build-rpa.js.map +1 -0
  62. package/dist/prompts/debug-execution.d.ts +3 -0
  63. package/dist/prompts/debug-execution.d.ts.map +1 -0
  64. package/dist/prompts/debug-execution.js +50 -0
  65. package/dist/prompts/debug-execution.js.map +1 -0
  66. package/dist/prompts/workflow-guide.d.ts +3 -0
  67. package/dist/prompts/workflow-guide.d.ts.map +1 -0
  68. package/dist/prompts/workflow-guide.js +175 -0
  69. package/dist/prompts/workflow-guide.js.map +1 -0
  70. package/dist/services.d.ts +61 -0
  71. package/dist/services.d.ts.map +1 -0
  72. package/dist/services.js +249 -0
  73. package/dist/services.js.map +1 -0
  74. package/dist/setup.d.ts +11 -0
  75. package/dist/setup.d.ts.map +1 -0
  76. package/dist/setup.js +790 -0
  77. package/dist/setup.js.map +1 -0
  78. package/dist/state.d.ts +23 -0
  79. package/dist/state.d.ts.map +1 -0
  80. package/dist/state.js +24 -0
  81. package/dist/state.js.map +1 -0
  82. package/dist/sync.d.ts +86 -0
  83. package/dist/sync.d.ts.map +1 -0
  84. package/dist/sync.js +394 -0
  85. package/dist/sync.js.map +1 -0
  86. package/dist/tools/browser.d.ts +3 -0
  87. package/dist/tools/browser.d.ts.map +1 -0
  88. package/dist/tools/browser.js +254 -0
  89. package/dist/tools/browser.js.map +1 -0
  90. package/dist/tools/config-stores.d.ts +3 -0
  91. package/dist/tools/config-stores.d.ts.map +1 -0
  92. package/dist/tools/config-stores.js +54 -0
  93. package/dist/tools/config-stores.js.map +1 -0
  94. package/dist/tools/core.d.ts +3 -0
  95. package/dist/tools/core.d.ts.map +1 -0
  96. package/dist/tools/core.js +202 -0
  97. package/dist/tools/core.js.map +1 -0
  98. package/dist/tools/cron.d.ts +3 -0
  99. package/dist/tools/cron.d.ts.map +1 -0
  100. package/dist/tools/cron.js +168 -0
  101. package/dist/tools/cron.js.map +1 -0
  102. package/dist/tools/elasticsearch.d.ts +3 -0
  103. package/dist/tools/elasticsearch.d.ts.map +1 -0
  104. package/dist/tools/elasticsearch.js +248 -0
  105. package/dist/tools/elasticsearch.js.map +1 -0
  106. package/dist/tools/issues.d.ts +3 -0
  107. package/dist/tools/issues.d.ts.map +1 -0
  108. package/dist/tools/issues.js +39 -0
  109. package/dist/tools/issues.js.map +1 -0
  110. package/dist/tools/stats.d.ts +3 -0
  111. package/dist/tools/stats.d.ts.map +1 -0
  112. package/dist/tools/stats.js +18 -0
  113. package/dist/tools/stats.js.map +1 -0
  114. package/dist/tools/sync-tools.d.ts +3 -0
  115. package/dist/tools/sync-tools.d.ts.map +1 -0
  116. package/dist/tools/sync-tools.js +121 -0
  117. package/dist/tools/sync-tools.js.map +1 -0
  118. package/dist/tools/vm-rpa.d.ts +3 -0
  119. package/dist/tools/vm-rpa.d.ts.map +1 -0
  120. package/dist/tools/vm-rpa.js +281 -0
  121. package/dist/tools/vm-rpa.js.map +1 -0
  122. package/dist/tools/vm.d.ts +3 -0
  123. package/dist/tools/vm.d.ts.map +1 -0
  124. package/dist/tools/vm.js +280 -0
  125. package/dist/tools/vm.js.map +1 -0
  126. package/dist/tools/workflow-ops.d.ts +3 -0
  127. package/dist/tools/workflow-ops.d.ts.map +1 -0
  128. package/dist/tools/workflow-ops.js +313 -0
  129. package/dist/tools/workflow-ops.js.map +1 -0
  130. package/dist/types.d.ts +14 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +5 -0
  133. package/dist/types.js.map +1 -0
  134. package/package.json +58 -0
@@ -0,0 +1,168 @@
1
+ import { z } from "zod";
2
+ import { ok, text, safe, NOT_CONFIGURED_CRON } from "../helpers.js";
3
+ function requireCron(deps) {
4
+ if (!deps.cronService())
5
+ return text(NOT_CONFIGURED_CRON);
6
+ return null;
7
+ }
8
+ export function register(deps) {
9
+ const { server } = deps;
10
+ server.tool("list_cron_jobs", "List all CRON jobs, optionally filtered by workflow. Requires CRON service to be configured.", {
11
+ workflowId: z
12
+ .string()
13
+ .optional()
14
+ .describe("Filter by workflow ID (omit for all jobs)"),
15
+ }, async ({ workflowId }) => {
16
+ const blocked = requireCron(deps);
17
+ if (blocked)
18
+ return blocked;
19
+ return safe(() => deps.cronService().listJobs(workflowId));
20
+ });
21
+ server.tool("get_cron_job", "Get details of a specific CRON job", { jobId: z.string().describe("CRON job ID") }, async ({ jobId }) => {
22
+ const blocked = requireCron(deps);
23
+ if (blocked)
24
+ return blocked;
25
+ return safe(() => deps.cronService().getJob(jobId));
26
+ });
27
+ server.tool("create_cron_job", "Create a new CRON job to run a workflow on a schedule", {
28
+ name: z.string().describe("Job name"),
29
+ schedule: z
30
+ .string()
31
+ .describe("CRON expression (e.g., '0 */30 * * * *' for every 30 min)"),
32
+ url: z
33
+ .string()
34
+ .describe("Workflow execution URL (e.g., https://api.laminar.run/workflow/execute/external/{id}?api_key=...)"),
35
+ body: z
36
+ .record(z.string(), z.any())
37
+ .optional()
38
+ .describe("JSON body to send with each execution"),
39
+ enabled: z.boolean().optional().describe("Start enabled (default true)"),
40
+ maxRuns: z
41
+ .number()
42
+ .optional()
43
+ .describe("Max number of runs (null for unlimited)"),
44
+ }, async ({ name, schedule, url, body, enabled, maxRuns }) => {
45
+ const blocked = requireCron(deps);
46
+ if (blocked)
47
+ return blocked;
48
+ return safe(() => deps.cronService().createJob({
49
+ name,
50
+ schedule,
51
+ url,
52
+ body,
53
+ enabled: enabled ?? true,
54
+ max_runs: maxRuns,
55
+ }));
56
+ });
57
+ server.tool("update_cron_job", "Update an existing CRON job (name, schedule, URL, body, enabled)", {
58
+ jobId: z.string().describe("CRON job ID"),
59
+ name: z.string().optional().describe("New name"),
60
+ schedule: z.string().optional().describe("New CRON schedule"),
61
+ url: z.string().optional().describe("New execution URL"),
62
+ body: z
63
+ .record(z.string(), z.any())
64
+ .optional()
65
+ .describe("New JSON body"),
66
+ enabled: z.boolean().optional().describe("Enable or disable"),
67
+ }, async ({ jobId, ...updates }) => {
68
+ const blocked = requireCron(deps);
69
+ if (blocked)
70
+ return blocked;
71
+ return safe(() => deps.cronService().updateJob(jobId, updates));
72
+ });
73
+ server.tool("toggle_cron_job", "Toggle a CRON job on/off", { jobId: z.string().describe("CRON job ID") }, async ({ jobId }) => {
74
+ const blocked = requireCron(deps);
75
+ if (blocked)
76
+ return blocked;
77
+ return safe(() => deps.cronService().toggleJob(jobId));
78
+ });
79
+ server.tool("trigger_cron_job", "Manually trigger a CRON job right now (runs it once immediately)", { jobId: z.string().describe("CRON job ID") }, async ({ jobId }) => {
80
+ const blocked = requireCron(deps);
81
+ if (blocked)
82
+ return blocked;
83
+ try {
84
+ await deps.cronService().triggerJob(jobId);
85
+ return text(`CRON job ${jobId} triggered successfully.`);
86
+ }
87
+ catch (e) {
88
+ return text(`Error: ${e.message}`);
89
+ }
90
+ });
91
+ server.tool("delete_cron_job", "Delete a CRON job", { jobId: z.string().describe("CRON job ID") }, async ({ jobId }) => {
92
+ const blocked = requireCron(deps);
93
+ if (blocked)
94
+ return blocked;
95
+ try {
96
+ await deps.cronService().deleteJob(jobId);
97
+ return text(`CRON job ${jobId} deleted.`);
98
+ }
99
+ catch (e) {
100
+ return text(`Error: ${e.message}`);
101
+ }
102
+ });
103
+ server.tool("schedule_retry", "Schedule automatic retries for a failed workflow execution. Creates a temporary CRON job that re-runs the workflow with the original input. Requires CRON service.", {
104
+ workflowId: z.number().describe("Workflow ID"),
105
+ executionId: z.number().describe("Failed execution ID to retry"),
106
+ schedule: z
107
+ .string()
108
+ .optional()
109
+ .describe("CRON schedule (default: every 30 min — '0 */30 * * * *')"),
110
+ maxAttempts: z
111
+ .number()
112
+ .optional()
113
+ .describe("Max retry attempts (default 3)"),
114
+ executionUrl: z
115
+ .string()
116
+ .describe("Workflow execution URL with API key (e.g., https://api.laminar.run/workflow/execute/external/{id}?api_key=...)"),
117
+ }, async ({ workflowId, executionId, schedule, maxAttempts, executionUrl }) => {
118
+ const blocked = requireCron(deps);
119
+ if (blocked)
120
+ return blocked;
121
+ try {
122
+ const exec = await deps
123
+ .client()
124
+ .getExecution(workflowId, executionId);
125
+ const flowRuns = exec?.flowRuns || [];
126
+ let inputData = {};
127
+ if (flowRuns.length > 0) {
128
+ const first = flowRuns[0];
129
+ if (first.transformation) {
130
+ try {
131
+ const t = typeof first.transformation === "string"
132
+ ? JSON.parse(first.transformation)
133
+ : first.transformation;
134
+ inputData = t?.input || t;
135
+ }
136
+ catch {
137
+ inputData = {};
138
+ }
139
+ }
140
+ }
141
+ const job = await deps.cronService().createJob({
142
+ name: `Retry: Workflow ${workflowId} (Exec #${executionId})`,
143
+ schedule: schedule || "0 */30 * * * *",
144
+ url: executionUrl,
145
+ body: {
146
+ ...inputData,
147
+ "lam.retryAttempt": true,
148
+ "lam.originalExecutionId": executionId,
149
+ "lam.retryReason": "mcp_scheduled_retry",
150
+ },
151
+ max_runs: maxAttempts || 3,
152
+ is_temporary: true,
153
+ enabled: true,
154
+ });
155
+ return ok({
156
+ message: "Retry scheduled",
157
+ jobId: job.id,
158
+ schedule: schedule || "0 */30 * * * *",
159
+ maxAttempts: maxAttempts || 3,
160
+ originalInput: inputData,
161
+ });
162
+ }
163
+ catch (e) {
164
+ return text(`Error: ${e.message}`);
165
+ }
166
+ });
167
+ }
168
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/tools/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDeps } from "../types.js";
2
+ export declare function register(deps: ToolDeps): void;
3
+ //# sourceMappingURL=elasticsearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elasticsearch.d.ts","sourceRoot":"","sources":["../../src/tools/elasticsearch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,QA6RtC"}
@@ -0,0 +1,248 @@
1
+ import { z } from "zod";
2
+ import { ok, text, NOT_CONFIGURED_ES } from "../helpers.js";
3
+ function requireES(deps) {
4
+ if (!deps.esService())
5
+ return text(NOT_CONFIGURED_ES);
6
+ return null;
7
+ }
8
+ export function register(deps) {
9
+ const { server } = deps;
10
+ server.tool("search_logs", "Full-text search across workflow execution logs, responses, programs, and transformations using Elasticsearch. Requires ES to be configured (see setup). Supports field syntax (status:FAILED), fuzzy search, date ranges, and raw ES queries.", {
11
+ workspaceId: z.string().describe("Workspace ID"),
12
+ query: z
13
+ .string()
14
+ .optional()
15
+ .describe("Search text. Supports field:value syntax, wildcards, boolean operators, exact phrases in quotes."),
16
+ workflowId: z
17
+ .string()
18
+ .optional()
19
+ .describe("Filter to a single workflow ID"),
20
+ workflowIds: z
21
+ .array(z.string())
22
+ .optional()
23
+ .describe("Filter to multiple workflow IDs"),
24
+ status: z
25
+ .string()
26
+ .optional()
27
+ .describe("Filter by status: SUCCESS, FAILED, RUNNING, etc."),
28
+ startDate: z.string().optional().describe("Start date (ISO 8601)"),
29
+ endDate: z.string().optional().describe("End date (ISO 8601)"),
30
+ fuzzy: z
31
+ .boolean()
32
+ .optional()
33
+ .describe("Enable fuzzy matching (default false)"),
34
+ includeGlobalObject: z
35
+ .boolean()
36
+ .optional()
37
+ .describe("Also search global workflow object — slower but more thorough"),
38
+ rawQuery: z
39
+ .string()
40
+ .optional()
41
+ .describe("Raw Elasticsearch JSON query (advanced mode)"),
42
+ size: z.number().optional().describe("Results per page (default 20)"),
43
+ from: z.number().optional().describe("Offset for pagination"),
44
+ }, async (params) => {
45
+ const blocked = requireES(deps);
46
+ if (blocked)
47
+ return blocked;
48
+ try {
49
+ const results = await deps.esService().search(params);
50
+ return ok(results);
51
+ }
52
+ catch (e) {
53
+ return text(`Error: ${e.message}`);
54
+ }
55
+ });
56
+ server.tool("search_across_workflows", "Search for a value (order ID, error message, customer name, etc.) across multiple workflows in a time range. Great for incident investigation — finds correlated failures. Requires ES to be configured.", {
57
+ workspaceId: z.string().describe("Workspace ID"),
58
+ query: z
59
+ .string()
60
+ .describe("What to search for (order ID, error message, entity name, etc.)"),
61
+ workflowIds: z
62
+ .array(z.string())
63
+ .optional()
64
+ .describe("Specific workflow IDs to search (omit to search ALL workflows)"),
65
+ startDate: z
66
+ .string()
67
+ .optional()
68
+ .describe("Start of time range (ISO 8601)"),
69
+ endDate: z
70
+ .string()
71
+ .optional()
72
+ .describe("End of time range (ISO 8601)"),
73
+ status: z
74
+ .string()
75
+ .optional()
76
+ .describe("Filter by status (e.g., FAILED)"),
77
+ size: z.number().optional().describe("Max results (default 50)"),
78
+ }, async ({ workspaceId, query, workflowIds, startDate, endDate, status, size }) => {
79
+ const blocked = requireES(deps);
80
+ if (blocked)
81
+ return blocked;
82
+ try {
83
+ const results = await deps.esService().search({
84
+ workspaceId,
85
+ query,
86
+ workflowIds,
87
+ startDate,
88
+ endDate,
89
+ status,
90
+ size: size || 50,
91
+ fuzzy: true,
92
+ includeGlobalObject: true,
93
+ });
94
+ const byWorkflow = new Map();
95
+ for (const hit of results.hits) {
96
+ const wId = hit.workflowId || "unknown";
97
+ if (!byWorkflow.has(wId))
98
+ byWorkflow.set(wId, []);
99
+ byWorkflow.get(wId).push(hit);
100
+ }
101
+ return ok({
102
+ total: results.total,
103
+ took: results.took,
104
+ query,
105
+ timeRange: { startDate, endDate },
106
+ byWorkflow: Object.fromEntries(byWorkflow),
107
+ warning: results.warning,
108
+ });
109
+ }
110
+ catch (e) {
111
+ return text(`Error: ${e.message}`);
112
+ }
113
+ });
114
+ server.tool("investigate_incident", "Investigate an incident across workflows. Finds all failures in a time window, correlates by shared data, and produces a timeline. Works with or without Elasticsearch — ES gives full-text search, without ES falls back to API-based execution listing.", {
115
+ workspaceId: z.number().describe("Workspace ID"),
116
+ workflowIds: z.array(z.number()).describe("Workflow IDs to investigate"),
117
+ startDate: z
118
+ .string()
119
+ .optional()
120
+ .describe("Start of incident window (ISO 8601)"),
121
+ endDate: z
122
+ .string()
123
+ .optional()
124
+ .describe("End of incident window (ISO 8601)"),
125
+ keywords: z
126
+ .array(z.string())
127
+ .optional()
128
+ .describe("Search terms to correlate (order IDs, error messages, etc.)"),
129
+ status: z
130
+ .string()
131
+ .optional()
132
+ .describe("Filter status (default: FAILED)"),
133
+ }, async ({ workspaceId, workflowIds, startDate, endDate, keywords, status }) => {
134
+ try {
135
+ const filterStatus = status || "FAILED";
136
+ const es = deps.esService();
137
+ if (es && keywords?.length) {
138
+ const searchPromises = keywords.map((kw) => es.search({
139
+ workspaceId: String(workspaceId),
140
+ query: kw,
141
+ workflowIds: workflowIds.map(String),
142
+ startDate,
143
+ endDate,
144
+ status: filterStatus,
145
+ size: 20,
146
+ fuzzy: true,
147
+ includeGlobalObject: true,
148
+ }));
149
+ const searchResults = await Promise.all(searchPromises);
150
+ const allHits = [];
151
+ const seen = new Set();
152
+ for (let i = 0; i < searchResults.length; i++) {
153
+ for (const hit of searchResults[i].hits) {
154
+ if (!seen.has(hit.id)) {
155
+ seen.add(hit.id);
156
+ allHits.push({
157
+ ...hit,
158
+ matchedKeyword: keywords[i],
159
+ });
160
+ }
161
+ }
162
+ }
163
+ allHits.sort((a, b) => new Date(a.startedAt || 0).getTime() -
164
+ new Date(b.startedAt || 0).getTime());
165
+ return ok({
166
+ mode: "elasticsearch",
167
+ totalMatches: allHits.length,
168
+ keywords,
169
+ timeline: allHits.map((h) => ({
170
+ time: h.startedAt,
171
+ workflowId: h.workflowId,
172
+ workflowName: h.workflowName,
173
+ executionId: h.executionId,
174
+ status: h.status,
175
+ matchedKeyword: h.matchedKeyword,
176
+ score: h.score,
177
+ })),
178
+ });
179
+ }
180
+ // API-based fallback
181
+ const client = deps.client();
182
+ const allExecs = [];
183
+ await Promise.all(workflowIds.map(async (wId) => {
184
+ try {
185
+ const workflow = await client.getWorkflow(wId);
186
+ const execs = await client.listExecutions(wId, {
187
+ startDate,
188
+ endDate,
189
+ status: filterStatus,
190
+ size: 20,
191
+ });
192
+ const list = execs?.content || execs || [];
193
+ for (const exec of Array.isArray(list) ? list : []) {
194
+ allExecs.push({
195
+ workflowId: wId,
196
+ workflowName: workflow.name,
197
+ ...exec,
198
+ });
199
+ }
200
+ }
201
+ catch { }
202
+ }));
203
+ allExecs.sort((a, b) => new Date(a.startedAt || 0).getTime() -
204
+ new Date(b.startedAt || 0).getTime());
205
+ const diagnosed = await Promise.all(allExecs.slice(0, 10).map(async (exec) => {
206
+ try {
207
+ const full = await client.getExecution(exec.workflowId, exec.id);
208
+ const failedSteps = (full.flowRuns || []).filter((r) => r.status === "FAILED");
209
+ return {
210
+ time: exec.startedAt,
211
+ workflowId: exec.workflowId,
212
+ workflowName: exec.workflowName,
213
+ executionId: exec.id,
214
+ status: exec.status,
215
+ failedSteps: failedSteps.map((f) => ({
216
+ step: f.executionOrder,
217
+ name: f.flowName,
218
+ error: f.executionLog?.substring(0, 500) ||
219
+ (typeof f.response === "string"
220
+ ? f.response.substring(0, 500)
221
+ : JSON.stringify(f.response)?.substring(0, 500)),
222
+ })),
223
+ };
224
+ }
225
+ catch {
226
+ return {
227
+ time: exec.startedAt,
228
+ workflowId: exec.workflowId,
229
+ workflowName: exec.workflowName,
230
+ executionId: exec.id,
231
+ status: exec.status,
232
+ failedSteps: [],
233
+ };
234
+ }
235
+ }));
236
+ return ok({
237
+ mode: "api",
238
+ hint: "Configure Elasticsearch for keyword-based correlation search",
239
+ totalFailures: allExecs.length,
240
+ timeline: diagnosed,
241
+ });
242
+ }
243
+ catch (e) {
244
+ return text(`Error: ${e.message}`);
245
+ }
246
+ });
247
+ }
248
+ //# sourceMappingURL=elasticsearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elasticsearch.js","sourceRoot":"","sources":["../../src/tools/elasticsearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDeps } from "../types.js";
2
+ export declare function register(deps: ToolDeps): void;
3
+ //# sourceMappingURL=issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,QAwEtC"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { safe } from "../helpers.js";
3
+ export function register(deps) {
4
+ const { server } = deps;
5
+ server.tool("list_issues", "List all issues in a workspace", { workspaceId: z.number().describe("Workspace ID") }, async ({ workspaceId }) => safe(() => deps.client().listIssues(workspaceId)));
6
+ server.tool("get_issue", "Get issue details", {
7
+ workspaceId: z.number().describe("Workspace ID"),
8
+ issueId: z.number().describe("Issue ID"),
9
+ }, async ({ workspaceId, issueId }) => safe(() => deps.client().getIssue(workspaceId, issueId)));
10
+ server.tool("create_issue", "Create a new issue in a workspace", {
11
+ workspaceId: z.number().describe("Workspace ID"),
12
+ title: z.string().describe("Issue title"),
13
+ description: z.string().describe("Issue description"),
14
+ assignedUserId: z
15
+ .number()
16
+ .optional()
17
+ .describe("User ID to assign the issue to"),
18
+ }, async ({ workspaceId, title, description, assignedUserId }) => safe(() => deps.client().createIssue(workspaceId, {
19
+ title,
20
+ description,
21
+ assignedUserId,
22
+ })));
23
+ server.tool("update_issue", "Update an existing issue (title, description, status, assignee)", {
24
+ workspaceId: z.number().describe("Workspace ID"),
25
+ issueId: z.number().describe("Issue ID"),
26
+ title: z.string().optional().describe("New title"),
27
+ description: z.string().optional().describe("New description"),
28
+ status: z
29
+ .enum(["OPEN", "IN_PROGRESS", "BLOCKED", "REVIEW", "DONE", "CLOSED"])
30
+ .optional()
31
+ .describe("New status"),
32
+ assignedUserId: z.number().optional().describe("New assignee user ID"),
33
+ }, async ({ workspaceId, issueId, ...data }) => safe(() => deps.client().updateIssue(workspaceId, issueId, data)));
34
+ server.tool("delete_issue", "Delete an issue", {
35
+ workspaceId: z.number().describe("Workspace ID"),
36
+ issueId: z.number().describe("Issue ID"),
37
+ }, async ({ workspaceId, issueId }) => safe(() => deps.client().deleteIssue(workspaceId, issueId)));
38
+ }
39
+ //# sourceMappingURL=issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDeps } from "../types.js";
2
+ export declare function register(deps: ToolDeps): void;
3
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,QAmCtC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { safe } from "../helpers.js";
3
+ export function register(deps) {
4
+ const { server } = deps;
5
+ server.tool("get_flow_stats", "Get flow execution statistics for a workspace (total runs, success rate, avg duration, etc.)", {
6
+ workspaceId: z.number().describe("Workspace ID"),
7
+ days: z
8
+ .number()
9
+ .optional()
10
+ .describe("Number of days to look back (default 7)"),
11
+ }, async ({ workspaceId, days }) => safe(() => deps.client().getFlowStats(workspaceId, days)));
12
+ server.tool("get_recent_flow_runs", "Get recent flow runs across all workflows in a workspace", {
13
+ workspaceId: z.number().describe("Workspace ID"),
14
+ limit: z.number().optional().describe("Max results (default 10)"),
15
+ }, async ({ workspaceId, limit }) => safe(() => deps.client().getRecentFlowRuns(workspaceId, limit)));
16
+ server.tool("list_api_keys", "List API keys in a workspace", { workspaceId: z.number().describe("Workspace ID") }, async ({ workspaceId }) => safe(() => deps.client().listApiKeys(workspaceId)));
17
+ }
18
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,MAAM,UAAU,QAAQ,CAAC,IAAc;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8FAA8F,EAC9F;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChD,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,yCAAyC,CAAC;KACvD,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CAC9B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAC5D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,0DAA0D,EAC1D;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAClE,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAClE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8BAA8B,EAC9B,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EACpD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CACxB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDeps } from "../types.js";
2
+ export declare function register(deps: ToolDeps): void;
3
+ //# sourceMappingURL=sync-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-tools.d.ts","sourceRoot":"","sources":["../../src/tools/sync-tools.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,QAkKtC"}