@minicor/mcp-server 3.6.0 → 3.9.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 +66 -1
- package/dist/__tests__/builder-discovery.test.d.ts +2 -0
- package/dist/__tests__/builder-discovery.test.d.ts.map +1 -0
- package/dist/__tests__/builder-discovery.test.js +120 -0
- package/dist/__tests__/builder-discovery.test.js.map +1 -0
- package/dist/__tests__/codemode.test.js +35 -0
- package/dist/__tests__/codemode.test.js.map +1 -1
- package/dist/__tests__/config-stores.test.d.ts +2 -0
- package/dist/__tests__/config-stores.test.d.ts.map +1 -0
- package/dist/__tests__/config-stores.test.js +88 -0
- package/dist/__tests__/config-stores.test.js.map +1 -0
- package/dist/__tests__/dev-mode-draft.test.d.ts +2 -0
- package/dist/__tests__/dev-mode-draft.test.d.ts.map +1 -0
- package/dist/__tests__/dev-mode-draft.test.js +260 -0
- package/dist/__tests__/dev-mode-draft.test.js.map +1 -0
- package/dist/__tests__/disk-token-store.test.d.ts +2 -0
- package/dist/__tests__/disk-token-store.test.d.ts.map +1 -0
- package/dist/__tests__/disk-token-store.test.js +231 -0
- package/dist/__tests__/disk-token-store.test.js.map +1 -0
- package/dist/__tests__/laminar-client.test.js +154 -0
- package/dist/__tests__/laminar-client.test.js.map +1 -1
- package/dist/__tests__/lib-dev-mode.test.d.ts +2 -0
- package/dist/__tests__/lib-dev-mode.test.d.ts.map +1 -0
- package/dist/__tests__/lib-dev-mode.test.js +48 -0
- package/dist/__tests__/lib-dev-mode.test.js.map +1 -0
- package/dist/__tests__/paths.test.d.ts +2 -0
- package/dist/__tests__/paths.test.d.ts.map +1 -0
- package/dist/__tests__/paths.test.js +55 -0
- package/dist/__tests__/paths.test.js.map +1 -0
- package/dist/__tests__/recording-frames.test.d.ts +2 -0
- package/dist/__tests__/recording-frames.test.d.ts.map +1 -0
- package/dist/__tests__/recording-frames.test.js +46 -0
- package/dist/__tests__/recording-frames.test.js.map +1 -0
- package/dist/__tests__/server-profile.test.d.ts +2 -0
- package/dist/__tests__/server-profile.test.d.ts.map +1 -0
- package/dist/__tests__/server-profile.test.js +311 -0
- package/dist/__tests__/server-profile.test.js.map +1 -0
- package/dist/builder-index.d.ts +3 -0
- package/dist/builder-index.d.ts.map +1 -0
- package/dist/builder-index.js +5 -0
- package/dist/builder-index.js.map +1 -0
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/codemode.d.ts +3 -1
- package/dist/codemode.d.ts.map +1 -1
- package/dist/codemode.js +20 -6
- package/dist/codemode.js.map +1 -1
- package/dist/disk-token-store.d.ts +101 -0
- package/dist/disk-token-store.d.ts.map +1 -0
- package/dist/disk-token-store.js +398 -0
- package/dist/disk-token-store.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -111
- package/dist/index.js.map +1 -1
- package/dist/laminar-client.d.ts +111 -0
- package/dist/laminar-client.d.ts.map +1 -1
- package/dist/laminar-client.js +47 -1
- package/dist/laminar-client.js.map +1 -1
- package/dist/lib.d.ts +4 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +53 -58
- package/dist/lib.js.map +1 -1
- package/dist/paths.d.ts +4 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +33 -0
- package/dist/paths.js.map +1 -1
- package/dist/prompts/debug-execution.d.ts.map +1 -1
- package/dist/prompts/debug-execution.js +3 -2
- package/dist/prompts/debug-execution.js.map +1 -1
- package/dist/recording-frames.d.ts +58 -0
- package/dist/recording-frames.d.ts.map +1 -0
- package/dist/recording-frames.js +244 -0
- package/dist/recording-frames.js.map +1 -0
- package/dist/seed-skills.js +3 -2
- package/dist/seed-skills.js.map +1 -1
- package/dist/server-profile.d.ts +11 -0
- package/dist/server-profile.d.ts.map +1 -0
- package/dist/server-profile.js +104 -0
- package/dist/server-profile.js.map +1 -0
- package/dist/setup.d.ts +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +81 -71
- package/dist/setup.js.map +1 -1
- package/dist/tools/builder-discovery.d.ts +17 -0
- package/dist/tools/builder-discovery.d.ts.map +1 -0
- package/dist/tools/builder-discovery.js +131 -0
- package/dist/tools/builder-discovery.js.map +1 -0
- package/dist/tools/core.d.ts.map +1 -1
- package/dist/tools/core.js +117 -43
- package/dist/tools/core.js.map +1 -1
- package/dist/tools/dev-mode-draft.d.ts +3 -0
- package/dist/tools/dev-mode-draft.d.ts.map +1 -0
- package/dist/tools/dev-mode-draft.js +279 -0
- package/dist/tools/dev-mode-draft.js.map +1 -0
- package/dist/tools/vm.d.ts.map +1 -1
- package/dist/tools/vm.js +3 -35
- package/dist/tools/vm.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recording-frames.js","sourceRoot":"","sources":["../src/recording-frames.ts"],"names":[],"mappings":"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"}
|
package/dist/seed-skills.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import fs from "node:fs";
|
|
13
13
|
import { loadAllSkills } from "./skills.js";
|
|
14
14
|
import { apiToPlatformBase } from "./agent-service-client.js";
|
|
15
|
-
import { getTokenPath } from "./paths.js";
|
|
15
|
+
import { getTokenPath, resolveApiBase } from "./paths.js";
|
|
16
16
|
const adminKey = process.env.SKILLS_ADMIN_KEY;
|
|
17
17
|
if (!adminKey) {
|
|
18
18
|
console.error("SKILLS_ADMIN_KEY is required");
|
|
@@ -25,11 +25,12 @@ function loadAuthToken() {
|
|
|
25
25
|
return null;
|
|
26
26
|
const raw = JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
|
|
27
27
|
const region = raw.us || raw.ca || raw;
|
|
28
|
+
const regionKey = raw.ca || region.region === "ca" ? "ca" : "us";
|
|
28
29
|
if (!region?.access_token)
|
|
29
30
|
return null;
|
|
30
31
|
return {
|
|
31
32
|
token: region.access_token,
|
|
32
|
-
apiBase: region.api_base
|
|
33
|
+
apiBase: resolveApiBase(regionKey, region.api_base),
|
|
33
34
|
};
|
|
34
35
|
}
|
|
35
36
|
catch {
|
package/dist/seed-skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-skills.js","sourceRoot":"","sources":["../src/seed-skills.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"seed-skills.js","sourceRoot":"","sources":["../src/seed-skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolDeps } from "./types.js";
|
|
2
|
+
export declare const SERVER_PROFILES: readonly ["full", "builder"];
|
|
3
|
+
export type MinicorServerProfile = (typeof SERVER_PROFILES)[number];
|
|
4
|
+
export declare const FULL_INSTRUCTIONS = "You are connected to the Minicor MCP server for RPA workflow automation.\n\nCRITICAL: If the current directory contains a minicor.json file, you are in a workspace clone.\nYou MUST call session_start(directory) as your FIRST action. It returns the workspace rules\n(AGENTS.md), prior session state for resuming, and all context you need. Follow the phase loop\nit describes.\n\nBefore ending your session, call session_end() to persist your progress. Other agents (on other\nmachines, scheduled, or human-triggered) depend on this to resume where you left off.\n\nIf you are NOT in a workspace clone, use the tools freely \u2014 list_workspaces, clone_workspace, etc.";
|
|
5
|
+
export declare const BUILDER_INSTRUCTIONS = "You are connected to the focused Minicor Builder MCP server.\nUse it to create and discover workflows, develop workflow drafts, manage configuration stores,\npublish workflows, and build or run Jobs.\n\nCall list_workspaces before workspace-scoped operations so the server can resolve the workspace's\nregion. Find or create the workflow, call dev_mode_load, inspect and edit its draft steps, and use\nthe configuration-store tools when the draft needs configuration values. Every dev_mode_run call\nmust include vmId. Test the draft before publishing. Publishing requires confirm: true and reloads\nthe draft from the newly published workflow, so it may be run again afterward.\n\nRun progress is ephemeral. dev_mode_stop_run requests a cooperative stop after the current step;\nit cannot interrupt that step. To abandon work safely, request the stop from a concurrent client,\nwait until dev_mode_get_run_status returns active: false, then call dev_mode_delete_draft with\nconfirm: true. Deleting a draft does not change production and does not stop a run by itself.\n\nJobs execute published workflows rather than unpublished Dev Mode drafts. Publish the workflow\nbefore using it in an end-to-end Job run or test.";
|
|
6
|
+
export declare function parseServerProfile(args?: readonly string[], env?: NodeJS.ProcessEnv): MinicorServerProfile;
|
|
7
|
+
export declare function serverNameForProfile(profile: MinicorServerProfile): string;
|
|
8
|
+
export declare function instructionsForProfile(profile: MinicorServerProfile): string;
|
|
9
|
+
export declare function profileUsesSessions(profile: MinicorServerProfile): boolean;
|
|
10
|
+
export declare function registerProfile(deps: ToolDeps, profile: MinicorServerProfile): void;
|
|
11
|
+
//# sourceMappingURL=server-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-profile.d.ts","sourceRoot":"","sources":["../src/server-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA0B3C,eAAO,MAAM,eAAe,8BAA+B,CAAC;AAC5D,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,iBAAiB,gqBAUqE,CAAC;AAEpG,eAAO,MAAM,oBAAoB,ssCAgBiB,CAAC;AAEnD,wBAAgB,kBAAkB,CAChC,IAAI,GAAE,SAAS,MAAM,EAA0B,EAC/C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAsBtB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAE1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAE5E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAE1E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,QA8B5E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { registerWorkflowDiscovery, registerVmDiscovery, } from "./tools/builder-discovery.js";
|
|
2
|
+
import { register as registerCore } from "./tools/core.js";
|
|
3
|
+
import { register as registerWorkflowOps } from "./tools/workflow-ops.js";
|
|
4
|
+
import { register as registerConfigStores } from "./tools/config-stores.js";
|
|
5
|
+
import { register as registerSyncTools } from "./tools/sync-tools.js";
|
|
6
|
+
import { register as registerVm } from "./tools/vm.js";
|
|
7
|
+
import { register as registerVmRpa } from "./tools/vm-rpa.js";
|
|
8
|
+
import { register as registerDevModeDraft } from "./tools/dev-mode-draft.js";
|
|
9
|
+
import { register as registerTfa } from "./tools/tfa.js";
|
|
10
|
+
import { register as registerIssues } from "./tools/issues.js";
|
|
11
|
+
import { register as registerAgents } from "./tools/agents.js";
|
|
12
|
+
import { register as registerSkills } from "./tools/skills.js";
|
|
13
|
+
import { register as registerJobs } from "./tools/jobs.js";
|
|
14
|
+
import { register as registerSession } from "./tools/session.js";
|
|
15
|
+
import { register as registerWorkflowGuide } from "./prompts/workflow-guide.js";
|
|
16
|
+
import { register as registerDebugExecution } from "./prompts/debug-execution.js";
|
|
17
|
+
import { register as registerBuildRpa } from "./prompts/build-rpa.js";
|
|
18
|
+
import { register as registerNestjsToJob } from "./prompts/nestjs-to-job.js";
|
|
19
|
+
import { register as registerTfaGuide } from "./prompts/tfa-guide.js";
|
|
20
|
+
import { register as registerWorkspaceSession } from "./prompts/workspace-session.js";
|
|
21
|
+
export const SERVER_PROFILES = ["full", "builder"];
|
|
22
|
+
export const FULL_INSTRUCTIONS = `You are connected to the Minicor MCP server for RPA workflow automation.
|
|
23
|
+
|
|
24
|
+
CRITICAL: If the current directory contains a minicor.json file, you are in a workspace clone.
|
|
25
|
+
You MUST call session_start(directory) as your FIRST action. It returns the workspace rules
|
|
26
|
+
(AGENTS.md), prior session state for resuming, and all context you need. Follow the phase loop
|
|
27
|
+
it describes.
|
|
28
|
+
|
|
29
|
+
Before ending your session, call session_end() to persist your progress. Other agents (on other
|
|
30
|
+
machines, scheduled, or human-triggered) depend on this to resume where you left off.
|
|
31
|
+
|
|
32
|
+
If you are NOT in a workspace clone, use the tools freely — list_workspaces, clone_workspace, etc.`;
|
|
33
|
+
export const BUILDER_INSTRUCTIONS = `You are connected to the focused Minicor Builder MCP server.
|
|
34
|
+
Use it to create and discover workflows, develop workflow drafts, manage configuration stores,
|
|
35
|
+
publish workflows, and build or run Jobs.
|
|
36
|
+
|
|
37
|
+
Call list_workspaces before workspace-scoped operations so the server can resolve the workspace's
|
|
38
|
+
region. Find or create the workflow, call dev_mode_load, inspect and edit its draft steps, and use
|
|
39
|
+
the configuration-store tools when the draft needs configuration values. Every dev_mode_run call
|
|
40
|
+
must include vmId. Test the draft before publishing. Publishing requires confirm: true and reloads
|
|
41
|
+
the draft from the newly published workflow, so it may be run again afterward.
|
|
42
|
+
|
|
43
|
+
Run progress is ephemeral. dev_mode_stop_run requests a cooperative stop after the current step;
|
|
44
|
+
it cannot interrupt that step. To abandon work safely, request the stop from a concurrent client,
|
|
45
|
+
wait until dev_mode_get_run_status returns active: false, then call dev_mode_delete_draft with
|
|
46
|
+
confirm: true. Deleting a draft does not change production and does not stop a run by itself.
|
|
47
|
+
|
|
48
|
+
Jobs execute published workflows rather than unpublished Dev Mode drafts. Publish the workflow
|
|
49
|
+
before using it in an end-to-end Job run or test.`;
|
|
50
|
+
export function parseServerProfile(args = process.argv.slice(2), env = process.env) {
|
|
51
|
+
const equalsArg = args.find((arg) => arg.startsWith("--profile="));
|
|
52
|
+
const profileIndex = args.indexOf("--profile");
|
|
53
|
+
if ((equalsArg !== undefined && equalsArg.slice("--profile=".length) === "") ||
|
|
54
|
+
(profileIndex >= 0 && !args[profileIndex + 1])) {
|
|
55
|
+
throw new Error("Missing value after --profile.");
|
|
56
|
+
}
|
|
57
|
+
const requested = equalsArg?.slice("--profile=".length) ||
|
|
58
|
+
(profileIndex >= 0 ? args[profileIndex + 1] : undefined) ||
|
|
59
|
+
env.MINICOR_MCP_PROFILE ||
|
|
60
|
+
"full";
|
|
61
|
+
if (!SERVER_PROFILES.includes(requested)) {
|
|
62
|
+
throw new Error(`Unknown MCP profile "${requested}". Expected one of: ${SERVER_PROFILES.join(", ")}.`);
|
|
63
|
+
}
|
|
64
|
+
return requested;
|
|
65
|
+
}
|
|
66
|
+
export function serverNameForProfile(profile) {
|
|
67
|
+
return profile === "builder" ? "minicor-builder" : "minicor";
|
|
68
|
+
}
|
|
69
|
+
export function instructionsForProfile(profile) {
|
|
70
|
+
return profile === "builder" ? BUILDER_INSTRUCTIONS : FULL_INSTRUCTIONS;
|
|
71
|
+
}
|
|
72
|
+
export function profileUsesSessions(profile) {
|
|
73
|
+
return profile === "full";
|
|
74
|
+
}
|
|
75
|
+
export function registerProfile(deps, profile) {
|
|
76
|
+
if (profile === "builder") {
|
|
77
|
+
registerWorkflowDiscovery(deps);
|
|
78
|
+
registerVmDiscovery(deps);
|
|
79
|
+
registerConfigStores(deps);
|
|
80
|
+
registerDevModeDraft(deps);
|
|
81
|
+
registerJobs(deps);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
registerCore(deps);
|
|
85
|
+
registerWorkflowOps(deps);
|
|
86
|
+
registerConfigStores(deps);
|
|
87
|
+
registerSyncTools(deps);
|
|
88
|
+
registerVm(deps);
|
|
89
|
+
registerVmRpa(deps);
|
|
90
|
+
registerDevModeDraft(deps);
|
|
91
|
+
registerTfa(deps);
|
|
92
|
+
registerIssues(deps);
|
|
93
|
+
registerAgents(deps);
|
|
94
|
+
registerSkills(deps);
|
|
95
|
+
registerJobs(deps);
|
|
96
|
+
registerSession(deps);
|
|
97
|
+
registerWorkflowGuide(deps);
|
|
98
|
+
registerDebugExecution(deps);
|
|
99
|
+
registerBuildRpa(deps);
|
|
100
|
+
registerNestjsToJob(deps);
|
|
101
|
+
registerTfaGuide(deps);
|
|
102
|
+
registerWorkspaceSession(deps);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=server-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-profile.js","sourceRoot":"","sources":["../src/server-profile.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Browser mode (default): opens a local page with sign-in/sign-up + workspace creation
|
|
6
6
|
* CLI mode (--cli): terminal prompts for headless environments
|
|
7
|
+
* Add --with-builder to also configure the focused minicor-builder MCP.
|
|
7
8
|
*
|
|
8
9
|
* Tokens stored in ~/.minicor/tokens.json, MCP config written to ~/.cursor/mcp.json
|
|
9
10
|
*/
|
package/dist/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|
package/dist/setup.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Browser mode (default): opens a local page with sign-in/sign-up + workspace creation
|
|
6
6
|
* CLI mode (--cli): terminal prompts for headless environments
|
|
7
|
+
* Add --with-builder to also configure the focused minicor-builder MCP.
|
|
7
8
|
*
|
|
8
9
|
* Tokens stored in ~/.minicor/tokens.json, MCP config written to ~/.cursor/mcp.json
|
|
9
10
|
*/
|
|
@@ -13,7 +14,8 @@ import http from "node:http";
|
|
|
13
14
|
import os from "node:os";
|
|
14
15
|
import path from "node:path";
|
|
15
16
|
import readline from "node:readline";
|
|
16
|
-
import {
|
|
17
|
+
import { getWriteConfigPath, getWriteTokenPath, normalizeBaseUrl, resolveApiBase, resolveDefaultApiBase, validateApiBaseUrl, } from "./paths.js";
|
|
18
|
+
import { DiskTokenStore, } from "./disk-token-store.js";
|
|
17
19
|
const VERSION = (() => {
|
|
18
20
|
try {
|
|
19
21
|
const pkg = JSON.parse(fs.readFileSync(path.resolve(path.dirname(new URL(import.meta.url).pathname), "..", "package.json"), "utf-8"));
|
|
@@ -24,6 +26,9 @@ const VERSION = (() => {
|
|
|
24
26
|
}
|
|
25
27
|
})();
|
|
26
28
|
const MCP_ENTRY = path.resolve(path.dirname(new URL(import.meta.url).pathname), "index.js");
|
|
29
|
+
const BUILDER_MCP_ENTRY = path.resolve(path.dirname(new URL(import.meta.url).pathname), "builder-index.js");
|
|
30
|
+
const INCLUDE_BUILDER_MCP = process.argv.includes("--with-builder");
|
|
31
|
+
const tokenStore = new DiskTokenStore();
|
|
27
32
|
async function signIn(apiBase, email, password) {
|
|
28
33
|
const res = await fetch(`${apiBase}/auth/signin`, {
|
|
29
34
|
method: "POST",
|
|
@@ -71,53 +76,19 @@ async function createWorkspace(apiBase, token, name) {
|
|
|
71
76
|
return (await res.json());
|
|
72
77
|
}
|
|
73
78
|
function readExistingTokens() {
|
|
74
|
-
|
|
75
|
-
if (!fs.existsSync(writePath)) {
|
|
76
|
-
const readPath = getTokenPath();
|
|
77
|
-
if (!fs.existsSync(readPath))
|
|
78
|
-
return {};
|
|
79
|
-
try {
|
|
80
|
-
const raw = JSON.parse(fs.readFileSync(readPath, "utf-8"));
|
|
81
|
-
if (raw.us || raw.ca)
|
|
82
|
-
return raw;
|
|
83
|
-
if (raw.access_token) {
|
|
84
|
-
const r = raw.region || apiBaseToRegion(raw.api_base || "");
|
|
85
|
-
return { [r]: raw };
|
|
86
|
-
}
|
|
87
|
-
return {};
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
return {};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
const raw = JSON.parse(fs.readFileSync(writePath, "utf-8"));
|
|
95
|
-
if (raw.us || raw.ca)
|
|
96
|
-
return raw;
|
|
97
|
-
if (raw.access_token) {
|
|
98
|
-
const r = raw.region || apiBaseToRegion(raw.api_base || "");
|
|
99
|
-
return { [r]: raw };
|
|
100
|
-
}
|
|
101
|
-
return {};
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
return {};
|
|
105
|
-
}
|
|
79
|
+
return tokenStore.readAll();
|
|
106
80
|
}
|
|
107
|
-
function storeTokens(loginData, region) {
|
|
81
|
+
async function storeTokens(loginData, region, apiBase) {
|
|
108
82
|
const writePath = getWriteTokenPath();
|
|
109
|
-
const
|
|
110
|
-
if (!fs.existsSync(dir))
|
|
111
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
112
|
-
const existing = readExistingTokens();
|
|
113
|
-
existing[region] = {
|
|
83
|
+
const tokens = {
|
|
114
84
|
access_token: loginData.access_token,
|
|
115
85
|
refresh_token: loginData.refresh_token || null,
|
|
116
86
|
expires_at: Date.now() + loginData.expires_in * 1000,
|
|
117
|
-
api_base: regionToApiBase(region),
|
|
118
87
|
region,
|
|
119
88
|
};
|
|
120
|
-
|
|
89
|
+
if (apiBase)
|
|
90
|
+
tokens.api_base = normalizeBaseUrl(apiBase);
|
|
91
|
+
await tokenStore.writeRegion(region, tokens);
|
|
121
92
|
return writePath;
|
|
122
93
|
}
|
|
123
94
|
function writeMcpConfig() {
|
|
@@ -139,6 +110,12 @@ function writeMcpConfig() {
|
|
|
139
110
|
command: "node",
|
|
140
111
|
args: [MCP_ENTRY],
|
|
141
112
|
};
|
|
113
|
+
if (INCLUDE_BUILDER_MCP) {
|
|
114
|
+
existing.mcpServers["minicor-builder"] = {
|
|
115
|
+
command: "node",
|
|
116
|
+
args: [BUILDER_MCP_ENTRY],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
142
119
|
fs.writeFileSync(configPath, JSON.stringify(existing, null, 2) + "\n");
|
|
143
120
|
return configPath;
|
|
144
121
|
}
|
|
@@ -170,6 +147,13 @@ function send(res, status, body) {
|
|
|
170
147
|
res.writeHead(status, { "Content-Type": "application/json" });
|
|
171
148
|
res.end(JSON.stringify(body));
|
|
172
149
|
}
|
|
150
|
+
function resolveSetupApiBase(region, input) {
|
|
151
|
+
if (input && input.trim() !== "") {
|
|
152
|
+
const storedApiBase = validateApiBaseUrl(input);
|
|
153
|
+
return { apiBase: storedApiBase, storedApiBase };
|
|
154
|
+
}
|
|
155
|
+
return { apiBase: validateApiBaseUrl(resolveDefaultApiBase(region)) };
|
|
156
|
+
}
|
|
173
157
|
// ─── HTML ────────────────────────────────────────────────────
|
|
174
158
|
const HTML = `<!DOCTYPE html>
|
|
175
159
|
<html lang="en">
|
|
@@ -321,6 +305,11 @@ const HTML = `<!DOCTYPE html>
|
|
|
321
305
|
<label><input type="radio" name="login-region" value="ca" /><span>Canada</span></label>
|
|
322
306
|
</div>
|
|
323
307
|
</div>
|
|
308
|
+
<div class="field">
|
|
309
|
+
<label for="login-api-base">Backend API URL</label>
|
|
310
|
+
<input id="login-api-base" type="text" placeholder="Leave blank for selected region default" autocomplete="off" />
|
|
311
|
+
<div class="hint">Only change this if instructed by your administrator.</div>
|
|
312
|
+
</div>
|
|
324
313
|
<button type="submit" class="btn-primary" id="btn-login">Sign in</button>
|
|
325
314
|
</form>
|
|
326
315
|
</div>
|
|
@@ -358,6 +347,11 @@ const HTML = `<!DOCTYPE html>
|
|
|
358
347
|
<label><input type="radio" name="signup-region" value="ca" /><span>Canada</span></label>
|
|
359
348
|
</div>
|
|
360
349
|
</div>
|
|
350
|
+
<div class="field">
|
|
351
|
+
<label for="signup-api-base">Backend API URL</label>
|
|
352
|
+
<input id="signup-api-base" type="text" placeholder="Leave blank for selected region default" autocomplete="off" />
|
|
353
|
+
<div class="hint">Only change this if instructed by your administrator.</div>
|
|
354
|
+
</div>
|
|
361
355
|
<button type="submit" class="btn-primary" id="btn-signup">Create account</button>
|
|
362
356
|
</form>
|
|
363
357
|
</div>
|
|
@@ -454,9 +448,10 @@ document.getElementById('login-form').addEventListener('submit',async(e)=>{
|
|
|
454
448
|
const email=document.getElementById('login-email').value.trim();
|
|
455
449
|
const password=document.getElementById('login-password').value;
|
|
456
450
|
const region=document.querySelector('input[name="login-region"]:checked').value;
|
|
451
|
+
const apiBase=document.getElementById('login-api-base').value.trim();
|
|
457
452
|
if(!email||!password)return showError('auth-error','Email and password are required.');
|
|
458
453
|
const btn=document.getElementById('btn-login');btn.dataset.label='Sign in';
|
|
459
|
-
await doAuth('/api/connect',{email,password,region},btn,'Signing in\\u2026');
|
|
454
|
+
await doAuth('/api/connect',{email,password,region,apiBase},btn,'Signing in\\u2026');
|
|
460
455
|
});
|
|
461
456
|
|
|
462
457
|
document.getElementById('signup-form').addEventListener('submit',async(e)=>{
|
|
@@ -467,13 +462,14 @@ document.getElementById('signup-form').addEventListener('submit',async(e)=>{
|
|
|
467
462
|
const password=document.getElementById('signup-password').value;
|
|
468
463
|
const confirm=document.getElementById('signup-confirm').value;
|
|
469
464
|
const region=document.querySelector('input[name="signup-region"]:checked').value;
|
|
465
|
+
const apiBase=document.getElementById('signup-api-base').value.trim();
|
|
470
466
|
if(!firstName||!lastName||!email||!password)return showError('auth-error','All fields are required.');
|
|
471
467
|
if(password!==confirm)return showError('auth-error','Passwords do not match.');
|
|
472
468
|
if(password.length<8)return showError('auth-error','Password must be at least 8 characters.');
|
|
473
469
|
if(!/[A-Z]/.test(password))return showError('auth-error','Password must contain an uppercase letter.');
|
|
474
470
|
if(!/[^a-zA-Z0-9]/.test(password))return showError('auth-error','Password must contain a symbol.');
|
|
475
471
|
const btn=document.getElementById('btn-signup');btn.dataset.label='Create account';
|
|
476
|
-
await doAuth('/api/register',{firstName,lastName,email,password,region},btn,'Creating account\\u2026');
|
|
472
|
+
await doAuth('/api/register',{firstName,lastName,email,password,region,apiBase},btn,'Creating account\\u2026');
|
|
477
473
|
});
|
|
478
474
|
|
|
479
475
|
async function loadWorkspaces(token){
|
|
@@ -521,6 +517,8 @@ function addAnotherRegion(){
|
|
|
521
517
|
goTo('auth');
|
|
522
518
|
document.getElementById('login-email').value='';
|
|
523
519
|
document.getElementById('login-password').value='';
|
|
520
|
+
document.getElementById('login-api-base').value='';
|
|
521
|
+
document.getElementById('signup-api-base').value='';
|
|
524
522
|
clearAlerts(['auth-error']);
|
|
525
523
|
}
|
|
526
524
|
</script>
|
|
@@ -528,7 +526,7 @@ function addAnotherRegion(){
|
|
|
528
526
|
</html>`;
|
|
529
527
|
// ─── Browser server ──────────────────────────────────────────
|
|
530
528
|
let storedAccessToken = null;
|
|
531
|
-
let
|
|
529
|
+
let lastSignedInApiBase = resolveApiBase("us");
|
|
532
530
|
async function startBrowserSetup() {
|
|
533
531
|
const srv = http.createServer(async (req, res) => {
|
|
534
532
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
@@ -562,6 +560,7 @@ async function startBrowserSetup() {
|
|
|
562
560
|
region: r,
|
|
563
561
|
label: r === "ca" ? "Canada" : "US",
|
|
564
562
|
expiresAt: t.expires_at,
|
|
563
|
+
apiBase: resolveApiBase(r, t.api_base),
|
|
565
564
|
});
|
|
566
565
|
}
|
|
567
566
|
}
|
|
@@ -577,9 +576,7 @@ async function startBrowserSetup() {
|
|
|
577
576
|
return send(res, 200, { hasSession: false, serviceConfig });
|
|
578
577
|
}
|
|
579
578
|
if (url.pathname === "/api/logout" && req.method === "POST") {
|
|
580
|
-
|
|
581
|
-
if (fs.existsSync(tokenPath))
|
|
582
|
-
fs.unlinkSync(tokenPath);
|
|
579
|
+
await tokenStore.clear();
|
|
583
580
|
for (const base of [
|
|
584
581
|
path.join(os.homedir(), ".cursor"),
|
|
585
582
|
path.join(process.cwd(), ".cursor"),
|
|
@@ -589,6 +586,7 @@ async function startBrowserSetup() {
|
|
|
589
586
|
try {
|
|
590
587
|
const cfg = JSON.parse(fs.readFileSync(mcpPath, "utf-8"));
|
|
591
588
|
delete cfg.mcpServers?.minicor;
|
|
589
|
+
delete cfg.mcpServers?.["minicor-builder"];
|
|
592
590
|
delete cfg.mcpServers?.laminar;
|
|
593
591
|
fs.writeFileSync(mcpPath, JSON.stringify(cfg, null, 2) + "\n");
|
|
594
592
|
}
|
|
@@ -596,19 +594,23 @@ async function startBrowserSetup() {
|
|
|
596
594
|
}
|
|
597
595
|
}
|
|
598
596
|
storedAccessToken = null;
|
|
597
|
+
lastSignedInApiBase = resolveApiBase("us");
|
|
599
598
|
console.log("Session cleared.");
|
|
600
599
|
return send(res, 200, { ok: true });
|
|
601
600
|
}
|
|
602
601
|
if (url.pathname === "/api/connect" && req.method === "POST") {
|
|
603
|
-
const { email, password, region } = await jsonBody(req);
|
|
602
|
+
const { email, password, region, apiBase: apiBaseInput, } = await jsonBody(req);
|
|
604
603
|
const r = region === "ca" ? "ca" : "us";
|
|
605
|
-
const
|
|
606
|
-
const loginData = await signIn(apiBase, email, password);
|
|
607
|
-
const tokenPath = storeTokens(loginData, r);
|
|
604
|
+
const apiBaseConfig = resolveSetupApiBase(r, apiBaseInput);
|
|
605
|
+
const loginData = await signIn(apiBaseConfig.apiBase, email, password);
|
|
606
|
+
const tokenPath = await storeTokens(loginData, r, apiBaseConfig.storedApiBase);
|
|
608
607
|
const configPath = writeMcpConfig();
|
|
609
608
|
storedAccessToken = loginData.access_token;
|
|
610
|
-
|
|
609
|
+
lastSignedInApiBase = apiBaseConfig.apiBase;
|
|
611
610
|
console.log(`\n✓ Tokens stored at ${tokenPath}`);
|
|
611
|
+
console.log(apiBaseConfig.storedApiBase
|
|
612
|
+
? `✓ Backend API base set to ${apiBaseConfig.storedApiBase}`
|
|
613
|
+
: `✓ Backend API base reset to default resolution (${apiBaseConfig.apiBase})`);
|
|
612
614
|
console.log(`✓ MCP config written to ${configPath}`);
|
|
613
615
|
return send(res, 200, {
|
|
614
616
|
accessToken: loginData.access_token,
|
|
@@ -617,17 +619,20 @@ async function startBrowserSetup() {
|
|
|
617
619
|
});
|
|
618
620
|
}
|
|
619
621
|
if (url.pathname === "/api/register" && req.method === "POST") {
|
|
620
|
-
const { firstName, lastName, email, password, region } = await jsonBody(req);
|
|
622
|
+
const { firstName, lastName, email, password, region, apiBase: apiBaseInput, } = await jsonBody(req);
|
|
621
623
|
const r = region === "ca" ? "ca" : "us";
|
|
622
|
-
const
|
|
623
|
-
await register(apiBase, { firstName, lastName, email, password });
|
|
624
|
-
const loginData = await signIn(apiBase, email, password);
|
|
625
|
-
const tokenPath = storeTokens(loginData, r);
|
|
624
|
+
const apiBaseConfig = resolveSetupApiBase(r, apiBaseInput);
|
|
625
|
+
await register(apiBaseConfig.apiBase, { firstName, lastName, email, password });
|
|
626
|
+
const loginData = await signIn(apiBaseConfig.apiBase, email, password);
|
|
627
|
+
const tokenPath = await storeTokens(loginData, r, apiBaseConfig.storedApiBase);
|
|
626
628
|
const configPath = writeMcpConfig();
|
|
627
629
|
storedAccessToken = loginData.access_token;
|
|
628
|
-
|
|
630
|
+
lastSignedInApiBase = apiBaseConfig.apiBase;
|
|
629
631
|
console.log(`\n✓ Account created and signed in`);
|
|
630
632
|
console.log(`✓ Tokens stored at ${tokenPath}`);
|
|
633
|
+
console.log(apiBaseConfig.storedApiBase
|
|
634
|
+
? `✓ Backend API base set to ${apiBaseConfig.storedApiBase}`
|
|
635
|
+
: `✓ Backend API base reset to default resolution (${apiBaseConfig.apiBase})`);
|
|
631
636
|
console.log(`✓ MCP config written to ${configPath}`);
|
|
632
637
|
return send(res, 200, {
|
|
633
638
|
accessToken: loginData.access_token,
|
|
@@ -639,8 +644,7 @@ async function startBrowserSetup() {
|
|
|
639
644
|
const token = req.headers["x-token"] || storedAccessToken;
|
|
640
645
|
if (!token)
|
|
641
646
|
return send(res, 401, { error: "No token" });
|
|
642
|
-
const
|
|
643
|
-
const workspaces = await listWorkspaces(apiBase, token);
|
|
647
|
+
const workspaces = await listWorkspaces(lastSignedInApiBase, token);
|
|
644
648
|
return send(res, 200, { workspaces });
|
|
645
649
|
}
|
|
646
650
|
if (url.pathname === "/api/create-workspace" && req.method === "POST") {
|
|
@@ -648,8 +652,7 @@ async function startBrowserSetup() {
|
|
|
648
652
|
const token = storedAccessToken;
|
|
649
653
|
if (!token)
|
|
650
654
|
return send(res, 401, { error: "No token" });
|
|
651
|
-
const
|
|
652
|
-
const ws = await createWorkspace(apiBase, token, name);
|
|
655
|
+
const ws = await createWorkspace(lastSignedInApiBase, token, name);
|
|
653
656
|
return send(res, 200, { workspace: ws });
|
|
654
657
|
}
|
|
655
658
|
send(res, 404, { error: "Not found" });
|
|
@@ -686,7 +689,9 @@ async function startCliSetup() {
|
|
|
686
689
|
const isSignup = hasAccount.trim().toLowerCase() === "n";
|
|
687
690
|
const regionStr = await ask(rl, "Region (us/ca) [us]: ");
|
|
688
691
|
const region = regionStr.trim().toLowerCase() === "ca" ? "ca" : "us";
|
|
689
|
-
const
|
|
692
|
+
const defaultApiBase = resolveDefaultApiBase(region);
|
|
693
|
+
const apiBaseInput = await ask(rl, `Backend API URL [${defaultApiBase}]: `);
|
|
694
|
+
const apiBaseConfig = resolveSetupApiBase(region, apiBaseInput);
|
|
690
695
|
let email;
|
|
691
696
|
let password;
|
|
692
697
|
if (isSignup) {
|
|
@@ -702,7 +707,7 @@ async function startCliSetup() {
|
|
|
702
707
|
process.exit(1);
|
|
703
708
|
}
|
|
704
709
|
try {
|
|
705
|
-
await register(apiBase, {
|
|
710
|
+
await register(apiBaseConfig.apiBase, {
|
|
706
711
|
firstName: firstName.trim(),
|
|
707
712
|
lastName: lastName.trim(),
|
|
708
713
|
email: email.trim(),
|
|
@@ -722,17 +727,20 @@ async function startCliSetup() {
|
|
|
722
727
|
password = await ask(rl, " Password: ");
|
|
723
728
|
}
|
|
724
729
|
try {
|
|
725
|
-
const loginData = await signIn(apiBase, email.trim(), password);
|
|
726
|
-
const tokenPath = storeTokens(loginData, region);
|
|
730
|
+
const loginData = await signIn(apiBaseConfig.apiBase, email.trim(), password);
|
|
731
|
+
const tokenPath = await storeTokens(loginData, region, apiBaseConfig.storedApiBase);
|
|
727
732
|
const configPath = writeMcpConfig();
|
|
728
733
|
console.log(`\n✓ Signed in.`);
|
|
729
734
|
console.log(`✓ Tokens stored at ${tokenPath}`);
|
|
735
|
+
console.log(apiBaseConfig.storedApiBase
|
|
736
|
+
? `✓ Backend API base set to ${apiBaseConfig.storedApiBase}`
|
|
737
|
+
: `✓ Backend API base reset to default resolution (${apiBaseConfig.apiBase})`);
|
|
730
738
|
console.log(`✓ MCP config written to ${configPath}`);
|
|
731
|
-
const workspaces = await listWorkspaces(apiBase, loginData.access_token);
|
|
739
|
+
const workspaces = await listWorkspaces(apiBaseConfig.apiBase, loginData.access_token);
|
|
732
740
|
if (workspaces.length === 0) {
|
|
733
741
|
const wsName = await ask(rl, "\nYou have no workspaces. Create one? Name: ");
|
|
734
742
|
if (wsName.trim().length >= 3) {
|
|
735
|
-
const ws = await createWorkspace(apiBase, loginData.access_token, wsName.trim());
|
|
743
|
+
const ws = await createWorkspace(apiBaseConfig.apiBase, loginData.access_token, wsName.trim());
|
|
736
744
|
console.log(`✓ Workspace "${ws.name}" created (ID: ${ws.id})`);
|
|
737
745
|
}
|
|
738
746
|
}
|
|
@@ -742,13 +750,15 @@ async function startCliSetup() {
|
|
|
742
750
|
const otherRegion = region === "us" ? "ca" : "us";
|
|
743
751
|
const addAnother = await ask(rl, `\nSign in to ${otherRegion.toUpperCase()} region as well? (y/N): `);
|
|
744
752
|
if (addAnother.trim().toLowerCase() === "y") {
|
|
745
|
-
const
|
|
753
|
+
const otherDefaultApiBase = resolveDefaultApiBase(otherRegion);
|
|
754
|
+
const otherApiBaseInput = await ask(rl, `Backend API URL for ${otherRegion.toUpperCase()} [${otherDefaultApiBase}]: `);
|
|
755
|
+
const otherApiBaseConfig = resolveSetupApiBase(otherRegion, otherApiBaseInput);
|
|
746
756
|
console.log(`\nSign in to ${otherRegion.toUpperCase()}:`);
|
|
747
757
|
const otherEmail = await ask(rl, " Email: ");
|
|
748
758
|
const otherPassword = await ask(rl, " Password: ");
|
|
749
759
|
try {
|
|
750
|
-
const otherLogin = await signIn(
|
|
751
|
-
storeTokens(otherLogin, otherRegion);
|
|
760
|
+
const otherLogin = await signIn(otherApiBaseConfig.apiBase, otherEmail.trim(), otherPassword);
|
|
761
|
+
await storeTokens(otherLogin, otherRegion, otherApiBaseConfig.storedApiBase);
|
|
752
762
|
console.log(`✓ Signed in to ${otherRegion.toUpperCase()}.`);
|
|
753
763
|
}
|
|
754
764
|
catch (e) {
|