lockin-mcp 1.0.2 → 1.0.3
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 +73 -36
- package/dist/brand.d.ts +2 -1
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +2 -1
- package/dist/brand.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/hosts-manager.d.ts.map +1 -1
- package/dist/hosts-manager.js +2 -2
- package/dist/hosts-manager.js.map +1 -1
- package/dist/hosts-manager.test.js +11 -3
- package/dist/hosts-manager.test.js.map +1 -1
- package/dist/index.js +30 -9
- package/dist/index.js.map +1 -1
- package/dist/install.js +2 -0
- package/dist/install.js.map +1 -1
- package/dist/installer/agent-instructions.d.ts +15 -1
- package/dist/installer/agent-instructions.d.ts.map +1 -1
- package/dist/installer/agent-instructions.js +27 -2
- package/dist/installer/agent-instructions.js.map +1 -1
- package/dist/installer/agents.d.ts.map +1 -1
- package/dist/installer/agents.js +63 -52
- package/dist/installer/agents.js.map +1 -1
- package/dist/installer/data-dir.d.ts +7 -0
- package/dist/installer/data-dir.d.ts.map +1 -0
- package/dist/installer/data-dir.js +38 -0
- package/dist/installer/data-dir.js.map +1 -0
- package/dist/installer/data-dir.test.d.ts +2 -0
- package/dist/installer/data-dir.test.d.ts.map +1 -0
- package/dist/installer/data-dir.test.js +59 -0
- package/dist/installer/data-dir.test.js.map +1 -0
- package/dist/installer/platform.d.ts.map +1 -1
- package/dist/installer/platform.js +2 -2
- package/dist/installer/platform.js.map +1 -1
- package/dist/installer/poke.d.ts.map +1 -1
- package/dist/installer/poke.js +5 -13
- package/dist/installer/poke.js.map +1 -1
- package/dist/installer/port.d.ts.map +1 -1
- package/dist/installer/port.js +5 -4
- package/dist/installer/port.js.map +1 -1
- package/dist/installer/relay-provision.d.ts.map +1 -1
- package/dist/installer/relay-provision.js +6 -2
- package/dist/installer/relay-provision.js.map +1 -1
- package/dist/installer/run.d.ts.map +1 -1
- package/dist/installer/run.js +10 -20
- package/dist/installer/run.js.map +1 -1
- package/dist/installer/tui.d.ts.map +1 -1
- package/dist/installer/tui.js +5 -3
- package/dist/installer/tui.js.map +1 -1
- package/dist/installer/tunnel.d.ts.map +1 -1
- package/dist/installer/tunnel.js +7 -2
- package/dist/installer/tunnel.js.map +1 -1
- package/dist/local-http.d.ts +32 -0
- package/dist/local-http.d.ts.map +1 -0
- package/dist/local-http.js +140 -0
- package/dist/local-http.js.map +1 -0
- package/dist/local-http.test.d.ts +2 -0
- package/dist/local-http.test.d.ts.map +1 -0
- package/dist/local-http.test.js +13 -0
- package/dist/local-http.test.js.map +1 -0
- package/dist/relay-client.d.ts.map +1 -1
- package/dist/relay-client.js +26 -23
- package/dist/relay-client.js.map +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -4
- package/dist/state.js.map +1 -1
- package/dist/types.d.ts +5 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -2
- package/dist/types.js.map +1 -1
- package/install.ps1 +1 -1
- package/install.sh +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../../src/installer/agent-instructions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../../src/installer/agent-instructions.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB,2CAA2C,CAAC;AAElF,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,sEAA4D,CAAC;AAEjG,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAOT;AAED,eAAO,MAAM,+BAA+B,sDACS,CAAC;AAEtD,sDAAsD;AACtD,eAAO,MAAM,sBAAsB,sDAAkC,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,YAAY,GACZ,gBAAgB,GAChB,SAAS,CAAC;AAEd,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAGzE;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,sBAAsB,CAqCzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAK7E"}
|
|
@@ -1,7 +1,27 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { APP_NAME } from "../brand.js";
|
|
4
|
+
import { getAppUrl } from "../config.js";
|
|
3
5
|
import { buildPokeMcpAddCommand } from "./poke.js";
|
|
4
|
-
export const
|
|
6
|
+
export const CLAUDE_AI_CONNECTORS_BASE = "https://claude.ai/customize/connectors";
|
|
7
|
+
/** Opens the add-connector modal without pre-filled fields. */
|
|
8
|
+
export const CLAUDE_AI_CONNECTOR_URL = `${CLAUDE_AI_CONNECTORS_BASE}?modal=add-custom-connector`;
|
|
9
|
+
/** Claude pre-fills name + MCP URL from the link; API key must be entered separately. */
|
|
10
|
+
export function buildClaudeConnectorUrl(params) {
|
|
11
|
+
const query = new URLSearchParams({
|
|
12
|
+
modal: "add-custom-connector",
|
|
13
|
+
connectorName: params.connectorName,
|
|
14
|
+
connectorUrl: params.connectorUrl,
|
|
15
|
+
});
|
|
16
|
+
return `${CLAUDE_AI_CONNECTORS_BASE}?${query.toString()}`;
|
|
17
|
+
}
|
|
18
|
+
export const CHATGPT_CONNECTORS_ADVANCED_URL = "https://chatgpt.com/#settings/Connectors/Advanced";
|
|
19
|
+
/** @deprecated Use CHATGPT_CONNECTORS_ADVANCED_URL */
|
|
20
|
+
export const CHATGPT_CONNECTORS_URL = CHATGPT_CONNECTORS_ADVANCED_URL;
|
|
21
|
+
export function getConnectorsDocsUrl(platform) {
|
|
22
|
+
const base = `${getAppUrl().replace(/\/$/, "")}/docs/connectors`;
|
|
23
|
+
return platform ? `${base}#${platform}` : base;
|
|
24
|
+
}
|
|
5
25
|
export function agentConnectionDetails(params) {
|
|
6
26
|
const claudeConfigPath = process.platform === "darwin"
|
|
7
27
|
? join(homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json")
|
|
@@ -20,10 +40,15 @@ export function agentConnectionDetails(params) {
|
|
|
20
40
|
claude: {
|
|
21
41
|
mcpUrl: params.remoteMcpUrl,
|
|
22
42
|
configPath: claudeConfigPath,
|
|
43
|
+
connectorUrl: buildClaudeConnectorUrl({
|
|
44
|
+
connectorName: APP_NAME,
|
|
45
|
+
connectorUrl: params.remoteMcpUrl,
|
|
46
|
+
}),
|
|
23
47
|
},
|
|
24
48
|
chatgpt: {
|
|
25
49
|
mcpUrl: params.remoteMcpUrl,
|
|
26
|
-
settingsUrl:
|
|
50
|
+
settingsUrl: CHATGPT_CONNECTORS_ADVANCED_URL,
|
|
51
|
+
advancedSettingsUrl: CHATGPT_CONNECTORS_ADVANCED_URL,
|
|
27
52
|
},
|
|
28
53
|
};
|
|
29
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-instructions.js","sourceRoot":"","sources":["../../src/installer/agent-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,
|
|
1
|
+
{"version":3,"file":"agent-instructions.js","sourceRoot":"","sources":["../../src/installer/agent-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,wCAAwC,CAAC;AAElF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,yBAAyB,6BAA6B,CAAC;AAEjG,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CAAC,MAGvC;IACC,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;QAChC,KAAK,EAAE,sBAAsB;QAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAC;IACH,OAAO,GAAG,yBAAyB,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAC1C,mDAAmD,CAAC;AAEtD,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,+BAA+B,CAAC;AAQtE,MAAM,UAAU,oBAAoB,CAAC,QAA4B;IAC/D,MAAM,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC;IACjE,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAsBD,MAAM,UAAU,sBAAsB,CAAC,MAItC;IACC,MAAM,gBAAgB,GACpB,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,IAAI,CACF,OAAO,EAAE,EACT,SAAS,EACT,qBAAqB,EACrB,QAAQ,EACR,4BAA4B,CAC7B;QACH,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAEzE,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,aAAa,EAAE,sBAAsB,CAAC;gBACpC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACvD,YAAY,EAAE,MAAM,CAAC,SAAS;aAC/B,CAAC;SACH;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,UAAU,EAAE,gBAAgB;YAC5B,YAAY,EAAE,uBAAuB,CAAC;gBACpC,aAAa,EAAE,QAAQ;gBACvB,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC;SACH;QACD,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,WAAW,EAAE,+BAA+B;YAC5C,mBAAmB,EAAE,+BAA+B;SACrD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,OAAO;QACL,mBAAmB,OAAO,CAAC,YAAY,EAAE;QACzC,mBAAmB,OAAO,CAAC,SAAS,EAAE;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/installer/agents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/installer/agents.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAyND,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC,CA2Ef;AAED,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/installer/agents.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
2
|
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
3
|
-
import { dirname
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
import * as clack from "@clack/prompts";
|
|
6
6
|
import color from "picocolors";
|
|
7
7
|
import { APP_NAME } from "../brand.js";
|
|
8
|
-
import { agentConnectionDetails,
|
|
8
|
+
import { agentConnectionDetails, CHATGPT_CONNECTORS_ADVANCED_URL, getConnectorsDocsUrl, } from "./agent-instructions.js";
|
|
9
9
|
import { copyToClipboard } from "./clipboard.js";
|
|
10
|
-
import {
|
|
10
|
+
import { DATA_DIR_DISPLAY } from "./data-dir.js";
|
|
11
|
+
import { openBrowser } from "./platform.js";
|
|
11
12
|
import { buildPokeLoginCommand, POKE_LOCKIN_RECIPE_URL } from "./poke.js";
|
|
12
13
|
import { isPokeLoggedIn } from "./poke.js";
|
|
13
14
|
const execFileAsync = promisify(execFile);
|
|
@@ -78,8 +79,10 @@ async function setupPoke(details, relayReady) {
|
|
|
78
79
|
if (!relayReady) {
|
|
79
80
|
clack.log.warn("Relay was not verified during install. If Poke rejects the URL, finish background service setup and retry.");
|
|
80
81
|
}
|
|
81
|
-
clack.log.info("Opening Poke integration form (
|
|
82
|
+
clack.log.info("Opening Poke integration form (name + URL pre-filled)...");
|
|
82
83
|
await openBrowser(details.pokeIntegrationUrl);
|
|
84
|
+
await copyToClipboard(details.authToken);
|
|
85
|
+
clack.log.success("API key copied — paste in Poke when prompted");
|
|
83
86
|
const spinner = clack.spinner();
|
|
84
87
|
spinner.start("Registering LockIn MCP with Poke CLI...");
|
|
85
88
|
try {
|
|
@@ -113,58 +116,49 @@ async function setupPoke(details, relayReady) {
|
|
|
113
116
|
clack.note([
|
|
114
117
|
"In the Poke tab that just opened:",
|
|
115
118
|
`1. Confirm URL: ${color.cyan(details.poke.mcpUrl)}`,
|
|
116
|
-
|
|
119
|
+
"2. Paste API key when prompted (already copied to clipboard)",
|
|
117
120
|
"3. Click Create Integration",
|
|
118
121
|
`4. Install the LockIn recipe: ${color.cyan(POKE_LOCKIN_RECIPE_URL)}`,
|
|
119
122
|
"5. Start a new Poke chat",
|
|
120
123
|
].join("\n"), "Poke setup");
|
|
121
|
-
await copyToClipboard(details.authToken);
|
|
122
|
-
clack.log.success("API key copied to clipboard");
|
|
123
124
|
}
|
|
124
|
-
async function
|
|
125
|
+
async function setupClaudeDesktop(details) {
|
|
125
126
|
await mergeMcpServersConfig(details.claude.configPath, "lockin-mcp", remoteServerConfig(details.claude.mcpUrl, details.authToken));
|
|
126
|
-
clack.log.success(`
|
|
127
|
-
clack.log.info("Restart Claude Desktop
|
|
127
|
+
clack.log.success(`Claude Desktop configured (${details.claude.configPath})`);
|
|
128
|
+
clack.log.info("Restart Claude Desktop, then start a new chat with LockIn enabled.");
|
|
129
|
+
}
|
|
130
|
+
async function connectInstantly(params) {
|
|
131
|
+
if (params.clipboardText) {
|
|
132
|
+
const copied = await copyToClipboard(params.clipboardText);
|
|
133
|
+
if (copied) {
|
|
134
|
+
clack.log.success(params.clipboardSuccessMessage ?? "Copied to clipboard");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
await openBrowser(params.openUrl);
|
|
138
|
+
clack.log.info(params.afterOpenNote);
|
|
139
|
+
}
|
|
140
|
+
async function setupClaudeWeb(details) {
|
|
141
|
+
await connectInstantly({
|
|
142
|
+
openUrl: details.claude.connectorUrl,
|
|
143
|
+
clipboardText: details.authToken,
|
|
144
|
+
clipboardSuccessMessage: "API key copied to clipboard",
|
|
145
|
+
afterOpenNote: "Claude opened — leave Advanced settings empty. Do not paste your API key in OAuth Client ID or Secret. " +
|
|
146
|
+
"Click Add, then enable LockIn in a new chat and sign in when Claude prompts. " +
|
|
147
|
+
"For Bearer auth, choose Claude Desktop in the installer instead.",
|
|
148
|
+
});
|
|
128
149
|
}
|
|
129
150
|
async function setupChatGPT(details) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
message: "What should we do next?",
|
|
138
|
-
options: [
|
|
139
|
-
{ value: "url", label: "Copy MCP URL" },
|
|
140
|
-
{ value: "key", label: "Copy API key" },
|
|
141
|
-
{ value: "open", label: "Open ChatGPT Connectors settings" },
|
|
142
|
-
{ value: "skip", label: "Done" },
|
|
143
|
-
],
|
|
151
|
+
await connectInstantly({
|
|
152
|
+
openUrl: CHATGPT_CONNECTORS_ADVANCED_URL,
|
|
153
|
+
clipboardText: details.chatgpt.mcpUrl,
|
|
154
|
+
clipboardSuccessMessage: "MCP URL copied — paste when creating the connector",
|
|
155
|
+
afterOpenNote: "ChatGPT opened — enable Developer mode, create a connector, paste the MCP URL, " +
|
|
156
|
+
"set Authentication to OAuth, and leave DCR enabled. Sign in on lockinmcp.com when ChatGPT prompts — " +
|
|
157
|
+
"do not paste your API key in OAuth fields.",
|
|
144
158
|
});
|
|
145
|
-
if (clack.isCancel(action) || action === "skip") {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
if (action === "url") {
|
|
149
|
-
await copyToClipboard(details.chatgpt.mcpUrl);
|
|
150
|
-
clack.log.success("MCP URL copied");
|
|
151
|
-
}
|
|
152
|
-
if (action === "key") {
|
|
153
|
-
await copyToClipboard(details.authToken);
|
|
154
|
-
clack.log.success("API key copied");
|
|
155
|
-
}
|
|
156
|
-
if (action === "open") {
|
|
157
|
-
await openBrowser(CHATGPT_CONNECTORS_URL);
|
|
158
|
-
}
|
|
159
159
|
}
|
|
160
|
-
function showCredentialsCard(
|
|
161
|
-
|
|
162
|
-
clack.note([
|
|
163
|
-
formatCredentialsCard(details),
|
|
164
|
-
"",
|
|
165
|
-
color.dim("One URL for all agents. Poke uses the same server automatically."),
|
|
166
|
-
color.dim(`Saved in ${manifestPath}`),
|
|
167
|
-
].join("\n"), "Your LockIn MCP credentials");
|
|
160
|
+
function showCredentialsCard() {
|
|
161
|
+
clack.log.info(color.dim(`MCP URL + API key saved in ${DATA_DIR_DISPLAY}/setup-manifest.json`));
|
|
168
162
|
}
|
|
169
163
|
export async function promptConnectAgent(params) {
|
|
170
164
|
if (!params.authToken) {
|
|
@@ -176,7 +170,7 @@ export async function promptConnectAgent(params) {
|
|
|
176
170
|
pokeIntegrationUrl: params.pokeIntegrationUrl,
|
|
177
171
|
authToken: params.authToken,
|
|
178
172
|
});
|
|
179
|
-
showCredentialsCard(
|
|
173
|
+
showCredentialsCard();
|
|
180
174
|
const choice = await clack.select({
|
|
181
175
|
message: "Connect your AI agent",
|
|
182
176
|
options: [
|
|
@@ -186,14 +180,24 @@ export async function promptConnectAgent(params) {
|
|
|
186
180
|
hint: "opens poke.com/integrations/new",
|
|
187
181
|
},
|
|
188
182
|
{
|
|
189
|
-
value: "claude",
|
|
183
|
+
value: "claude-web",
|
|
184
|
+
label: "Claude (claude.ai)",
|
|
185
|
+
hint: "opens connector + OAuth sign-in",
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
value: "claude-desktop",
|
|
190
189
|
label: "Claude Desktop",
|
|
191
|
-
hint: "writes
|
|
190
|
+
hint: "auto-writes config (Bearer auth)",
|
|
192
191
|
},
|
|
193
192
|
{
|
|
194
193
|
value: "chatgpt",
|
|
195
194
|
label: "ChatGPT",
|
|
196
|
-
hint: "
|
|
195
|
+
hint: "Advanced Connectors + developer mode",
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
value: "guide",
|
|
199
|
+
label: "Open connector setup guide",
|
|
200
|
+
hint: getConnectorsDocsUrl(),
|
|
197
201
|
},
|
|
198
202
|
{
|
|
199
203
|
value: "skip",
|
|
@@ -205,12 +209,19 @@ export async function promptConnectAgent(params) {
|
|
|
205
209
|
if (clack.isCancel(choice) || choice === "skip") {
|
|
206
210
|
return;
|
|
207
211
|
}
|
|
212
|
+
if (choice === "guide") {
|
|
213
|
+
await openBrowser(getConnectorsDocsUrl());
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
208
216
|
switch (choice) {
|
|
209
217
|
case "poke":
|
|
210
218
|
await setupPoke(details, params.publicTunnelVerified);
|
|
211
219
|
break;
|
|
212
|
-
case "claude":
|
|
213
|
-
await
|
|
220
|
+
case "claude-web":
|
|
221
|
+
await setupClaudeWeb(details);
|
|
222
|
+
break;
|
|
223
|
+
case "claude-desktop":
|
|
224
|
+
await setupClaudeDesktop(details);
|
|
214
225
|
break;
|
|
215
226
|
case "chatgpt":
|
|
216
227
|
await setupChatGPT(details);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/installer/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/installer/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Previous config directory names — migrated to {@link STATE_DIR_NAME} on first run. */
|
|
2
|
+
export declare const LEGACY_STATE_DIR_NAMES: readonly [".mac-distraction-blocker"];
|
|
3
|
+
export declare const DATA_DIR_DISPLAY = "~/.lockin";
|
|
4
|
+
export declare function getDataDirPath(): string;
|
|
5
|
+
/** Prefer `~/.lockin`, migrating legacy `~/.mac-distraction-blocker` if present. */
|
|
6
|
+
export declare function ensureDataDirMigrated(): Promise<string>;
|
|
7
|
+
//# sourceMappingURL=data-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-dir.d.ts","sourceRoot":"","sources":["../../src/installer/data-dir.ts"],"names":[],"mappings":"AAKA,yFAAyF;AACzF,eAAO,MAAM,sBAAsB,uCAAwC,CAAC;AAE5E,eAAO,MAAM,gBAAgB,cAAwB,CAAC;AAEtD,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAWD,oFAAoF;AACpF,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAkB7D"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { access, mkdir, rename } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { STATE_DIR_NAME } from "../types.js";
|
|
5
|
+
/** Previous config directory names — migrated to {@link STATE_DIR_NAME} on first run. */
|
|
6
|
+
export const LEGACY_STATE_DIR_NAMES = [".mac-distraction-blocker"];
|
|
7
|
+
export const DATA_DIR_DISPLAY = `~/${STATE_DIR_NAME}`;
|
|
8
|
+
export function getDataDirPath() {
|
|
9
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? homedir();
|
|
10
|
+
return join(home, STATE_DIR_NAME);
|
|
11
|
+
}
|
|
12
|
+
async function pathExists(path) {
|
|
13
|
+
try {
|
|
14
|
+
await access(path);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Prefer `~/.lockin`, migrating legacy `~/.mac-distraction-blocker` if present. */
|
|
22
|
+
export async function ensureDataDirMigrated() {
|
|
23
|
+
const dataDir = getDataDirPath();
|
|
24
|
+
if (await pathExists(dataDir)) {
|
|
25
|
+
return dataDir;
|
|
26
|
+
}
|
|
27
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? homedir();
|
|
28
|
+
for (const legacyName of LEGACY_STATE_DIR_NAMES) {
|
|
29
|
+
const legacyDir = join(home, legacyName);
|
|
30
|
+
if (await pathExists(legacyDir)) {
|
|
31
|
+
await rename(legacyDir, dataDir);
|
|
32
|
+
return dataDir;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
await mkdir(dataDir, { recursive: true, mode: 0o700 });
|
|
36
|
+
return dataDir;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-dir.js","sourceRoot":"","sources":["../../src/installer/data-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,yFAAyF;AACzF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,0BAA0B,CAAU,CAAC;AAE5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,cAAc,EAAE,CAAC;AAEtD,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;IACtE,OAAO,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;IACtE,KAAK,MAAM,UAAU,IAAI,sBAAsB,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzC,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjC,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-dir.test.d.ts","sourceRoot":"","sources":["../../src/installer/data-dir.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { access, mkdir, mkdtemp, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { STATE_DIR_NAME } from "../types.js";
|
|
6
|
+
import { ensureDataDirMigrated, getDataDirPath, LEGACY_STATE_DIR_NAMES, } from "./data-dir.js";
|
|
7
|
+
async function withTempHome(fn) {
|
|
8
|
+
const home = await mkdtemp(join(tmpdir(), "lockin-home-"));
|
|
9
|
+
const prevHome = process.env.HOME;
|
|
10
|
+
const prevUserProfile = process.env.USERPROFILE;
|
|
11
|
+
process.env.HOME = home;
|
|
12
|
+
process.env.USERPROFILE = home;
|
|
13
|
+
try {
|
|
14
|
+
await fn(home);
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
if (prevHome === undefined) {
|
|
18
|
+
delete process.env.HOME;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
process.env.HOME = prevHome;
|
|
22
|
+
}
|
|
23
|
+
if (prevUserProfile === undefined) {
|
|
24
|
+
delete process.env.USERPROFILE;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
process.env.USERPROFILE = prevUserProfile;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
describe("data-dir", () => {
|
|
32
|
+
it("creates ~/.lockin when no config dir exists", async () => {
|
|
33
|
+
await withTempHome(async (home) => {
|
|
34
|
+
const dir = await ensureDataDirMigrated();
|
|
35
|
+
expect(dir).toBe(join(home, STATE_DIR_NAME));
|
|
36
|
+
await access(dir);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it("returns existing ~/.lockin without changes", async () => {
|
|
40
|
+
await withTempHome(async (home) => {
|
|
41
|
+
const dataDir = join(home, STATE_DIR_NAME);
|
|
42
|
+
await mkdir(dataDir, { recursive: true });
|
|
43
|
+
await writeFile(join(dataDir, "state.json"), "{}\n");
|
|
44
|
+
const dir = await ensureDataDirMigrated();
|
|
45
|
+
expect(dir).toBe(dataDir);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
it("migrates legacy ~/.mac-distraction-blocker to ~/.lockin", async () => {
|
|
49
|
+
await withTempHome(async (home) => {
|
|
50
|
+
const legacyDir = join(home, LEGACY_STATE_DIR_NAMES[0]);
|
|
51
|
+
await mkdir(legacyDir, { recursive: true });
|
|
52
|
+
await writeFile(join(legacyDir, "state.json"), '{"blockedDomains":[]}\n');
|
|
53
|
+
const dir = await ensureDataDirMigrated();
|
|
54
|
+
expect(dir).toBe(getDataDirPath());
|
|
55
|
+
await access(join(dir, "state.json"));
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=data-dir.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-dir.test.js","sourceRoot":"","sources":["../../src/installer/data-dir.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/installer/platform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/installer/platform.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAI3D,wBAAgB,cAAc,IAAI,YAAY,CA6B7C;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrE;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB5D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
|
+
import { getDataDirPath } from "./data-dir.js";
|
|
3
4
|
const execFileAsync = promisify(execFile);
|
|
4
5
|
export function detectPlatform() {
|
|
5
6
|
const platform = process.platform;
|
|
@@ -70,7 +71,6 @@ export async function openBrowser(url) {
|
|
|
70
71
|
console.log(`Open this URL in your browser:\n ${url}`);
|
|
71
72
|
}
|
|
72
73
|
export function getInstallDir() {
|
|
73
|
-
|
|
74
|
-
return `${home}/.mac-distraction-blocker`;
|
|
74
|
+
return getDataDirPath();
|
|
75
75
|
}
|
|
76
76
|
//# sourceMappingURL=platform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/installer/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/installer/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poke.d.ts","sourceRoot":"","sources":["../../src/installer/poke.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"poke.d.ts","sourceRoot":"","sources":["../../src/installer/poke.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CAaT;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,4FAA4F;AAC5F,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CAST;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,eAAO,MAAM,yBAAyB,QAAsC,CAAC;AAC7E,eAAO,MAAM,qBAAqB,QAAkC,CAAC;AAErE,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,QAAQ,CAyCX;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBzB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAyClF;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAWvD"}
|
package/dist/installer/poke.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { APP_NAME, POKE_LOCKIN_RECIPE_URL } from "../brand.js";
|
|
1
|
+
import { APP_NAME, ICON_URL, POKE_LOCKIN_RECIPE_URL } from "../brand.js";
|
|
2
2
|
import { execFile } from "node:child_process";
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { promisify } from "node:util";
|
|
7
|
+
import { DATA_DIR_DISPLAY } from "./data-dir.js";
|
|
7
8
|
const execFileAsync = promisify(execFile);
|
|
8
9
|
const POKE_FRONTEND = process.env.POKE_FRONTEND ?? "https://poke.com";
|
|
9
10
|
export function publicMcpUrl(publicBaseUrl) {
|
|
@@ -67,11 +68,8 @@ export function buildPokeUrls(params) {
|
|
|
67
68
|
const integrationQuery = new URLSearchParams({
|
|
68
69
|
name: integrationName,
|
|
69
70
|
url: mcpUrl,
|
|
70
|
-
iconUrl: process.env.MDB_ICON_URL ??
|
|
71
|
+
iconUrl: process.env.MDB_ICON_URL ?? ICON_URL,
|
|
71
72
|
});
|
|
72
|
-
if (params.mcpAuthToken) {
|
|
73
|
-
integrationQuery.set("apiKey", params.mcpAuthToken);
|
|
74
|
-
}
|
|
75
73
|
const recipeQuery = new URLSearchParams({
|
|
76
74
|
name: recipeName,
|
|
77
75
|
description: recipeDescription,
|
|
@@ -79,16 +77,10 @@ export function buildPokeUrls(params) {
|
|
|
79
77
|
integrationName,
|
|
80
78
|
integrationUrl: mcpUrl,
|
|
81
79
|
});
|
|
82
|
-
if (params.mcpAuthToken) {
|
|
83
|
-
recipeQuery.set("integrationApiKey", params.mcpAuthToken);
|
|
84
|
-
}
|
|
85
80
|
const templateQuery = new URLSearchParams({
|
|
86
81
|
name: integrationName,
|
|
87
82
|
url: mcpUrl,
|
|
88
83
|
});
|
|
89
|
-
if (params.mcpAuthToken) {
|
|
90
|
-
templateQuery.set("apiKey", params.mcpAuthToken);
|
|
91
|
-
}
|
|
92
84
|
return {
|
|
93
85
|
integrationUrl: `${POKE_FRONTEND}/integrations/new?${integrationQuery.toString()}`,
|
|
94
86
|
recipeUrl: `${POKE_FRONTEND}/kitchen/recipes/new?${recipeQuery.toString()}`,
|
|
@@ -129,11 +121,11 @@ export function formatSetupSummary(manifest, urls) {
|
|
|
129
121
|
if (manifest.mcpAuthToken) {
|
|
130
122
|
lines.push(`MCP API key: ${manifest.mcpAuthToken}`);
|
|
131
123
|
}
|
|
132
|
-
lines.push("", "Poke — recommended: install the LockIn recipe for best focus coaching:", ` ${POKE_LOCKIN_RECIPE_URL}`, "", "Poke — integration setup (
|
|
124
|
+
lines.push("", "Poke — recommended: install the LockIn recipe for best focus coaching:", ` ${POKE_LOCKIN_RECIPE_URL}`, "", "Poke — integration setup (name + URL pre-filled in browser link):", ` Integration: ${urls.integrationUrl}`, ` Recipe: ${urls.recipeUrl}`, ` Template: ${urls.kitchenTemplateUrl}`);
|
|
133
125
|
if (manifest.pokeRecipeUrl) {
|
|
134
126
|
lines.push(` CLI recipe: ${manifest.pokeRecipeUrl}`);
|
|
135
127
|
}
|
|
136
|
-
lines.push("", `Setup manifest:
|
|
128
|
+
lines.push("", `Setup manifest: ${DATA_DIR_DISPLAY}/setup-manifest.json`, "");
|
|
137
129
|
return lines.join("\n");
|
|
138
130
|
}
|
|
139
131
|
export function pokeConfigDir() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poke.js","sourceRoot":"","sources":["../../src/installer/poke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"poke.js","sourceRoot":"","sources":["../../src/installer/poke.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/installer/port.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/installer/port.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAatE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASpE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB/E;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BvE"}
|
package/dist/installer/port.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createServer } from "node:net";
|
|
2
|
+
import { localHttpRequest } from "../local-http.js";
|
|
2
3
|
export const DEFAULT_LOCKIN_MCP_PORT = 3847;
|
|
3
4
|
export async function fetchLockInHealth(port) {
|
|
4
5
|
try {
|
|
5
|
-
const response = await
|
|
6
|
-
|
|
6
|
+
const response = await localHttpRequest(`http://127.0.0.1:${port}/health`, {
|
|
7
|
+
timeoutMs: 2000,
|
|
7
8
|
});
|
|
8
9
|
if (!response.ok) {
|
|
9
10
|
return false;
|
|
@@ -27,8 +28,8 @@ export async function isPortAvailable(port) {
|
|
|
27
28
|
}
|
|
28
29
|
export async function describePortConflict(port) {
|
|
29
30
|
try {
|
|
30
|
-
const response = await
|
|
31
|
-
|
|
31
|
+
const response = await localHttpRequest(`http://127.0.0.1:${port}/health`, {
|
|
32
|
+
timeoutMs: 2000,
|
|
32
33
|
});
|
|
33
34
|
if (!response.ok) {
|
|
34
35
|
return `Port ${port} responds but /health failed (${response.status})`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/installer/port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/installer/port.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-provision.d.ts","sourceRoot":"","sources":["../../src/installer/relay-provision.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AA6BD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiBhC;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"relay-provision.d.ts","sourceRoot":"","sources":["../../src/installer/relay-provision.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AA6BD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiBhC;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgC9B"}
|