flockbay 0.10.49 → 0.10.52
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 +60 -60
- package/bin/flockbay-mcp.mjs +62 -62
- package/bin/flockbay.mjs +95 -95
- package/dist/{index-r3VTdgFI.cjs → index-IntvnrmZ.cjs} +71 -14
- package/dist/{index-D8AeVbvv.mjs → index-wkeSi0iC.mjs} +70 -13
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.mjs +1 -1
- package/dist/{migratePlugin-CEvGPul8.mjs → migratePlugin-C71hAoc5.mjs} +12 -2
- package/dist/{migratePlugin-wFK-k3Wk.cjs → migratePlugin-D1XjjWFq.cjs} +12 -2
- package/dist/{runCodex-DuyuYqoB.cjs → runCodex-B7i_ICoQ.cjs} +34 -23
- package/dist/{runCodex-ZfUyhHF6.mjs → runCodex-BSx-hCu6.mjs} +34 -23
- package/dist/{runGemini-DBU1mMdp.mjs → runGemini-Dwyh7_WI.mjs} +2 -2
- package/dist/{runGemini-D7j5Y5TF.cjs → runGemini-gBKR3rdL.cjs} +2 -2
- package/dist/{types-DNr0xwSy.cjs → types-5z8UADAi.cjs} +224 -15
- package/dist/{types-BRJuZQj_.mjs → types-Bgzap7qR.mjs} +224 -16
- package/package.json +131 -131
- package/scripts/claude_local_launcher.cjs +72 -72
- package/scripts/claude_remote_launcher.cjs +15 -15
- package/scripts/claude_version_utils.cjs +445 -445
- package/scripts/ripgrep_launcher.cjs +32 -32
- package/scripts/run-with-root-env.mjs +37 -32
- package/scripts/session_hook_forwarder.cjs +49 -49
- package/scripts/test-codex-abort-history.mjs +77 -77
- package/scripts/unpack-tools.cjs +244 -244
- package/tools/licenses/difftastic-LICENSE +21 -21
- package/tools/licenses/ripgrep-LICENSE +3 -3
- package/tools/unreal-mcp/UPSTREAM_VERSION.md +8 -8
- package/tools/unreal-mcp/upstream/Docs/README.md +8 -8
- package/tools/unreal-mcp/upstream/Docs/Tools/README.md +6 -6
- package/tools/unreal-mcp/upstream/Docs/Tools/actor_tools.md +183 -183
- package/tools/unreal-mcp/upstream/Docs/Tools/blueprint_tools.md +268 -268
- package/tools/unreal-mcp/upstream/Docs/Tools/editor_tools.md +104 -104
- package/tools/unreal-mcp/upstream/Docs/Tools/node_tools.md +274 -274
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Config/FilterPlugin.ini +8 -8
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/FlockbayMCP.uplugin +36 -36
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/FlockbayMCP.Build.cs +82 -82
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPBlueprintCommands.cpp +1364 -1364
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPBlueprintNodeCommands.cpp +1310 -1310
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPCommandSchema.cpp +756 -756
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPCommonUtils.cpp +1177 -1177
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPEditorCommands.cpp +2618 -2618
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPProjectCommands.cpp +71 -71
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/Commands/UnrealMCPUMGCommands.cpp +543 -543
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/MCPServerRunnable.cpp +372 -372
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/UnrealMCPBridge.cpp +457 -457
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Private/UnrealMCPModule.cpp +21 -21
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPBlueprintCommands.h +35 -35
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPBlueprintNodeCommands.h +30 -30
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPCommandSchema.h +41 -41
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPCommonUtils.h +59 -59
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPEditorCommands.h +61 -61
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPProjectCommands.h +20 -20
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/Commands/UnrealMCPUMGCommands.h +82 -82
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/MCPServerRunnable.h +33 -33
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/UnrealMCPBridge.h +64 -64
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/FlockbayMCP/Source/FlockbayMCP/Public/UnrealMCPModule.h +22 -22
- package/tools/unreal-mcp/upstream/Python/README.md +39 -39
- package/tools/unreal-mcp/upstream/Python/pyproject.toml +22 -22
- package/tools/unreal-mcp/upstream/Python/scripts/actors/test_cube.py +202 -202
- package/tools/unreal-mcp/upstream/Python/scripts/blueprints/test_create_and_spawn_blueprints_with_different_components.py +496 -496
- package/tools/unreal-mcp/upstream/Python/scripts/blueprints/test_create_and_spawn_cube_blueprint.py +193 -193
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_component_reference.py +266 -266
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_create_bird_blueprint_with_input_and_camera.py +617 -617
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_input_mapping.py +365 -365
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_physics_variables.py +389 -389
- package/tools/unreal-mcp/upstream/Python/tools/blueprint_tools.py +419 -419
- package/tools/unreal-mcp/upstream/Python/tools/editor_tools.py +369 -369
- package/tools/unreal-mcp/upstream/Python/tools/node_tools.py +429 -429
- package/tools/unreal-mcp/upstream/Python/tools/project_tools.py +63 -63
- package/tools/unreal-mcp/upstream/Python/tools/umg_tools.py +332 -332
- package/tools/unreal-mcp/upstream/Python/unreal_mcp_server.py +398 -398
- package/tools/unreal-mcp/upstream/Python/uv.lock +521 -521
|
@@ -2,7 +2,7 @@ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(im
|
|
|
2
2
|
import * as os from 'node:os';
|
|
3
3
|
import os__default, { homedir } from 'node:os';
|
|
4
4
|
import { randomUUID, createCipheriv, randomBytes, createHash as createHash$1 } from 'node:crypto';
|
|
5
|
-
import { l as logger, e as projectPath, f as backoff, g as delay, R as RawJSONLinesSchema, c as configuration, h as readDaemonState, j as clearDaemonState, p as packageJson, r as readSettings, k as readCredentials, u as updateSettings, o as openBrowser, w as writeCredentials, m as unrealMcpPythonDir, n as acquireDaemonLock,
|
|
5
|
+
import { l as logger, e as projectPath, f as backoff, g as delay, R as RawJSONLinesSchema, c as configuration, h as readDaemonState, j as clearDaemonState, p as packageJson, r as readSettings, k as readCredentials, u as updateSettings, o as openBrowser, w as writeCredentials, m as unrealMcpPythonDir, n as acquireDaemonLock, s as writeDaemonState, t as ApiMachineClient, v as releaseDaemonLock, x as sendUnrealMcpTcpCommand, A as ApiClient, y as validatePath, z as run, B as run$1, C as buildShellInvocation, D as clearCredentials, E as clearMachineId, F as authenticateCodex, G as syncCodexCliAuth, H as authenticateClaude, I as authenticateGemini, d as installUnrealMcpPluginToEngine, J as buildAndInstallUnrealMcpPlugin, i as installUnrealMcpPluginToProject, b as isInstalledEngineRoot, K as getLatestDaemonLog, L as normalizeServerUrlForNode } from './types-Bgzap7qR.mjs';
|
|
6
6
|
import { spawn, execFileSync, execSync } from 'node:child_process';
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import path__default, { resolve, join, dirname } from 'node:path';
|
|
@@ -960,7 +960,11 @@ async function claudeLocalLauncher(session) {
|
|
|
960
960
|
} catch (e) {
|
|
961
961
|
logger.debug("[local]: launch error", e);
|
|
962
962
|
if (!exitReason) {
|
|
963
|
-
|
|
963
|
+
const details = e instanceof Error ? e.message : String(e);
|
|
964
|
+
session.client.sendSessionEvent({
|
|
965
|
+
type: "message",
|
|
966
|
+
message: `Process exited unexpectedly${details ? `: ${details}` : ""}`
|
|
967
|
+
});
|
|
964
968
|
continue;
|
|
965
969
|
} else {
|
|
966
970
|
break;
|
|
@@ -1500,6 +1504,40 @@ async function streamToStdin(stream, stdin, abort) {
|
|
|
1500
1504
|
stdin.end();
|
|
1501
1505
|
}
|
|
1502
1506
|
|
|
1507
|
+
function trimProcessDiagnostic(text) {
|
|
1508
|
+
const lines = String(text || "").split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
1509
|
+
if (lines.length === 0) return "";
|
|
1510
|
+
return lines.slice(-8).join("\n");
|
|
1511
|
+
}
|
|
1512
|
+
function buildClaudeProcessExitMessage(args) {
|
|
1513
|
+
const stderrText = String(args.stderrText || "");
|
|
1514
|
+
const stderr = trimProcessDiagnostic(stderrText);
|
|
1515
|
+
const combined = [stderrText, args.spawnError?.message || ""].filter(Boolean).join("\n");
|
|
1516
|
+
if (/claude code is not installed/i.test(combined)) {
|
|
1517
|
+
return [
|
|
1518
|
+
"Claude Code is not installed on this machine.",
|
|
1519
|
+
"Install it, then restart Flockbay:",
|
|
1520
|
+
process$1.platform === "win32" ? " npm install -g @anthropic-ai/claude-code" : " npm install -g @anthropic-ai/claude-code"
|
|
1521
|
+
].join("\n");
|
|
1522
|
+
}
|
|
1523
|
+
if (/not recognized as an internal or external command|command not found|spawn .*enoent|enoent/i.test(combined)) {
|
|
1524
|
+
return [
|
|
1525
|
+
"Claude Code could not be found on PATH.",
|
|
1526
|
+
"Install it, then restart Flockbay:",
|
|
1527
|
+
" npm install -g @anthropic-ai/claude-code"
|
|
1528
|
+
].join("\n");
|
|
1529
|
+
}
|
|
1530
|
+
if (/git bash|bash\.exe|claude_code_git_bash_path/i.test(combined)) {
|
|
1531
|
+
return [
|
|
1532
|
+
"Claude Code could not start because Git Bash is missing or not configured.",
|
|
1533
|
+
"Install Git for Windows, then set CLAUDE_CODE_GIT_BASH_PATH to your bash.exe path and restart Flockbay."
|
|
1534
|
+
].join("\n");
|
|
1535
|
+
}
|
|
1536
|
+
if (stderr) {
|
|
1537
|
+
return `Claude Code process exited with code ${args.code}. Details: ${stderr}`;
|
|
1538
|
+
}
|
|
1539
|
+
return `Claude Code process exited with code ${args.code}`;
|
|
1540
|
+
}
|
|
1503
1541
|
class Query {
|
|
1504
1542
|
constructor(childStdin, childStdout, processExitPromise, canCallTool) {
|
|
1505
1543
|
this.childStdin = childStdin;
|
|
@@ -1769,11 +1807,17 @@ function query(config) {
|
|
|
1769
1807
|
streamToStdin(prompt, child.stdin, config.options?.abort);
|
|
1770
1808
|
childStdin = child.stdin;
|
|
1771
1809
|
}
|
|
1772
|
-
|
|
1773
|
-
|
|
1810
|
+
let stderrTail = "";
|
|
1811
|
+
const appendStderr = (chunk) => {
|
|
1812
|
+
stderrTail += chunk.toString();
|
|
1813
|
+
if (stderrTail.length > 32e3) stderrTail = stderrTail.slice(-16e3);
|
|
1814
|
+
};
|
|
1815
|
+
child.stderr.on("data", (data) => {
|
|
1816
|
+
appendStderr(data);
|
|
1817
|
+
if (process$1.env.DEBUG) {
|
|
1774
1818
|
console.error("Claude Code stderr:", data.toString());
|
|
1775
|
-
}
|
|
1776
|
-
}
|
|
1819
|
+
}
|
|
1820
|
+
});
|
|
1777
1821
|
const cleanup = () => {
|
|
1778
1822
|
if (!child.killed) {
|
|
1779
1823
|
child.kill("SIGTERM");
|
|
@@ -1787,7 +1831,7 @@ function query(config) {
|
|
|
1787
1831
|
query2.setError(new AbortError("Claude Code process aborted by user"));
|
|
1788
1832
|
}
|
|
1789
1833
|
if (code !== 0) {
|
|
1790
|
-
query2.setError(new Error(
|
|
1834
|
+
query2.setError(new Error(buildClaudeProcessExitMessage({ code, stderrText: stderrTail })));
|
|
1791
1835
|
} else {
|
|
1792
1836
|
resolve();
|
|
1793
1837
|
}
|
|
@@ -1798,7 +1842,7 @@ function query(config) {
|
|
|
1798
1842
|
if (config.options?.abort?.aborted) {
|
|
1799
1843
|
query2.setError(new AbortError("Claude Code process aborted by user"));
|
|
1800
1844
|
} else {
|
|
1801
|
-
query2.setError(new Error(
|
|
1845
|
+
query2.setError(new Error(buildClaudeProcessExitMessage({ code: null, stderrText: stderrTail, spawnError: error })));
|
|
1802
1846
|
}
|
|
1803
1847
|
});
|
|
1804
1848
|
processExitPromise.finally(() => {
|
|
@@ -2030,11 +2074,24 @@ function normalizeFilePathToken(token) {
|
|
|
2030
2074
|
function resolveCandidatePath(candidate, cwd) {
|
|
2031
2075
|
const raw = normalizeFilePathToken(candidate);
|
|
2032
2076
|
if (!raw) return raw;
|
|
2077
|
+
const isWindowsPath = (value) => {
|
|
2078
|
+
const v = String(value || "").trim();
|
|
2079
|
+
if (!v) return false;
|
|
2080
|
+
if (/^[a-zA-Z]:[\\/]/.test(v)) return true;
|
|
2081
|
+
if (v.startsWith("\\\\")) return true;
|
|
2082
|
+
return false;
|
|
2083
|
+
};
|
|
2084
|
+
const isPosixPath = (value) => String(value || "").trim().startsWith("/");
|
|
2085
|
+
const resolveApi = (() => {
|
|
2086
|
+
if (isWindowsPath(raw) || isWindowsPath(cwd)) return path__default.win32;
|
|
2087
|
+
if (isPosixPath(raw) || isPosixPath(cwd)) return path__default.posix;
|
|
2088
|
+
return path__default;
|
|
2089
|
+
})();
|
|
2033
2090
|
if (raw.startsWith("~/")) {
|
|
2034
2091
|
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
2035
|
-
if (home) return
|
|
2092
|
+
if (home) return resolveApi.join(home, raw.slice(2));
|
|
2036
2093
|
}
|
|
2037
|
-
return
|
|
2094
|
+
return resolveApi.isAbsolute(raw) ? raw : resolveApi.resolve(cwd, raw);
|
|
2038
2095
|
}
|
|
2039
2096
|
function isImageBlock(block) {
|
|
2040
2097
|
if (!block || typeof block !== "object") return false;
|
|
@@ -15190,7 +15247,7 @@ async function authAndSetupMachineIfNeeded() {
|
|
|
15190
15247
|
process.exit(1);
|
|
15191
15248
|
}
|
|
15192
15249
|
try {
|
|
15193
|
-
const { migrateUnrealMcpToFlockbayMcp } = await import('./migratePlugin-
|
|
15250
|
+
const { migrateUnrealMcpToFlockbayMcp } = await import('./migratePlugin-C71hAoc5.mjs');
|
|
15194
15251
|
const result = migrateUnrealMcpToFlockbayMcp({
|
|
15195
15252
|
engineRoot,
|
|
15196
15253
|
projectUprojectPath: project || void 0,
|
|
@@ -15346,7 +15403,7 @@ ${engineRoot}`;
|
|
|
15346
15403
|
} else if (subcommand === "codex") {
|
|
15347
15404
|
try {
|
|
15348
15405
|
await chdirToNearestUprojectRootIfPresent();
|
|
15349
|
-
const { runCodex } = await import('./runCodex-
|
|
15406
|
+
const { runCodex } = await import('./runCodex-BSx-hCu6.mjs');
|
|
15350
15407
|
let startedBy = void 0;
|
|
15351
15408
|
let sessionId = void 0;
|
|
15352
15409
|
for (let i = 1; i < args.length; i++) {
|
|
@@ -15448,7 +15505,7 @@ ${engineRoot}`;
|
|
|
15448
15505
|
}
|
|
15449
15506
|
try {
|
|
15450
15507
|
await chdirToNearestUprojectRootIfPresent();
|
|
15451
|
-
const { runGemini } = await import('./runGemini-
|
|
15508
|
+
const { runGemini } = await import('./runGemini-Dwyh7_WI.mjs');
|
|
15452
15509
|
let startedBy = void 0;
|
|
15453
15510
|
let sessionId = void 0;
|
|
15454
15511
|
for (let i = 1; i < args.length; i++) {
|
package/dist/index.cjs
CHANGED
package/dist/index.mjs
CHANGED
package/dist/lib.cjs
CHANGED
package/dist/lib.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-
|
|
1
|
+
export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-Bgzap7qR.mjs';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'node:fs';
|
|
4
4
|
import 'node:os';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs__default from 'node:fs';
|
|
2
2
|
import path__default from 'node:path';
|
|
3
|
-
import { i as installUnrealMcpPluginToProject, b as isInstalledEngineRoot, d as installUnrealMcpPluginToEngine } from './types-
|
|
3
|
+
import { i as installUnrealMcpPluginToProject, b as isInstalledEngineRoot, q as quarantineLegacyEnginePlugins, d as installUnrealMcpPluginToEngine } from './types-Bgzap7qR.mjs';
|
|
4
4
|
import 'axios';
|
|
5
5
|
import 'node:os';
|
|
6
6
|
import 'node:events';
|
|
@@ -141,9 +141,19 @@ Error: ${message}` };
|
|
|
141
141
|
if (projectUprojectPath) {
|
|
142
142
|
const installedProject = installUnrealMcpPluginToProject(projectUprojectPath);
|
|
143
143
|
if (!installedProject.ok) return { ok: false, errorMessage: installedProject.errorMessage };
|
|
144
|
+
if (isInstalledEngineRoot(engineRoot)) {
|
|
145
|
+
const quarantine = quarantineLegacyEnginePlugins(engineRoot);
|
|
146
|
+
if (!quarantine.ok) return { ok: false, errorMessage: quarantine.errorMessage };
|
|
147
|
+
}
|
|
144
148
|
return { ok: true, installedDestDir: installedProject.destDir, changedProjectPath, removedLegacyPluginDirs };
|
|
145
149
|
}
|
|
146
150
|
if (isInstalledEngineRoot(engineRoot)) {
|
|
151
|
+
const quarantine = quarantineLegacyEnginePlugins(engineRoot);
|
|
152
|
+
if (!quarantine.ok) return { ok: false, errorMessage: quarantine.errorMessage };
|
|
153
|
+
const disabledMeta = quarantine.disabledUpluginPaths.length ? `
|
|
154
|
+
|
|
155
|
+
Detected and disabled legacy engine plugin descriptor(s) to unblock builds:
|
|
156
|
+
` + quarantine.disabledUpluginPaths.map((p) => `- ${p}`).join("\n") : "";
|
|
147
157
|
return {
|
|
148
158
|
ok: false,
|
|
149
159
|
errorMessage: [
|
|
@@ -152,7 +162,7 @@ Error: ${message}` };
|
|
|
152
162
|
"",
|
|
153
163
|
"Fix: re-run migration with a project path to install as a project plugin:",
|
|
154
164
|
" flockbay unreal-mcp migrate --engine-root <ENGINE_ROOT> --project <PATH_TO_.UPROJECT> --remove-legacy"
|
|
155
|
-
].join("\n")
|
|
165
|
+
].join("\n") + disabledMeta
|
|
156
166
|
};
|
|
157
167
|
}
|
|
158
168
|
const installed = installUnrealMcpPluginToEngine(engineRoot);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var fs = require('node:fs');
|
|
4
4
|
var path = require('node:path');
|
|
5
|
-
var types = require('./types-
|
|
5
|
+
var types = require('./types-5z8UADAi.cjs');
|
|
6
6
|
require('axios');
|
|
7
7
|
require('node:os');
|
|
8
8
|
require('node:events');
|
|
@@ -143,9 +143,19 @@ Error: ${message}` };
|
|
|
143
143
|
if (projectUprojectPath) {
|
|
144
144
|
const installedProject = types.installUnrealMcpPluginToProject(projectUprojectPath);
|
|
145
145
|
if (!installedProject.ok) return { ok: false, errorMessage: installedProject.errorMessage };
|
|
146
|
+
if (types.isInstalledEngineRoot(engineRoot)) {
|
|
147
|
+
const quarantine = types.quarantineLegacyEnginePlugins(engineRoot);
|
|
148
|
+
if (!quarantine.ok) return { ok: false, errorMessage: quarantine.errorMessage };
|
|
149
|
+
}
|
|
146
150
|
return { ok: true, installedDestDir: installedProject.destDir, changedProjectPath, removedLegacyPluginDirs };
|
|
147
151
|
}
|
|
148
152
|
if (types.isInstalledEngineRoot(engineRoot)) {
|
|
153
|
+
const quarantine = types.quarantineLegacyEnginePlugins(engineRoot);
|
|
154
|
+
if (!quarantine.ok) return { ok: false, errorMessage: quarantine.errorMessage };
|
|
155
|
+
const disabledMeta = quarantine.disabledUpluginPaths.length ? `
|
|
156
|
+
|
|
157
|
+
Detected and disabled legacy engine plugin descriptor(s) to unblock builds:
|
|
158
|
+
` + quarantine.disabledUpluginPaths.map((p) => `- ${p}`).join("\n") : "";
|
|
149
159
|
return {
|
|
150
160
|
ok: false,
|
|
151
161
|
errorMessage: [
|
|
@@ -154,7 +164,7 @@ Error: ${message}` };
|
|
|
154
164
|
"",
|
|
155
165
|
"Fix: re-run migration with a project path to install as a project plugin:",
|
|
156
166
|
" flockbay unreal-mcp migrate --engine-root <ENGINE_ROOT> --project <PATH_TO_.UPROJECT> --remove-legacy"
|
|
157
|
-
].join("\n")
|
|
167
|
+
].join("\n") + disabledMeta
|
|
158
168
|
};
|
|
159
169
|
}
|
|
160
170
|
const installed = types.installUnrealMcpPluginToEngine(engineRoot);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var ink = require('ink');
|
|
4
4
|
var React = require('react');
|
|
5
|
-
var types = require('./types-
|
|
5
|
+
var types = require('./types-5z8UADAi.cjs');
|
|
6
6
|
var index_js = require('@modelcontextprotocol/sdk/client/index.js');
|
|
7
7
|
var z = require('zod');
|
|
8
8
|
var types_js = require('@modelcontextprotocol/sdk/types.js');
|
|
@@ -16,7 +16,7 @@ var process$1 = require('node:process');
|
|
|
16
16
|
var node_stream = require('node:stream');
|
|
17
17
|
var stdio_js$1 = require('@modelcontextprotocol/sdk/client/stdio.js');
|
|
18
18
|
var stdio_js = require('@modelcontextprotocol/sdk/shared/stdio.js');
|
|
19
|
-
var index = require('./index-
|
|
19
|
+
var index = require('./index-IntvnrmZ.cjs');
|
|
20
20
|
require('axios');
|
|
21
21
|
require('node:events');
|
|
22
22
|
require('socket.io-client');
|
|
@@ -2350,38 +2350,50 @@ function hashCodexSessionModeFromEnhancedMode(mode) {
|
|
|
2350
2350
|
}
|
|
2351
2351
|
|
|
2352
2352
|
const MIN_CODEX_CLI_FOR_GPT_53_CODEX = { major: 0, minor: 104, patch: 0 };
|
|
2353
|
-
function
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2353
|
+
function normalizeLegacyModelAlias(model) {
|
|
2354
|
+
const trimmed = String(model || "").trim();
|
|
2355
|
+
if (!trimmed) return "";
|
|
2356
|
+
switch (trimmed) {
|
|
2357
|
+
case "gpt-5":
|
|
2358
|
+
case "gpt-5-minimal":
|
|
2359
|
+
case "gpt-5-low":
|
|
2360
|
+
return "gpt-5.4-low";
|
|
2361
|
+
case "gpt-5-medium":
|
|
2362
|
+
return "gpt-5.4-medium";
|
|
2363
|
+
case "gpt-5-high":
|
|
2364
|
+
return "gpt-5.4-high";
|
|
2365
|
+
case "gpt-5-codex":
|
|
2366
|
+
case "gpt-5-codex-low":
|
|
2367
|
+
return "gpt-5.3-codex-low";
|
|
2368
|
+
case "gpt-5-codex-medium":
|
|
2369
|
+
return "gpt-5.3-codex-medium";
|
|
2370
|
+
case "gpt-5-codex-high":
|
|
2371
|
+
return "gpt-5.3-codex-high";
|
|
2372
|
+
default:
|
|
2373
|
+
return trimmed;
|
|
2363
2374
|
}
|
|
2364
2375
|
}
|
|
2365
2376
|
function parseEffortSuffix(model) {
|
|
2366
2377
|
const m = String(model || "").trim();
|
|
2367
2378
|
if (!m) return null;
|
|
2379
|
+
if (m.endsWith("-xhigh")) return "xhigh";
|
|
2368
2380
|
if (m.endsWith("-low")) return "low";
|
|
2369
2381
|
if (m.endsWith("-medium")) return "medium";
|
|
2370
2382
|
if (m.endsWith("-high")) return "high";
|
|
2371
2383
|
return null;
|
|
2372
2384
|
}
|
|
2373
2385
|
function parseCodexModelTarget(model) {
|
|
2374
|
-
const trimmed =
|
|
2386
|
+
const trimmed = normalizeLegacyModelAlias(model);
|
|
2375
2387
|
if (!trimmed) return null;
|
|
2376
|
-
|
|
2377
|
-
|
|
2388
|
+
const isGpt54ReasoningToken = trimmed === "gpt-5.4" || trimmed === "gpt-5.4-low" || trimmed === "gpt-5.4-medium" || trimmed === "gpt-5.4-high" || trimmed === "gpt-5.4-xhigh";
|
|
2389
|
+
if (isGpt54ReasoningToken || trimmed === "gpt-5.3-codex" || trimmed.startsWith("gpt-5.3-codex-")) {
|
|
2378
2390
|
if (trimmed === "gpt-5.3-codex" || trimmed.startsWith("gpt-5.3-codex-")) return "gpt-5.3-codex";
|
|
2379
|
-
return "gpt-5.
|
|
2391
|
+
return "gpt-5.4";
|
|
2380
2392
|
}
|
|
2381
2393
|
return null;
|
|
2382
2394
|
}
|
|
2383
2395
|
function resolveCodexModelOverride(rawModel) {
|
|
2384
|
-
const model = typeof rawModel === "string" ? rawModel.trim() : "";
|
|
2396
|
+
const model = normalizeLegacyModelAlias(typeof rawModel === "string" ? rawModel.trim() : "");
|
|
2385
2397
|
if (!model) return {};
|
|
2386
2398
|
const effort = parseEffortSuffix(model);
|
|
2387
2399
|
const codexModelTarget = parseCodexModelTarget(model);
|
|
@@ -2401,12 +2413,6 @@ function resolveCodexModelOverride(rawModel) {
|
|
|
2401
2413
|
}
|
|
2402
2414
|
};
|
|
2403
2415
|
}
|
|
2404
|
-
const isChatGptAuth = readCodexAuthIsChatGptAccount();
|
|
2405
|
-
if (!isChatGptAuth) return { config: { model } };
|
|
2406
|
-
if (model.startsWith("gpt-5-")) {
|
|
2407
|
-
const nextEffort = effort ?? "medium";
|
|
2408
|
-
return { config: { model: "gpt-5.2", model_reasoning_effort: nextEffort } };
|
|
2409
|
-
}
|
|
2410
2416
|
return { config: { model } };
|
|
2411
2417
|
}
|
|
2412
2418
|
|
|
@@ -3771,6 +3777,11 @@ Error: ${message}`,
|
|
|
3771
3777
|
}
|
|
3772
3778
|
messageBuffer.addMessage(message.message, "user");
|
|
3773
3779
|
currentModeHash = message.hash;
|
|
3780
|
+
if (!thinking) {
|
|
3781
|
+
types.logger.debug("thinking started (turn begin)");
|
|
3782
|
+
thinking = true;
|
|
3783
|
+
session.keepAlive(thinking, "remote");
|
|
3784
|
+
}
|
|
3774
3785
|
let skipAutoFinalize = false;
|
|
3775
3786
|
let turnCleanupExecIsError = false;
|
|
3776
3787
|
let turnCleanupExecReason = "turn_cleanup";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
2
2
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
|
-
import { l as logger, A as ApiClient, p as packageJson, c as configuration, r as readSettings, e as projectPath } from './types-
|
|
3
|
+
import { l as logger, A as ApiClient, p as packageJson, c as configuration, r as readSettings, e as projectPath } from './types-Bgzap7qR.mjs';
|
|
4
4
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { ElicitRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
@@ -14,7 +14,7 @@ import process$1 from 'node:process';
|
|
|
14
14
|
import { PassThrough } from 'node:stream';
|
|
15
15
|
import { getDefaultEnvironment } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
16
16
|
import { ReadBuffer, serializeMessage } from '@modelcontextprotocol/sdk/shared/stdio.js';
|
|
17
|
-
import { s as shouldCountToolCall, c as consumeToolQuota, f as formatQuotaDeniedReason, h as hashObject, e as enforceCliVersionPolicy, i as initialMachineMetadata, E as ElicitationHub, n as notifyDaemonSessionStarted, M as MessageQueue2, P as PLATFORM_SYSTEM_PROMPT, a as setLatestUserImages, w as withUserImagesMarker, r as registerKillSessionHandler, b as MessageBuffer, d as startFlockbayServer, g as buildProjectCapsule, t as trimIdent, j as autoFinalizeCoordinationWorkItem, k as detectScreenshotsForGate, l as applyCoordinationSideEffectsFromMcpToolResult, m as stopCaffeinate } from './index-
|
|
17
|
+
import { s as shouldCountToolCall, c as consumeToolQuota, f as formatQuotaDeniedReason, h as hashObject, e as enforceCliVersionPolicy, i as initialMachineMetadata, E as ElicitationHub, n as notifyDaemonSessionStarted, M as MessageQueue2, P as PLATFORM_SYSTEM_PROMPT, a as setLatestUserImages, w as withUserImagesMarker, r as registerKillSessionHandler, b as MessageBuffer, d as startFlockbayServer, g as buildProjectCapsule, t as trimIdent, j as autoFinalizeCoordinationWorkItem, k as detectScreenshotsForGate, l as applyCoordinationSideEffectsFromMcpToolResult, m as stopCaffeinate } from './index-wkeSi0iC.mjs';
|
|
18
18
|
import 'axios';
|
|
19
19
|
import 'node:events';
|
|
20
20
|
import 'socket.io-client';
|
|
@@ -2348,38 +2348,50 @@ function hashCodexSessionModeFromEnhancedMode(mode) {
|
|
|
2348
2348
|
}
|
|
2349
2349
|
|
|
2350
2350
|
const MIN_CODEX_CLI_FOR_GPT_53_CODEX = { major: 0, minor: 104, patch: 0 };
|
|
2351
|
-
function
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2351
|
+
function normalizeLegacyModelAlias(model) {
|
|
2352
|
+
const trimmed = String(model || "").trim();
|
|
2353
|
+
if (!trimmed) return "";
|
|
2354
|
+
switch (trimmed) {
|
|
2355
|
+
case "gpt-5":
|
|
2356
|
+
case "gpt-5-minimal":
|
|
2357
|
+
case "gpt-5-low":
|
|
2358
|
+
return "gpt-5.4-low";
|
|
2359
|
+
case "gpt-5-medium":
|
|
2360
|
+
return "gpt-5.4-medium";
|
|
2361
|
+
case "gpt-5-high":
|
|
2362
|
+
return "gpt-5.4-high";
|
|
2363
|
+
case "gpt-5-codex":
|
|
2364
|
+
case "gpt-5-codex-low":
|
|
2365
|
+
return "gpt-5.3-codex-low";
|
|
2366
|
+
case "gpt-5-codex-medium":
|
|
2367
|
+
return "gpt-5.3-codex-medium";
|
|
2368
|
+
case "gpt-5-codex-high":
|
|
2369
|
+
return "gpt-5.3-codex-high";
|
|
2370
|
+
default:
|
|
2371
|
+
return trimmed;
|
|
2361
2372
|
}
|
|
2362
2373
|
}
|
|
2363
2374
|
function parseEffortSuffix(model) {
|
|
2364
2375
|
const m = String(model || "").trim();
|
|
2365
2376
|
if (!m) return null;
|
|
2377
|
+
if (m.endsWith("-xhigh")) return "xhigh";
|
|
2366
2378
|
if (m.endsWith("-low")) return "low";
|
|
2367
2379
|
if (m.endsWith("-medium")) return "medium";
|
|
2368
2380
|
if (m.endsWith("-high")) return "high";
|
|
2369
2381
|
return null;
|
|
2370
2382
|
}
|
|
2371
2383
|
function parseCodexModelTarget(model) {
|
|
2372
|
-
const trimmed =
|
|
2384
|
+
const trimmed = normalizeLegacyModelAlias(model);
|
|
2373
2385
|
if (!trimmed) return null;
|
|
2374
|
-
|
|
2375
|
-
|
|
2386
|
+
const isGpt54ReasoningToken = trimmed === "gpt-5.4" || trimmed === "gpt-5.4-low" || trimmed === "gpt-5.4-medium" || trimmed === "gpt-5.4-high" || trimmed === "gpt-5.4-xhigh";
|
|
2387
|
+
if (isGpt54ReasoningToken || trimmed === "gpt-5.3-codex" || trimmed.startsWith("gpt-5.3-codex-")) {
|
|
2376
2388
|
if (trimmed === "gpt-5.3-codex" || trimmed.startsWith("gpt-5.3-codex-")) return "gpt-5.3-codex";
|
|
2377
|
-
return "gpt-5.
|
|
2389
|
+
return "gpt-5.4";
|
|
2378
2390
|
}
|
|
2379
2391
|
return null;
|
|
2380
2392
|
}
|
|
2381
2393
|
function resolveCodexModelOverride(rawModel) {
|
|
2382
|
-
const model = typeof rawModel === "string" ? rawModel.trim() : "";
|
|
2394
|
+
const model = normalizeLegacyModelAlias(typeof rawModel === "string" ? rawModel.trim() : "");
|
|
2383
2395
|
if (!model) return {};
|
|
2384
2396
|
const effort = parseEffortSuffix(model);
|
|
2385
2397
|
const codexModelTarget = parseCodexModelTarget(model);
|
|
@@ -2399,12 +2411,6 @@ function resolveCodexModelOverride(rawModel) {
|
|
|
2399
2411
|
}
|
|
2400
2412
|
};
|
|
2401
2413
|
}
|
|
2402
|
-
const isChatGptAuth = readCodexAuthIsChatGptAccount();
|
|
2403
|
-
if (!isChatGptAuth) return { config: { model } };
|
|
2404
|
-
if (model.startsWith("gpt-5-")) {
|
|
2405
|
-
const nextEffort = effort ?? "medium";
|
|
2406
|
-
return { config: { model: "gpt-5.2", model_reasoning_effort: nextEffort } };
|
|
2407
|
-
}
|
|
2408
2414
|
return { config: { model } };
|
|
2409
2415
|
}
|
|
2410
2416
|
|
|
@@ -3769,6 +3775,11 @@ Error: ${message}`,
|
|
|
3769
3775
|
}
|
|
3770
3776
|
messageBuffer.addMessage(message.message, "user");
|
|
3771
3777
|
currentModeHash = message.hash;
|
|
3778
|
+
if (!thinking) {
|
|
3779
|
+
logger.debug("thinking started (turn begin)");
|
|
3780
|
+
thinking = true;
|
|
3781
|
+
session.keepAlive(thinking, "remote");
|
|
3782
|
+
}
|
|
3772
3783
|
let skipAutoFinalize = false;
|
|
3773
3784
|
let turnCleanupExecIsError = false;
|
|
3774
3785
|
let turnCleanupExecReason = "turn_cleanup";
|
|
@@ -4,8 +4,8 @@ import { randomUUID, createHash } from 'node:crypto';
|
|
|
4
4
|
import os__default from 'node:os';
|
|
5
5
|
import path__default, { resolve, join as join$1, basename } from 'node:path';
|
|
6
6
|
import { mkdir, writeFile, readFile } from 'node:fs/promises';
|
|
7
|
-
import { l as logger, p as packageJson, A as ApiClient, c as configuration, r as readSettings, e as projectPath } from './types-
|
|
8
|
-
import { s as shouldCountToolCall, c as consumeToolQuota, f as formatQuotaDeniedReason, h as hashObject, e as enforceCliVersionPolicy, i as initialMachineMetadata, n as notifyDaemonSessionStarted, M as MessageQueue2, g as buildProjectCapsule, a as setLatestUserImages, b as MessageBuffer, w as withUserImagesMarker, r as registerKillSessionHandler, d as startFlockbayServer, o as extractUserImagesMarker, p as getLatestUserImages, P as PLATFORM_SYSTEM_PROMPT, j as autoFinalizeCoordinationWorkItem, E as ElicitationHub, k as detectScreenshotsForGate, m as stopCaffeinate } from './index-
|
|
7
|
+
import { l as logger, p as packageJson, A as ApiClient, c as configuration, r as readSettings, e as projectPath } from './types-Bgzap7qR.mjs';
|
|
8
|
+
import { s as shouldCountToolCall, c as consumeToolQuota, f as formatQuotaDeniedReason, h as hashObject, e as enforceCliVersionPolicy, i as initialMachineMetadata, n as notifyDaemonSessionStarted, M as MessageQueue2, g as buildProjectCapsule, a as setLatestUserImages, b as MessageBuffer, w as withUserImagesMarker, r as registerKillSessionHandler, d as startFlockbayServer, o as extractUserImagesMarker, p as getLatestUserImages, P as PLATFORM_SYSTEM_PROMPT, j as autoFinalizeCoordinationWorkItem, E as ElicitationHub, k as detectScreenshotsForGate, m as stopCaffeinate } from './index-wkeSi0iC.mjs';
|
|
9
9
|
import { spawn, spawnSync } from 'node:child_process';
|
|
10
10
|
import { ndJsonStream, ClientSideConnection } from '@agentclientprotocol/sdk';
|
|
11
11
|
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
@@ -6,8 +6,8 @@ var node_crypto = require('node:crypto');
|
|
|
6
6
|
var os = require('node:os');
|
|
7
7
|
var path = require('node:path');
|
|
8
8
|
var fs$2 = require('node:fs/promises');
|
|
9
|
-
var types = require('./types-
|
|
10
|
-
var index = require('./index-
|
|
9
|
+
var types = require('./types-5z8UADAi.cjs');
|
|
10
|
+
var index = require('./index-IntvnrmZ.cjs');
|
|
11
11
|
var node_child_process = require('node:child_process');
|
|
12
12
|
var sdk = require('@agentclientprotocol/sdk');
|
|
13
13
|
var fs = require('fs');
|