@launchchair/agent 0.4.5 → 0.4.7
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/AGENTS.md +5 -4
- package/README.md +2 -2
- package/launchchair-cli.mjs +12 -8
- package/local-bridge.mjs +1 -1
- package/mcp-bridge-server.mjs +1 -1
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -111,15 +111,16 @@ The build folder can be an empty scratch folder until Stack Setup creates or rec
|
|
|
111
111
|
|
|
112
112
|
```toml
|
|
113
113
|
[mcp_servers.launchchair]
|
|
114
|
-
command = "
|
|
115
|
-
args = ["mcp-server"]
|
|
114
|
+
command = "/absolute/path/to/node"
|
|
115
|
+
args = ["/absolute/path/to/launchchair-cli.mjs", "mcp-server"]
|
|
116
116
|
required = false
|
|
117
|
-
startup_timeout_sec =
|
|
117
|
+
startup_timeout_sec = 45
|
|
118
118
|
tool_timeout_sec = 3600
|
|
119
119
|
default_tools_approval_mode = "approve"
|
|
120
120
|
|
|
121
121
|
[mcp_servers.launchchair.env]
|
|
122
122
|
LAUNCHCHAIR_BASE_URL = "https://www.launchchair.io"
|
|
123
|
+
LAUNCHCHAIR_CONFIG_DIR = "/absolute/path/to/.launchchair"
|
|
123
124
|
LAUNCHCHAIR_PROJECT_ID = ""
|
|
124
125
|
LC_AGENT_ROUTER_GPT_TARGET = "codex"
|
|
125
126
|
LC_AGENT_ROUTER_CODEX_TARGET = "codex"
|
|
@@ -129,7 +130,7 @@ LC_AGENT_CODEX_CWD = "/absolute/path/to/the-folder-codex-should-build-into"
|
|
|
129
130
|
# LAUNCHCHAIR_AGENT_TOKEN = "<full lc_at token from Settings API Access>"
|
|
130
131
|
```
|
|
131
132
|
|
|
132
|
-
|
|
133
|
+
Prefer `launchchair setup codex --cwd /absolute/path/to/build-folder --write-config` or `launchchair mcp-config codex --ui-fields` so the CLI prints exact local command, argument, and saved-config paths for this machine.
|
|
133
134
|
|
|
134
135
|
## What To Do First In A Fresh Chat
|
|
135
136
|
|
package/README.md
CHANGED
|
@@ -145,9 +145,9 @@ Print a Claude Desktop MCP config example:
|
|
|
145
145
|
launchchair mcp-config claude
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
-
The recommended config launches `launchchair mcp-
|
|
148
|
+
The recommended config launches the MCP server through the exact Node executable and CLI file path generated by `launchchair setup` or `launchchair mcp-config`. It also pins `LAUNCHCHAIR_CONFIG_DIR` to the exact directory used by `launchchair login`, so Codex and Claude users do not need to paste tokens into MCP config after browser login—even when the desktop app starts with a different home or shell environment.
|
|
149
149
|
|
|
150
|
-
Use `LAUNCHCHAIR_AGENT_TOKEN` only as a manual fallback when you skip `launchchair login`, need a per-client token override, or your desktop app cannot read the saved CLI config. If a desktop
|
|
150
|
+
Use `LAUNCHCHAIR_AGENT_TOKEN` only as a manual fallback when you skip `launchchair login`, need a per-client token override, or your desktop app cannot read the saved CLI config. If you use a desktop custom MCP form, run `launchchair mcp-config codex --ui-fields` or `launchchair mcp-config claude --ui-fields` and paste the printed command, each argument, env vars, and working directory exactly as shown.
|
|
151
151
|
|
|
152
152
|
## Local Bridge
|
|
153
153
|
|
package/launchchair-cli.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import path from "node:path";
|
|
|
15
15
|
import process from "node:process";
|
|
16
16
|
import { fileURLToPath } from "node:url";
|
|
17
17
|
|
|
18
|
-
const VERSION = "0.4.
|
|
18
|
+
const VERSION = "0.4.7";
|
|
19
19
|
const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
20
20
|
const DEFAULT_BASE_URL = "https://www.launchchair.io";
|
|
21
21
|
const CONFIG_DIR = process.env.LAUNCHCHAIR_CONFIG_DIR?.trim()
|
|
@@ -729,6 +729,7 @@ function buildBridgeEnv(projectId = defaultProjectId()) {
|
|
|
729
729
|
const childEnv = {
|
|
730
730
|
...process.env,
|
|
731
731
|
LAUNCHCHAIR_BASE_URL: baseUrl(),
|
|
732
|
+
LAUNCHCHAIR_CONFIG_DIR: CONFIG_DIR,
|
|
732
733
|
LAUNCHCHAIR_AGENT_TOKEN: token(),
|
|
733
734
|
LAUNCHCHAIR_PROJECT_ID: projectId,
|
|
734
735
|
LC_AGENT_CODEX_CWD: configValue("codexCwd", ["LC_AGENT_CODEX_CWD"], ""),
|
|
@@ -848,6 +849,7 @@ function mcpEnvForTarget(target, options = {}) {
|
|
|
848
849
|
const cwd = configValue(details.cwdConfigKey, [details.cwdEnvName], "/absolute/path/to/repo-or-empty-folder");
|
|
849
850
|
const envBlock = {
|
|
850
851
|
LAUNCHCHAIR_BASE_URL: baseUrl(),
|
|
852
|
+
LAUNCHCHAIR_CONFIG_DIR: CONFIG_DIR,
|
|
851
853
|
...(token() || !includeTokenPlaceholder ? {} : { LAUNCHCHAIR_AGENT_TOKEN: "<optional full lc_at token when launchchair login was not used>" }),
|
|
852
854
|
...(projectId ? { LAUNCHCHAIR_PROJECT_ID: projectId } : {}),
|
|
853
855
|
LC_AGENT_ROUTER_GPT_TARGET: details.routerTarget,
|
|
@@ -858,9 +860,10 @@ function mcpEnvForTarget(target, options = {}) {
|
|
|
858
860
|
}
|
|
859
861
|
|
|
860
862
|
function mcpServerConfig(target, options = {}) {
|
|
863
|
+
const cliPath = path.join(SCRIPT_DIR, "launchchair-cli.mjs");
|
|
861
864
|
return {
|
|
862
|
-
command:
|
|
863
|
-
args: ["mcp-server"],
|
|
865
|
+
command: process.execPath,
|
|
866
|
+
args: [cliPath, "mcp-server"],
|
|
864
867
|
env: mcpEnvForTarget(target, options),
|
|
865
868
|
};
|
|
866
869
|
}
|
|
@@ -882,11 +885,12 @@ function renderMcpConfig(target, options = {}) {
|
|
|
882
885
|
const envLines = Object.entries(server.env)
|
|
883
886
|
.map(([key, value]) => `${key} = ${tomlString(value)}`)
|
|
884
887
|
.join("\n");
|
|
888
|
+
const argsLine = server.args.map(tomlString).join(", ");
|
|
885
889
|
return `[mcp_servers.launchchair]
|
|
886
|
-
command =
|
|
887
|
-
args = [
|
|
890
|
+
command = ${tomlString(server.command)}
|
|
891
|
+
args = [${argsLine}]
|
|
888
892
|
required = false
|
|
889
|
-
startup_timeout_sec =
|
|
893
|
+
startup_timeout_sec = 45
|
|
890
894
|
tool_timeout_sec = 3600
|
|
891
895
|
default_tools_approval_mode = "approve"
|
|
892
896
|
|
|
@@ -913,7 +917,7 @@ Command to launch
|
|
|
913
917
|
${server.command}
|
|
914
918
|
|
|
915
919
|
Arguments
|
|
916
|
-
|
|
920
|
+
${server.args.map((arg) => ` ${arg}`).join("\n")}
|
|
917
921
|
|
|
918
922
|
Environment variables
|
|
919
923
|
${envLines}
|
|
@@ -1219,7 +1223,7 @@ async function setup(args) {
|
|
|
1219
1223
|
print(`1. Paste the MCP config above into ${details.label}.`);
|
|
1220
1224
|
print(`2. Restart or reload ${details.label} so the MCP server is exposed to fresh chats.`);
|
|
1221
1225
|
}
|
|
1222
|
-
print("3.
|
|
1226
|
+
print("3. Use the generated command and argument fields exactly as printed; setup resolves the local Node and CLI paths for this machine.");
|
|
1223
1227
|
print("4. Keep this bridge running when you want LaunchChair's Run with agent button to work:");
|
|
1224
1228
|
print(` ${paint("launchchair bridge", "cyan")}`);
|
|
1225
1229
|
print("5. Start a fresh agent chat. The agent should discover the LaunchChair skill and MCP server instructions automatically.");
|
package/local-bridge.mjs
CHANGED
|
@@ -17,7 +17,7 @@ import process from "node:process";
|
|
|
17
17
|
import { fileURLToPath } from "node:url";
|
|
18
18
|
import { buildRunnerCommand, parseRunnerCommand } from "./runner-command.mjs";
|
|
19
19
|
|
|
20
|
-
const VERSION = "0.4.
|
|
20
|
+
const VERSION = "0.4.7";
|
|
21
21
|
const CLIENT_TYPES = ["codex", "chatgpt", "claude", "claude_code", "other"];
|
|
22
22
|
const AGENT_SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
23
23
|
const CONFIG_DIR = process.env.LAUNCHCHAIR_CONFIG_DIR?.trim()
|
package/mcp-bridge-server.mjs
CHANGED
|
@@ -19,7 +19,7 @@ import process from "node:process";
|
|
|
19
19
|
import { fileURLToPath } from "node:url";
|
|
20
20
|
import { buildRunnerCommand, parseRunnerCommand } from "./runner-command.mjs";
|
|
21
21
|
|
|
22
|
-
const VERSION = "0.4.
|
|
22
|
+
const VERSION = "0.4.7";
|
|
23
23
|
const SERVER_NAME = "launchchair-agent-mcp";
|
|
24
24
|
const AGENT_SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
25
25
|
const CONFIG_DIR = process.env.LAUNCHCHAIR_CONFIG_DIR?.trim()
|
package/package.json
CHANGED