@minicor/mcp-server 2.0.8 → 3.1.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 (103) hide show
  1. package/README.md +29 -2
  2. package/dist/__tests__/state.test.d.ts +2 -0
  3. package/dist/__tests__/state.test.d.ts.map +1 -0
  4. package/dist/__tests__/state.test.js +116 -0
  5. package/dist/__tests__/state.test.js.map +1 -0
  6. package/dist/__tests__/vm-service-client.test.d.ts +2 -0
  7. package/dist/__tests__/vm-service-client.test.d.ts.map +1 -0
  8. package/dist/__tests__/vm-service-client.test.js +80 -0
  9. package/dist/__tests__/vm-service-client.test.js.map +1 -0
  10. package/dist/agent-service-client.d.ts +34 -0
  11. package/dist/agent-service-client.d.ts.map +1 -0
  12. package/dist/agent-service-client.js +64 -0
  13. package/dist/agent-service-client.js.map +1 -0
  14. package/dist/helpers.d.ts +1 -1
  15. package/dist/helpers.d.ts.map +1 -1
  16. package/dist/helpers.js +1 -1
  17. package/dist/helpers.js.map +1 -1
  18. package/dist/index.d.ts +5 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +111 -44
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib.d.ts +10 -2
  23. package/dist/lib.d.ts.map +1 -1
  24. package/dist/lib.js +55 -6
  25. package/dist/lib.js.map +1 -1
  26. package/dist/prompts/build-rpa.d.ts.map +1 -1
  27. package/dist/prompts/build-rpa.js +39 -5
  28. package/dist/prompts/build-rpa.js.map +1 -1
  29. package/dist/prompts/debug-execution.d.ts.map +1 -1
  30. package/dist/prompts/debug-execution.js +5 -3
  31. package/dist/prompts/debug-execution.js.map +1 -1
  32. package/dist/setup.js +86 -32
  33. package/dist/setup.js.map +1 -1
  34. package/dist/state.d.ts +14 -0
  35. package/dist/state.d.ts.map +1 -1
  36. package/dist/state.js +20 -0
  37. package/dist/state.js.map +1 -1
  38. package/dist/tools/{stats.d.ts → agents.d.ts} +1 -1
  39. package/dist/tools/agents.d.ts.map +1 -0
  40. package/dist/tools/agents.js +92 -0
  41. package/dist/tools/agents.js.map +1 -0
  42. package/dist/tools/config-stores.d.ts.map +1 -1
  43. package/dist/tools/config-stores.js +59 -11
  44. package/dist/tools/config-stores.js.map +1 -1
  45. package/dist/tools/core.d.ts.map +1 -1
  46. package/dist/tools/core.js +141 -33
  47. package/dist/tools/core.js.map +1 -1
  48. package/dist/tools/issues.d.ts.map +1 -1
  49. package/dist/tools/issues.js +51 -16
  50. package/dist/tools/issues.js.map +1 -1
  51. package/dist/tools/sync-tools.d.ts.map +1 -1
  52. package/dist/tools/sync-tools.js +29 -12
  53. package/dist/tools/sync-tools.js.map +1 -1
  54. package/dist/tools/tfa.d.ts.map +1 -1
  55. package/dist/tools/tfa.js +42 -22
  56. package/dist/tools/tfa.js.map +1 -1
  57. package/dist/tools/vm-rpa.d.ts.map +1 -1
  58. package/dist/tools/vm-rpa.js +15 -7
  59. package/dist/tools/vm-rpa.js.map +1 -1
  60. package/dist/tools/vm.d.ts.map +1 -1
  61. package/dist/tools/vm.js +380 -12
  62. package/dist/tools/vm.js.map +1 -1
  63. package/dist/tools/workflow-ops.d.ts.map +1 -1
  64. package/dist/tools/workflow-ops.js +46 -30
  65. package/dist/tools/workflow-ops.js.map +1 -1
  66. package/dist/types.d.ts +8 -2
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/vm-service-client.d.ts +24 -0
  69. package/dist/vm-service-client.d.ts.map +1 -0
  70. package/dist/vm-service-client.js +23 -0
  71. package/dist/vm-service-client.js.map +1 -0
  72. package/package.json +2 -2
  73. package/dist/browser-client.d.ts +0 -42
  74. package/dist/browser-client.d.ts.map +0 -1
  75. package/dist/browser-client.js +0 -66
  76. package/dist/browser-client.js.map +0 -1
  77. package/dist/prompts/build-browser-rpa.d.ts +0 -3
  78. package/dist/prompts/build-browser-rpa.d.ts.map +0 -1
  79. package/dist/prompts/build-browser-rpa.js +0 -90
  80. package/dist/prompts/build-browser-rpa.js.map +0 -1
  81. package/dist/prompts/build-nerve-rpa.d.ts +0 -3
  82. package/dist/prompts/build-nerve-rpa.d.ts.map +0 -1
  83. package/dist/prompts/build-nerve-rpa.js +0 -148
  84. package/dist/prompts/build-nerve-rpa.js.map +0 -1
  85. package/dist/services.d.ts +0 -61
  86. package/dist/services.d.ts.map +0 -1
  87. package/dist/services.js +0 -249
  88. package/dist/services.js.map +0 -1
  89. package/dist/tools/browser.d.ts +0 -3
  90. package/dist/tools/browser.d.ts.map +0 -1
  91. package/dist/tools/browser.js +0 -254
  92. package/dist/tools/browser.js.map +0 -1
  93. package/dist/tools/cron.d.ts +0 -3
  94. package/dist/tools/cron.d.ts.map +0 -1
  95. package/dist/tools/cron.js +0 -168
  96. package/dist/tools/cron.js.map +0 -1
  97. package/dist/tools/elasticsearch.d.ts +0 -3
  98. package/dist/tools/elasticsearch.d.ts.map +0 -1
  99. package/dist/tools/elasticsearch.js +0 -248
  100. package/dist/tools/elasticsearch.js.map +0 -1
  101. package/dist/tools/stats.d.ts.map +0 -1
  102. package/dist/tools/stats.js +0 -18
  103. package/dist/tools/stats.js.map +0 -1
package/dist/index.js CHANGED
@@ -4,6 +4,9 @@
4
4
  *
5
5
  * Brings your Minicor workspace into Cursor / Claude Code.
6
6
  * Build, deploy, and debug VM-based automations from your IDE.
7
+ *
8
+ * Supports simultaneous US and CA region connections — each region
9
+ * gets its own stored credentials and LaminarClient instance.
7
10
  */
8
11
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
12
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
@@ -18,42 +21,64 @@ import { register as registerSyncTools } from "./tools/sync-tools.js";
18
21
  import { register as registerVm } from "./tools/vm.js";
19
22
  import { register as registerVmRpa } from "./tools/vm-rpa.js";
20
23
  import { register as registerTfa } from "./tools/tfa.js";
24
+ import { register as registerIssues } from "./tools/issues.js";
25
+ import { register as registerAgents } from "./tools/agents.js";
21
26
  import { register as registerWorkflowGuide } from "./prompts/workflow-guide.js";
22
27
  import { register as registerDebugExecution } from "./prompts/debug-execution.js";
23
28
  import { register as registerBuildRpa } from "./prompts/build-rpa.js";
24
29
  import { register as registerTfaGuide } from "./prompts/tfa-guide.js";
25
30
  // ─── Token management ────────────────────────────────────────
26
31
  const REFRESH_BUFFER_MS = 5 * 60 * 1000;
32
+ /**
33
+ * Read and normalize stored tokens into multi-region format.
34
+ * Handles backward-compat with old flat single-region format.
35
+ */
27
36
  function readStoredTokens() {
28
37
  try {
29
38
  const tokenPath = getTokenPath();
30
39
  if (!fs.existsSync(tokenPath))
31
- return null;
32
- return JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
40
+ return {};
41
+ const raw = JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
42
+ if (raw.us || raw.ca) {
43
+ return raw;
44
+ }
45
+ if (raw.access_token) {
46
+ const region = raw.region || apiBaseToRegion(raw.api_base || "");
47
+ return { [region]: raw };
48
+ }
49
+ return {};
33
50
  }
34
51
  catch {
35
- return null;
52
+ return {};
36
53
  }
37
54
  }
38
- function writeStoredTokens(tokens) {
55
+ function readRegionTokens(region) {
56
+ return readStoredTokens()[region] ?? null;
57
+ }
58
+ function writeRegionTokens(region, tokens) {
39
59
  const writePath = getWriteTokenPath();
40
60
  const dir = path.dirname(writePath);
41
61
  if (!fs.existsSync(dir))
42
62
  fs.mkdirSync(dir, { recursive: true });
43
- fs.writeFileSync(writePath, JSON.stringify(tokens, null, 2) + "\n", {
63
+ const existing = readStoredTokens();
64
+ existing[region] = tokens;
65
+ fs.writeFileSync(writePath, JSON.stringify(existing, null, 2) + "\n", {
44
66
  mode: 0o600,
45
67
  });
46
68
  }
47
- export function getApiBase() {
48
- const stored = readStoredTokens();
49
- if (stored?.region)
50
- return regionToApiBase(stored.region);
51
- if (stored?.api_base)
52
- return stored.api_base;
69
+ export function getApiBase(region) {
70
+ if (region)
71
+ return regionToApiBase(region);
72
+ const all = readStoredTokens();
73
+ const first = all.us ?? all.ca;
74
+ if (first?.region)
75
+ return regionToApiBase(first.region);
76
+ if (first?.api_base)
77
+ return first.api_base;
53
78
  return regionToApiBase("us");
54
79
  }
55
- async function refreshAccessToken(refreshToken) {
56
- const base = getApiBase();
80
+ async function refreshAccessToken(region, refreshToken) {
81
+ const base = regionToApiBase(region);
57
82
  try {
58
83
  const res = await fetch(`${base}/auth/refresh`, {
59
84
  method: "POST",
@@ -68,62 +93,80 @@ async function refreshAccessToken(refreshToken) {
68
93
  refresh_token: data.refresh_token || refreshToken,
69
94
  expires_at: Date.now() + data.expires_in * 1000,
70
95
  api_base: base,
71
- region: apiBaseToRegion(base),
96
+ region,
72
97
  };
73
98
  }
74
99
  catch {
75
100
  return null;
76
101
  }
77
102
  }
78
- async function getValidToken() {
79
- const tokens = readStoredTokens();
103
+ async function getValidToken(region) {
104
+ const tokens = readRegionTokens(region);
80
105
  if (!tokens)
81
- throw new Error("No stored tokens");
106
+ throw new Error(`No stored tokens for region ${region}`);
82
107
  if (Date.now() < tokens.expires_at - REFRESH_BUFFER_MS) {
83
108
  return tokens.access_token;
84
109
  }
85
110
  if (tokens.refresh_token) {
86
- console.error("Refreshing access token...");
87
- const refreshed = await refreshAccessToken(tokens.refresh_token);
111
+ console.error(`Refreshing ${region.toUpperCase()} access token...`);
112
+ const refreshed = await refreshAccessToken(region, tokens.refresh_token);
88
113
  if (refreshed) {
89
- writeStoredTokens(refreshed);
90
- console.error("Token refreshed.");
114
+ writeRegionTokens(region, refreshed);
115
+ console.error(`${region.toUpperCase()} token refreshed.`);
91
116
  return refreshed.access_token;
92
117
  }
93
118
  }
94
- console.error("Warning: Token expired and refresh failed. Run `minicor-mcp-setup` to re-authenticate.");
119
+ console.error(`Warning: ${region.toUpperCase()} token expired and refresh failed. Run \`minicor-mcp-setup\` to re-authenticate.`);
95
120
  return tokens.access_token;
96
121
  }
97
- // ─── Resolve auth ────────────────────────────────────────────
98
- async function resolveAuth() {
99
- const stored = readStoredTokens();
100
- if (stored) {
101
- const token = await getValidToken();
102
- return { auth: { type: "bearer", token }, baseUrl: getApiBase() };
122
+ const DEFAULT_VM_SERVICE_URL = "https://lam-vm-service-ernfuwetfa-uc.a.run.app";
123
+ function getVmServiceBase() {
124
+ return process.env.VM_MANAGER_API_URL || DEFAULT_VM_SERVICE_URL;
125
+ }
126
+ async function resolveAllAuth() {
127
+ const allTokens = readStoredTokens();
128
+ const results = [];
129
+ for (const r of ["us", "ca"]) {
130
+ const t = allTokens[r];
131
+ if (!t)
132
+ continue;
133
+ try {
134
+ const token = await getValidToken(r);
135
+ results.push({
136
+ region: r,
137
+ auth: { type: "bearer", token },
138
+ baseUrl: regionToApiBase(r),
139
+ });
140
+ }
141
+ catch {
142
+ // skip region if tokens are invalid
143
+ }
103
144
  }
104
- return null;
145
+ return results;
105
146
  }
106
147
  // ─── Server state ────────────────────────────────────────────
107
- let client;
148
+ const clients = new Map();
149
+ const currentTokens = new Map();
108
150
  const server = new McpServer({
109
151
  name: "minicor",
110
152
  version: "3.0.0",
111
153
  });
112
- function scheduleTokenRefresh() {
113
- const tokens = readStoredTokens();
154
+ function scheduleTokenRefresh(region) {
155
+ const tokens = readRegionTokens(region);
114
156
  if (!tokens?.refresh_token)
115
157
  return;
116
158
  const msUntilRefresh = Math.max(tokens.expires_at - REFRESH_BUFFER_MS - Date.now(), 60_000);
117
159
  setTimeout(async () => {
118
160
  try {
119
- const token = await getValidToken();
120
- client = new LaminarClient({ type: "bearer", token }, getApiBase());
121
- console.error("Token auto-refreshed, client updated.");
161
+ const token = await getValidToken(region);
162
+ clients.set(region, new LaminarClient({ type: "bearer", token }, regionToApiBase(region)));
163
+ currentTokens.set(region, token);
164
+ console.error(`${region.toUpperCase()} token auto-refreshed, client updated.`);
122
165
  }
123
166
  catch (e) {
124
- console.error("Auto-refresh failed:", e.message);
167
+ console.error(`${region.toUpperCase()} auto-refresh failed:`, e.message);
125
168
  }
126
- scheduleTokenRefresh();
169
+ scheduleTokenRefresh(region);
127
170
  }, msUntilRefresh);
128
171
  }
129
172
  // ─── Unauthenticated mode ────────────────────────────────────
@@ -142,11 +185,28 @@ function registerUnauthenticated() {
142
185
  }));
143
186
  }
144
187
  // ─── Register all tools and prompts ──────────────────────────
188
+ function getDefaultRegion() {
189
+ if (clients.has("us"))
190
+ return "us";
191
+ if (clients.has("ca"))
192
+ return "ca";
193
+ return "us";
194
+ }
145
195
  function registerAll() {
146
196
  const deps = {
147
197
  server,
148
- client: () => client,
149
- getApiBase,
198
+ client: (region) => {
199
+ const r = region ?? getDefaultRegion();
200
+ const c = clients.get(r);
201
+ if (!c) {
202
+ throw new Error(`Not authenticated for ${r.toUpperCase()} region. Run \`minicor-mcp-setup\` to add credentials for this region.`);
203
+ }
204
+ return c;
205
+ },
206
+ getApiBase: (region) => regionToApiBase(region ?? getDefaultRegion()),
207
+ getVmServiceBase,
208
+ getAuthToken: (region) => currentTokens.get(region ?? getDefaultRegion()) ?? "",
209
+ availableRegions: () => [...clients.keys()],
150
210
  };
151
211
  registerCore(deps);
152
212
  registerWorkflowOps(deps);
@@ -155,6 +215,8 @@ function registerAll() {
155
215
  registerVm(deps);
156
216
  registerVmRpa(deps);
157
217
  registerTfa(deps);
218
+ registerIssues(deps);
219
+ registerAgents(deps);
158
220
  registerWorkflowGuide(deps);
159
221
  registerDebugExecution(deps);
160
222
  registerBuildRpa(deps);
@@ -162,19 +224,24 @@ function registerAll() {
162
224
  }
163
225
  // ─── Main ────────────────────────────────────────────────────
164
226
  async function main() {
165
- const authResult = await resolveAuth();
166
- if (!authResult) {
227
+ const authResults = await resolveAllAuth();
228
+ if (authResults.length === 0) {
167
229
  console.error("No credentials found. Starting in limited mode.");
168
230
  registerUnauthenticated();
169
231
  }
170
232
  else {
171
- client = new LaminarClient(authResult.auth, authResult.baseUrl);
172
- scheduleTokenRefresh();
233
+ for (const { region, auth, baseUrl } of authResults) {
234
+ clients.set(region, new LaminarClient(auth, baseUrl));
235
+ currentTokens.set(region, auth.token);
236
+ scheduleTokenRefresh(region);
237
+ }
238
+ const regions = authResults.map((a) => a.region.toUpperCase()).join(" + ");
239
+ console.error(`Authenticated regions: ${regions}`);
173
240
  registerAll();
174
241
  }
175
242
  const transport = new StdioServerTransport();
176
243
  await server.connect(transport);
177
- console.error(authResult
244
+ console.error(authResults.length > 0
178
245
  ? "Minicor MCP server running on stdio"
179
246
  : "Minicor MCP server running (limited mode — run minicor-mcp-setup to authenticate)");
180
247
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/lib.d.ts CHANGED
@@ -15,11 +15,19 @@
15
15
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
16
16
  import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
17
17
  import { type LaminarAuth } from "./laminar-client.js";
18
+ import { type Region } from "./paths.js";
18
19
  export interface MinicorServerOptions {
19
- /** Bearer token for Laminar API access. If omitted, workflow/config tools will fail gracefully but VM tools still work. */
20
+ /** Single-region auth (backward compat). If provided, used for the default region. */
20
21
  auth?: LaminarAuth;
21
- /** Laminar API base URL (e.g. "https://api.laminar.run"). */
22
+ /** Single-region base URL (backward compat). */
22
23
  baseUrl?: string;
24
+ /** Per-region auth for multi-region support. Takes precedence over auth/baseUrl. */
25
+ regionAuth?: Partial<Record<Region, {
26
+ auth: LaminarAuth;
27
+ baseUrl?: string;
28
+ }>>;
29
+ /** VM Manager service base URL. Defaults to the Cloud Run instance. */
30
+ vmServiceBaseUrl?: string;
23
31
  }
24
32
  /**
25
33
  * Create and connect a Minicor MCP server on the given transport.
package/dist/lib.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgBtE,MAAM,WAAW,oBAAoB;IACnC,2HAA2H;IAC3H,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CA4B5D;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAoB1D,MAAM,WAAW,oBAAoB;IACnC,sFAAsF;IACtF,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC9E,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAqBD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAyE5D;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
package/dist/lib.js CHANGED
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
16
16
  import { LaminarClient } from "./laminar-client.js";
17
+ import { regionToApiBase } from "./paths.js";
17
18
  import { register as registerCore } from "./tools/core.js";
18
19
  import { register as registerWorkflowOps } from "./tools/workflow-ops.js";
19
20
  import { register as registerConfigStores } from "./tools/config-stores.js";
@@ -21,10 +22,13 @@ import { register as registerSyncTools } from "./tools/sync-tools.js";
21
22
  import { register as registerVm } from "./tools/vm.js";
22
23
  import { register as registerVmRpa } from "./tools/vm-rpa.js";
23
24
  import { register as registerTfa } from "./tools/tfa.js";
25
+ import { register as registerIssues } from "./tools/issues.js";
26
+ import { register as registerAgents } from "./tools/agents.js";
24
27
  import { register as registerWorkflowGuide } from "./prompts/workflow-guide.js";
25
28
  import { register as registerDebugExecution } from "./prompts/debug-execution.js";
26
29
  import { register as registerBuildRpa } from "./prompts/build-rpa.js";
27
30
  import { register as registerTfaGuide } from "./prompts/tfa-guide.js";
31
+ const DEFAULT_VM_SERVICE_URL = "https://lam-vm-service-ernfuwetfa-uc.a.run.app";
28
32
  function registerAllTools(deps) {
29
33
  registerCore(deps);
30
34
  registerWorkflowOps(deps);
@@ -33,6 +37,8 @@ function registerAllTools(deps) {
33
37
  registerVm(deps);
34
38
  registerVmRpa(deps);
35
39
  registerTfa(deps);
40
+ registerIssues(deps);
41
+ registerAgents(deps);
36
42
  registerWorkflowGuide(deps);
37
43
  registerDebugExecution(deps);
38
44
  registerBuildRpa(deps);
@@ -45,14 +51,57 @@ const DEFAULT_BASE_URL = "https://api.laminar.run";
45
51
  */
46
52
  export async function createMinicorServer(transport, opts = {}) {
47
53
  const server = new McpServer({ name: "minicor", version: "3.0.0" });
48
- const baseUrl = opts.baseUrl || DEFAULT_BASE_URL;
49
- const client = opts.auth
50
- ? new LaminarClient(opts.auth, baseUrl)
51
- : new LaminarClient({ type: "bearer", token: "" }, baseUrl);
54
+ const clients = new Map();
55
+ const tokens = new Map();
56
+ const baseUrls = new Map();
57
+ if (opts.regionAuth) {
58
+ for (const [r, cfg] of Object.entries(opts.regionAuth)) {
59
+ if (!cfg)
60
+ continue;
61
+ const base = cfg.baseUrl || regionToApiBase(r);
62
+ clients.set(r, new LaminarClient(cfg.auth, base));
63
+ tokens.set(r, cfg.auth.token);
64
+ baseUrls.set(r, base);
65
+ }
66
+ }
67
+ if (clients.size === 0 && opts.auth) {
68
+ const baseUrl = opts.baseUrl || DEFAULT_BASE_URL;
69
+ const region = baseUrl.includes("ca.api") ? "ca" : "us";
70
+ clients.set(region, new LaminarClient(opts.auth, baseUrl));
71
+ tokens.set(region, opts.auth.token);
72
+ baseUrls.set(region, baseUrl);
73
+ }
74
+ if (clients.size === 0) {
75
+ const baseUrl = opts.baseUrl || DEFAULT_BASE_URL;
76
+ clients.set("us", new LaminarClient({ type: "bearer", token: "" }, baseUrl));
77
+ tokens.set("us", "");
78
+ baseUrls.set("us", baseUrl);
79
+ }
80
+ const vmServiceBase = opts.vmServiceBaseUrl || process.env.VM_MANAGER_API_URL || DEFAULT_VM_SERVICE_URL;
81
+ function getDefaultRegion() {
82
+ if (clients.has("us"))
83
+ return "us";
84
+ if (clients.has("ca"))
85
+ return "ca";
86
+ return "us";
87
+ }
52
88
  const deps = {
53
89
  server,
54
- client: () => client,
55
- getApiBase: () => baseUrl,
90
+ client: (region) => {
91
+ const r = region ?? getDefaultRegion();
92
+ const c = clients.get(r);
93
+ if (!c) {
94
+ throw new Error(`No client configured for ${r.toUpperCase()} region.`);
95
+ }
96
+ return c;
97
+ },
98
+ getApiBase: (region) => {
99
+ const r = region ?? getDefaultRegion();
100
+ return baseUrls.get(r) ?? regionToApiBase(r);
101
+ },
102
+ getVmServiceBase: () => vmServiceBase,
103
+ getAuthToken: (region) => tokens.get(region ?? getDefaultRegion()) ?? "",
104
+ availableRegions: () => [...clients.keys()],
56
105
  };
57
106
  registerAllTools(deps);
58
107
  await server.connect(transport);
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAoB,MAAM,qBAAqB,CAAC;AAGtE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAStE,SAAS,gBAAgB,CAAC,IAAc;IACtC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,UAAU,CAAC,IAAI,CAAC,CAAC;IACjB,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,WAAW,CAAC,IAAI,CAAC,CAAC;IAElB,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7B,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvB,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAoB,EACpB,OAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAC;IAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI;QACtB,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QACvC,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAE9D,MAAM,IAAI,GAAa;QACrB,MAAM;QACN,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;QACpB,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;KAC1B,CAAC;IAEF,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO;QACL,MAAM;QACN,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB;YACtB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"build-rpa.d.ts","sourceRoot":"","sources":["../../src/prompts/build-rpa.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,QAmT5C"}
1
+ {"version":3,"file":"build-rpa.d.ts","sourceRoot":"","sources":["../../src/prompts/build-rpa.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,QAqV5C"}
@@ -173,7 +173,10 @@ Before writing any automation:
173
173
  - \`vm_screenshot\` immediately after
174
174
  - If result is wrong, go back to (b)
175
175
 
176
- **e. SAVE — Call \`create_rpa_flow\` (only after c + d pass)**
176
+ **e. SAVE — Call \`create_rpa_flow\` (only after c + d pass) — then test it through Minicor individually**
177
+ - After saving, run \`execute_workflow_async\` with \`start_from_step\`/\`end_at_step\` to isolate this step
178
+ - Poll \`get_execution_status\`, then \`vm_screenshot\` to verify the Minicor-executed result
179
+ - Only proceed to the next step once this one passes through the real executor
177
180
  - Pass the validated Python script, step name, description, flowId, and executionOrder
178
181
  - The tool handles all JS wrapping automatically
179
182
  - For browser/CDP automations: set \`dispatchPattern: "browser"\` — routes to \`/execute/browser\` (parallel-safe)
@@ -215,10 +218,11 @@ mrn = data.input.mrn # WRONG — data object doesn't exist in Python
215
218
  - \`data.input\` interpolation only works through the JS wrapper
216
219
  - Step-to-step data flow (\`data.step_N\`) only works in the real executor
217
220
 
218
- **After saving ALL steps, you MUST test through Minicor:**
221
+ **After saving ALL steps, you MUST test end-to-end through Minicor:**
219
222
 
220
- a. \`execute_workflow\` with **real input data** and a **configurationId** pointing to the correct config store
221
- b. If a step fails \`diagnose_execution\` to identify the issue
223
+ a. \`execute_workflow_async\` with **real input data** and a **configurationId** use async so you can monitor
224
+ a2. Poll \`get_execution_status\` every 5-10s and take \`vm_screenshot\` at intervals to observe progress
225
+ b. If a step fails → \`diagnose_execution\` + \`vm_screenshot\` to identify the issue
222
226
  c. Use \`test_workflow_step\` to re-run individual failing steps through Minicor (NOT \`vm_execute_script\`)
223
227
  d. Fix with \`update_flow\`, then re-test through \`execute_workflow\` again
224
228
  e. Iterate until the **full workflow passes end-to-end** through \`execute_workflow\`
@@ -229,6 +233,21 @@ e. Iterate until the **full workflow passes end-to-end** through \`execute_workf
229
233
  - Present completed workflow summary with execution results from Minicor
230
234
  - Make adjustments, re-validate changed steps through \`execute_workflow\`
231
235
 
236
+ ### 8. Offer Agent Setup
237
+ After a workflow passes end-to-end, offer to create an agent to manage it:
238
+
239
+ "Workflow is working. Want me to set up a monitoring agent? It can:
240
+ - **Watch for failures** and auto-recover (monitor mode)
241
+ - **Run on a schedule** (scheduled mode, e.g. daily at 9am)
242
+ - **Notify Slack** when runs complete or fail"
243
+
244
+ If the user agrees, call \`create_agent\` with:
245
+ - \`mode: "monitor"\` + \`watchWorkflowId\` for failure monitoring
246
+ - \`mode: "scheduled"\` + a cron expression for recurring runs
247
+ - \`task\`: describe the recovery/check behavior (e.g. "When this workflow fails, take a screenshot, check if the login expired, and re-run")
248
+ - \`vmUrl\`: the same VM URL used during the build
249
+ - Same \`workspaceId\`
250
+
232
251
  ## Data Extraction Strategy
233
252
 
234
253
  When you need to READ data from the screen (not just click/type), follow this priority order. **Do NOT rely solely on screenshots for data reading.**
@@ -279,6 +298,20 @@ When you need to READ data from the screen (not just click/type), follow this pr
279
298
  - **\`batch_test_rpa\`** — run the workflow with multiple test inputs.
280
299
  - **Video Recordings** — Minicor records MP4 videos of each RPA step execution. Use \`get_full_execution\` to see recording references (\`recording.blobName\`). These can be viewed in the Minicor platform for visual debugging.
281
300
 
301
+ ## State Reset (Idempotency)
302
+
303
+ The workflow MUST return the system to its original state so it can run repeatedly:
304
+ - Last step must reset — close dialogs, navigate back to the starting screen
305
+ - Don't include login/window-opening — those belong in a separate setup workflow
306
+ - After a successful run, immediately re-run to verify idempotency
307
+
308
+ ## Context Persistence
309
+
310
+ Use \`create_issue\` / \`update_issue\` to persist learned context across builds:
311
+ - \`[Agent:<name>] Rules\` — app-specific behaviors (e.g., "Reports tab takes 15s to load")
312
+ - \`[Agent:<name>] Context\` — persistent facts (URLs, credential rotation dates)
313
+ - Read these at the start of future builds to avoid re-learning things
314
+
282
315
  ## Important Rules
283
316
  - **VALIDATE BEFORE SAVING** — no exceptions unless user explicitly opts out
284
317
  - **TEST THROUGH MINICOR** — \`vm_execute_script\` is for prototyping. Always run \`execute_workflow\` with real inputs before declaring done.
@@ -290,7 +323,8 @@ When you need to READ data from the screen (not just click/type), follow this pr
290
323
  - **Start simple** — get basic automation working before adding sophistication
291
324
  - **Add waits** — use \`time.sleep()\` or element-wait patterns between actions
292
325
  - **Handle errors** — try/except with meaningful messages
293
- - **Keep scripts focused** — one logical action per step`,
326
+ - **Keep scripts focused** — one logical action per step
327
+ - **Reset to original state** — every workflow must be idempotent (see State Reset section above)`,
294
328
  },
295
329
  },
296
330
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"build-rpa.js","sourceRoot":"","sources":["../../src/prompts/build-rpa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAY;IAC3C,MAAM,CAAC,MAAM,CACX,oBAAoB,EACpB,wSAAwS,EACxS;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACxD,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,iHAAiH,CAClH;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,CACP,uFAAuF,CACxF;QACH,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,sEAAsE,CACvE;KACJ,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;EAGhB,IAAI;;;EAGJ,OAAO;;;MAGH,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,2BAA2B,UAAU,+BAA+B,CAAC,CAAC,CAAC,8CAA8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAoH1I,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yDAmJsC;iBAC9C;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"build-rpa.js","sourceRoot":"","sources":["../../src/prompts/build-rpa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAY;IAC3C,MAAM,CAAC,MAAM,CACX,oBAAoB,EACpB,wSAAwS,EACxS;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACxD,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,iHAAiH,CAClH;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,CACP,uFAAuF,CACxF;QACH,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,sEAAsE,CACvE;KACJ,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;EAGhB,IAAI;;;EAGJ,OAAO;;;MAGH,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,2BAA2B,UAAU,+BAA+B,CAAC,CAAC,CAAC,8CAA8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAoH1I,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kGAqL+E;iBACvF;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"debug-execution.d.ts","sourceRoot":"","sources":["../../src/prompts/debug-execution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,QAyEpD"}
1
+ {"version":3,"file":"debug-execution.d.ts","sourceRoot":"","sources":["../../src/prompts/debug-execution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,QA2EpD"}
@@ -4,14 +4,16 @@ export function register({ server, client }) {
4
4
  server.prompt("debug-workflow-execution", "Analyze a failed workflow execution and suggest fixes", {
5
5
  workflowId: z.string().describe("Workflow ID to debug"),
6
6
  executionId: z.string().describe("Failed execution ID"),
7
- }, async ({ workflowId, executionId }) => {
7
+ region: z.string().optional().describe("Region (us or ca)"),
8
+ }, async ({ workflowId, executionId, region }) => {
8
9
  const wId = parseInt(workflowId);
9
10
  const eId = parseInt(executionId);
11
+ const r = region;
10
12
  let executionData;
11
13
  let flowsData;
12
14
  try {
13
- executionData = await client().getExecution(wId, eId);
14
- flowsData = await client().getWorkflowFlows(wId);
15
+ executionData = await client(r).getExecution(wId, eId);
16
+ flowsData = await client(r).getWorkflowFlows(wId);
15
17
  }
16
18
  catch (e) {
17
19
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"debug-execution.js","sourceRoot":"","sources":["../../src/prompts/debug-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAY;IACnD,MAAM,CAAC,MAAM,CACX,0BAA0B,EAC1B,uDAAuD,EACvD;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACvD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACxD,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClC,IAAI,aAAkB,CAAC;QACvB,IAAI,SAAc,CAAC;QAEnB,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,MAAM,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtD,SAAS,GAAG,MAAM,MAAM,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAe;wBACrB,OAAO,EAAE;4BACP,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,mCAAmC,CAAC,CAAC,OAAO,EAAE;yBACrD;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;;;EAGlB,IAAI,CAAC,SAAS,CAAC;;;EAGf,IAAI,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;wEAuBmD;qBAC3D;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"debug-execution.js","sourceRoot":"","sources":["../../src/prompts/debug-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAY;IACnD,MAAM,CAAC,MAAM,CACX,0BAA0B,EAC1B,uDAAuD,EACvD;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACvD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,MAA4B,CAAC;QACvC,IAAI,aAAkB,CAAC;QACvB,IAAI,SAAc,CAAC;QAEnB,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvD,SAAS,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAe;wBACrB,OAAO,EAAE;4BACP,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,mCAAmC,CAAC,CAAC,OAAO,EAAE;yBACrD;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;;;EAGlB,IAAI,CAAC,SAAS,CAAC;;;EAGf,IAAI,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;wEAuBmD;qBAC3D;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}