uloop-cli 0.68.1 → 0.68.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 +87 -18
- package/README_ja.md +87 -18
- package/dist/cli.bundle.cjs +153 -33
- package/dist/cli.bundle.cjs.map +3 -3
- package/package.json +1 -1
- package/src/__tests__/cli-e2e.test.ts +97 -4
- package/src/cli.ts +126 -30
- package/src/commands/focus-window.ts +54 -49
- package/src/default-tools.json +29 -1
- package/src/skills/deprecated-skills.ts +1 -1
- package/src/tool-cache.ts +18 -5
- package/src/version.ts +1 -1
- /package/src/skills/skill-definitions/cli-only/uloop-focus-window/{SKILL.md → Skill/SKILL.md} +0 -0
- /package/src/skills/skill-definitions/cli-only/uloop-get-project-info/{SKILL.md → Skill/SKILL.md} +0 -0
- /package/src/skills/skill-definitions/cli-only/uloop-get-version/{SKILL.md → Skill/SKILL.md} +0 -0
package/dist/cli.bundle.cjs
CHANGED
|
@@ -795,7 +795,7 @@ ${itemIndentStr}`);
|
|
|
795
795
|
var require_option = __commonJS({
|
|
796
796
|
"node_modules/commander/lib/option.js"(exports2) {
|
|
797
797
|
var { InvalidArgumentError: InvalidArgumentError2 } = require_error();
|
|
798
|
-
var
|
|
798
|
+
var Option3 = class {
|
|
799
799
|
/**
|
|
800
800
|
* Initialize a new `Option` with the given `flags` and `description`.
|
|
801
801
|
*
|
|
@@ -1099,7 +1099,7 @@ var require_option = __commonJS({
|
|
|
1099
1099
|
);
|
|
1100
1100
|
return { shortFlag, longFlag };
|
|
1101
1101
|
}
|
|
1102
|
-
exports2.Option =
|
|
1102
|
+
exports2.Option = Option3;
|
|
1103
1103
|
exports2.DualOptions = DualOptions;
|
|
1104
1104
|
}
|
|
1105
1105
|
});
|
|
@@ -1195,7 +1195,7 @@ var require_command = __commonJS({
|
|
|
1195
1195
|
var { Argument: Argument2, humanReadableArgName } = require_argument();
|
|
1196
1196
|
var { CommanderError: CommanderError2 } = require_error();
|
|
1197
1197
|
var { Help: Help2, stripColor } = require_help();
|
|
1198
|
-
var { Option:
|
|
1198
|
+
var { Option: Option3, DualOptions } = require_option();
|
|
1199
1199
|
var { suggestSimilar } = require_suggestSimilar();
|
|
1200
1200
|
var Command2 = class _Command extends EventEmitter {
|
|
1201
1201
|
/**
|
|
@@ -1680,7 +1680,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1680
1680
|
* @return {Option} new option
|
|
1681
1681
|
*/
|
|
1682
1682
|
createOption(flags, description) {
|
|
1683
|
-
return new
|
|
1683
|
+
return new Option3(flags, description);
|
|
1684
1684
|
}
|
|
1685
1685
|
/**
|
|
1686
1686
|
* Wrap parseArgs to catch 'commander.invalidArgument'.
|
|
@@ -1805,7 +1805,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1805
1805
|
* @private
|
|
1806
1806
|
*/
|
|
1807
1807
|
_optionEx(config, flags, description, fn, defaultValue) {
|
|
1808
|
-
if (typeof flags === "object" && flags instanceof
|
|
1808
|
+
if (typeof flags === "object" && flags instanceof Option3) {
|
|
1809
1809
|
throw new Error(
|
|
1810
1810
|
"To add an Option object use addOption() instead of option() or requiredOption()"
|
|
1811
1811
|
);
|
|
@@ -3437,13 +3437,13 @@ var require_commander = __commonJS({
|
|
|
3437
3437
|
var { Command: Command2 } = require_command();
|
|
3438
3438
|
var { CommanderError: CommanderError2, InvalidArgumentError: InvalidArgumentError2 } = require_error();
|
|
3439
3439
|
var { Help: Help2 } = require_help();
|
|
3440
|
-
var { Option:
|
|
3440
|
+
var { Option: Option3 } = require_option();
|
|
3441
3441
|
exports2.program = new Command2();
|
|
3442
3442
|
exports2.createCommand = (name) => new Command2(name);
|
|
3443
|
-
exports2.createOption = (flags, description) => new
|
|
3443
|
+
exports2.createOption = (flags, description) => new Option3(flags, description);
|
|
3444
3444
|
exports2.createArgument = (name, description) => new Argument2(name, description);
|
|
3445
3445
|
exports2.Command = Command2;
|
|
3446
|
-
exports2.Option =
|
|
3446
|
+
exports2.Option = Option3;
|
|
3447
3447
|
exports2.Argument = Argument2;
|
|
3448
3448
|
exports2.Help = Help2;
|
|
3449
3449
|
exports2.CommanderError = CommanderError2;
|
|
@@ -5824,7 +5824,7 @@ var import_path3 = require("path");
|
|
|
5824
5824
|
|
|
5825
5825
|
// src/default-tools.json
|
|
5826
5826
|
var default_tools_default = {
|
|
5827
|
-
version: "0.68.
|
|
5827
|
+
version: "0.68.3",
|
|
5828
5828
|
tools: [
|
|
5829
5829
|
{
|
|
5830
5830
|
name: "compile",
|
|
@@ -6064,6 +6064,34 @@ var default_tools_default = {
|
|
|
6064
6064
|
}
|
|
6065
6065
|
}
|
|
6066
6066
|
},
|
|
6067
|
+
{
|
|
6068
|
+
name: "get-unity-search-providers",
|
|
6069
|
+
description: "Get detailed information about Unity Search providers including display names, descriptions, active status, and capabilities",
|
|
6070
|
+
inputSchema: {
|
|
6071
|
+
type: "object",
|
|
6072
|
+
properties: {
|
|
6073
|
+
ProviderId: {
|
|
6074
|
+
type: "string",
|
|
6075
|
+
description: "Specific provider ID to get details for (empty = all providers). Examples: 'asset', 'scene', 'menu', 'settings'"
|
|
6076
|
+
},
|
|
6077
|
+
ActiveOnly: {
|
|
6078
|
+
type: "boolean",
|
|
6079
|
+
description: "Whether to include only active providers",
|
|
6080
|
+
default: false
|
|
6081
|
+
},
|
|
6082
|
+
SortByPriority: {
|
|
6083
|
+
type: "boolean",
|
|
6084
|
+
description: "Sort providers by priority (lower number = higher priority)",
|
|
6085
|
+
default: true
|
|
6086
|
+
},
|
|
6087
|
+
IncludeDescriptions: {
|
|
6088
|
+
type: "boolean",
|
|
6089
|
+
description: "Include detailed descriptions for each provider",
|
|
6090
|
+
default: true
|
|
6091
|
+
}
|
|
6092
|
+
}
|
|
6093
|
+
}
|
|
6094
|
+
},
|
|
6067
6095
|
{
|
|
6068
6096
|
name: "get-menu-items",
|
|
6069
6097
|
description: "Retrieve Unity MenuItems",
|
|
@@ -6263,21 +6291,24 @@ var default_tools_default = {
|
|
|
6263
6291
|
// src/tool-cache.ts
|
|
6264
6292
|
var CACHE_DIR = ".uloop";
|
|
6265
6293
|
var CACHE_FILE = "tools.json";
|
|
6266
|
-
function getCacheDir() {
|
|
6294
|
+
function getCacheDir(projectPath) {
|
|
6295
|
+
if (projectPath !== void 0) {
|
|
6296
|
+
return (0, import_path3.join)(projectPath, CACHE_DIR);
|
|
6297
|
+
}
|
|
6267
6298
|
const projectRoot = findUnityProjectRoot();
|
|
6268
6299
|
if (projectRoot === null) {
|
|
6269
6300
|
return (0, import_path3.join)(process.cwd(), CACHE_DIR);
|
|
6270
6301
|
}
|
|
6271
6302
|
return (0, import_path3.join)(projectRoot, CACHE_DIR);
|
|
6272
6303
|
}
|
|
6273
|
-
function getCachePath() {
|
|
6274
|
-
return (0, import_path3.join)(getCacheDir(), CACHE_FILE);
|
|
6304
|
+
function getCachePath(projectPath) {
|
|
6305
|
+
return (0, import_path3.join)(getCacheDir(projectPath), CACHE_FILE);
|
|
6275
6306
|
}
|
|
6276
6307
|
function getDefaultTools() {
|
|
6277
6308
|
return default_tools_default;
|
|
6278
6309
|
}
|
|
6279
|
-
function loadToolsCache() {
|
|
6280
|
-
const cachePath = getCachePath();
|
|
6310
|
+
function loadToolsCache(projectPath) {
|
|
6311
|
+
const cachePath = getCachePath(projectPath);
|
|
6281
6312
|
if ((0, import_fs3.existsSync)(cachePath)) {
|
|
6282
6313
|
try {
|
|
6283
6314
|
const content = (0, import_fs3.readFileSync)(cachePath, "utf-8");
|
|
@@ -6303,6 +6334,10 @@ function hasCacheFile() {
|
|
|
6303
6334
|
function getCacheFilePath() {
|
|
6304
6335
|
return getCachePath();
|
|
6305
6336
|
}
|
|
6337
|
+
function getDefaultToolNames() {
|
|
6338
|
+
const defaultTools = getDefaultTools();
|
|
6339
|
+
return new Set(defaultTools.tools.map((tool) => tool.name));
|
|
6340
|
+
}
|
|
6306
6341
|
function getCachedServerVersion() {
|
|
6307
6342
|
const cachePath = getCachePath();
|
|
6308
6343
|
if (!(0, import_fs3.existsSync)(cachePath)) {
|
|
@@ -6318,7 +6353,7 @@ function getCachedServerVersion() {
|
|
|
6318
6353
|
}
|
|
6319
6354
|
|
|
6320
6355
|
// src/version.ts
|
|
6321
|
-
var VERSION = "0.68.
|
|
6356
|
+
var VERSION = "0.68.3";
|
|
6322
6357
|
|
|
6323
6358
|
// src/spinner.ts
|
|
6324
6359
|
var SPINNER_FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
|
|
@@ -6916,7 +6951,7 @@ var DEPRECATED_SKILLS = [
|
|
|
6916
6951
|
"uloop-capture-window",
|
|
6917
6952
|
// renamed to uloop-screenshot in v0.54.0
|
|
6918
6953
|
"uloop-get-provider-details"
|
|
6919
|
-
//
|
|
6954
|
+
// renamed to uloop-get-unity-search-providers
|
|
6920
6955
|
];
|
|
6921
6956
|
|
|
6922
6957
|
// src/tool-settings-loader.ts
|
|
@@ -8703,8 +8738,12 @@ async function runLaunchCommand(projectPath, options) {
|
|
|
8703
8738
|
}
|
|
8704
8739
|
|
|
8705
8740
|
// src/commands/focus-window.ts
|
|
8706
|
-
function registerFocusWindowCommand(program3) {
|
|
8707
|
-
program3.command("focus-window").description("Bring Unity Editor window to front using OS-level commands").option("--project-path <path>", "Unity project path")
|
|
8741
|
+
function registerFocusWindowCommand(program3, helpGroup) {
|
|
8742
|
+
const cmd = program3.command("focus-window").description("Bring Unity Editor window to front using OS-level commands").option("--project-path <path>", "Unity project path");
|
|
8743
|
+
if (helpGroup !== void 0) {
|
|
8744
|
+
cmd.helpGroup(helpGroup);
|
|
8745
|
+
}
|
|
8746
|
+
cmd.action(async (options) => {
|
|
8708
8747
|
let projectRoot;
|
|
8709
8748
|
if (options.projectPath !== void 0) {
|
|
8710
8749
|
try {
|
|
@@ -8762,8 +8801,17 @@ function registerFocusWindowCommand(program3) {
|
|
|
8762
8801
|
}
|
|
8763
8802
|
|
|
8764
8803
|
// src/cli.ts
|
|
8804
|
+
var FOCUS_WINDOW_COMMAND = "focus-window";
|
|
8765
8805
|
var LAUNCH_COMMAND = "launch";
|
|
8766
8806
|
var UPDATE_COMMAND = "update";
|
|
8807
|
+
var HELP_GROUP_BUILTIN_TOOLS = "Built-in Tools:";
|
|
8808
|
+
var HELP_GROUP_THIRD_PARTY_TOOLS = "Third-party Tools:";
|
|
8809
|
+
var HELP_GROUP_CLI_COMMANDS = "CLI Commands:";
|
|
8810
|
+
var HELP_GROUP_ORDER = [
|
|
8811
|
+
HELP_GROUP_CLI_COMMANDS,
|
|
8812
|
+
HELP_GROUP_BUILTIN_TOOLS,
|
|
8813
|
+
HELP_GROUP_THIRD_PARTY_TOOLS
|
|
8814
|
+
];
|
|
8767
8815
|
var NO_SYNC_FLAGS = ["-v", "--version", "-h", "--help"];
|
|
8768
8816
|
var BUILTIN_COMMANDS = [
|
|
8769
8817
|
"list",
|
|
@@ -8773,12 +8821,47 @@ var BUILTIN_COMMANDS = [
|
|
|
8773
8821
|
"fix",
|
|
8774
8822
|
"skills",
|
|
8775
8823
|
LAUNCH_COMMAND,
|
|
8776
|
-
|
|
8824
|
+
FOCUS_WINDOW_COMMAND
|
|
8777
8825
|
];
|
|
8778
8826
|
var program2 = new Command();
|
|
8779
|
-
program2.name("uloop").description("Unity MCP CLI - Direct communication with Unity Editor").version(VERSION, "-v, --version", "Output the version number").showHelpAfterError("(run with -h for available options)")
|
|
8827
|
+
program2.name("uloop").description("Unity MCP CLI - Direct communication with Unity Editor").version(VERSION, "-v, --version", "Output the version number").showHelpAfterError("(run with -h for available options)").configureHelp({
|
|
8828
|
+
sortSubcommands: true,
|
|
8829
|
+
// commander.js default groupItems determines group display order by registration order,
|
|
8830
|
+
// but CLI commands are registered at module level (before tools), so the default order
|
|
8831
|
+
// would be wrong. We re-implement to enforce HELP_GROUP_ORDER.
|
|
8832
|
+
groupItems(unsortedItems, visibleItems, getGroup) {
|
|
8833
|
+
const groupMap = /* @__PURE__ */ new Map();
|
|
8834
|
+
for (const item of unsortedItems) {
|
|
8835
|
+
const group = getGroup(item);
|
|
8836
|
+
if (!groupMap.has(group)) {
|
|
8837
|
+
groupMap.set(group, []);
|
|
8838
|
+
}
|
|
8839
|
+
}
|
|
8840
|
+
for (const item of visibleItems) {
|
|
8841
|
+
const group = getGroup(item);
|
|
8842
|
+
if (!groupMap.has(group)) {
|
|
8843
|
+
groupMap.set(group, []);
|
|
8844
|
+
}
|
|
8845
|
+
groupMap.get(group).push(item);
|
|
8846
|
+
}
|
|
8847
|
+
const ordered = /* @__PURE__ */ new Map();
|
|
8848
|
+
for (const key of HELP_GROUP_ORDER) {
|
|
8849
|
+
const items = groupMap.get(key);
|
|
8850
|
+
if (items !== void 0) {
|
|
8851
|
+
ordered.set(key, items);
|
|
8852
|
+
groupMap.delete(key);
|
|
8853
|
+
}
|
|
8854
|
+
}
|
|
8855
|
+
for (const [key, value] of groupMap) {
|
|
8856
|
+
ordered.set(key, value);
|
|
8857
|
+
}
|
|
8858
|
+
return ordered;
|
|
8859
|
+
}
|
|
8860
|
+
});
|
|
8780
8861
|
program2.option("--list-commands", "List all command names (for shell completion)");
|
|
8781
8862
|
program2.option("--list-options <cmd>", "List options for a command (for shell completion)");
|
|
8863
|
+
program2.commandsGroup(HELP_GROUP_CLI_COMMANDS);
|
|
8864
|
+
program2.helpCommand(true);
|
|
8782
8865
|
program2.command("list").description("List all available tools from Unity").option("-p, --port <port>", "Unity TCP port").option("--project-path <path>", "Unity project path").action(async (options) => {
|
|
8783
8866
|
await runWithErrorHandling(() => listAvailableTools(extractGlobalOptions(options)));
|
|
8784
8867
|
});
|
|
@@ -8799,12 +8882,12 @@ program2.command("fix").description("Clean up stale lock files that may prevent
|
|
|
8799
8882
|
});
|
|
8800
8883
|
registerSkillsCommand(program2);
|
|
8801
8884
|
registerLaunchCommand(program2);
|
|
8802
|
-
|
|
8803
|
-
function registerToolCommand(tool) {
|
|
8885
|
+
function registerToolCommand(tool, helpGroup) {
|
|
8804
8886
|
if (BUILTIN_COMMANDS.includes(tool.name)) {
|
|
8805
8887
|
return;
|
|
8806
8888
|
}
|
|
8807
|
-
const
|
|
8889
|
+
const firstLine = tool.description.split("\n")[0];
|
|
8890
|
+
const cmd = program2.command(tool.name).description(firstLine).helpGroup(helpGroup);
|
|
8808
8891
|
const properties = tool.inputSchema.properties;
|
|
8809
8892
|
for (const [propName, propInfo] of Object.entries(properties)) {
|
|
8810
8893
|
const optionStr = generateOptionString(propName, propInfo);
|
|
@@ -8923,6 +9006,9 @@ function convertValue(value, propInfo) {
|
|
|
8923
9006
|
}
|
|
8924
9007
|
return value;
|
|
8925
9008
|
}
|
|
9009
|
+
function getToolHelpGroup(toolName, defaultToolNames) {
|
|
9010
|
+
return defaultToolNames.has(toolName) ? HELP_GROUP_BUILTIN_TOOLS : HELP_GROUP_THIRD_PARTY_TOOLS;
|
|
9011
|
+
}
|
|
8926
9012
|
function extractGlobalOptions(options) {
|
|
8927
9013
|
return {
|
|
8928
9014
|
port: options["port"],
|
|
@@ -9253,9 +9339,14 @@ function handleCompletionOptions() {
|
|
|
9253
9339
|
const projectPath = extractSyncGlobalOptions(args).projectPath;
|
|
9254
9340
|
if (args.includes("--list-commands")) {
|
|
9255
9341
|
const tools = loadToolsCache();
|
|
9256
|
-
const enabledTools =
|
|
9257
|
-
const allCommands = [
|
|
9258
|
-
|
|
9342
|
+
const enabledTools = filterEnabledTools(tools.tools, projectPath);
|
|
9343
|
+
const allCommands = [
|
|
9344
|
+
...BUILTIN_COMMANDS.filter(
|
|
9345
|
+
(cmd) => cmd !== FOCUS_WINDOW_COMMAND || isToolEnabled(cmd, projectPath)
|
|
9346
|
+
),
|
|
9347
|
+
...enabledTools.map((t) => t.name)
|
|
9348
|
+
];
|
|
9349
|
+
console.log(allCommands.sort().join("\n"));
|
|
9259
9350
|
return true;
|
|
9260
9351
|
}
|
|
9261
9352
|
const listOptionsIdx = args.indexOf("--list-options");
|
|
@@ -9271,7 +9362,9 @@ function listOptionsForCommand(cmdName, projectPath) {
|
|
|
9271
9362
|
return;
|
|
9272
9363
|
}
|
|
9273
9364
|
const tools = loadToolsCache();
|
|
9274
|
-
const tool =
|
|
9365
|
+
const tool = filterEnabledTools(tools.tools, projectPath).find(
|
|
9366
|
+
(t) => t.name === cmdName
|
|
9367
|
+
);
|
|
9275
9368
|
if (!tool) {
|
|
9276
9369
|
return;
|
|
9277
9370
|
}
|
|
@@ -9283,6 +9376,9 @@ function listOptionsForCommand(cmdName, projectPath) {
|
|
|
9283
9376
|
console.log(options.join("\n"));
|
|
9284
9377
|
}
|
|
9285
9378
|
function commandExists(cmdName, projectPath) {
|
|
9379
|
+
if (cmdName === FOCUS_WINDOW_COMMAND) {
|
|
9380
|
+
return isToolEnabled(FOCUS_WINDOW_COMMAND, projectPath);
|
|
9381
|
+
}
|
|
9286
9382
|
if (BUILTIN_COMMANDS.includes(cmdName)) {
|
|
9287
9383
|
return true;
|
|
9288
9384
|
}
|
|
@@ -9295,6 +9391,20 @@ function shouldSkipAutoSync(cmdName, args) {
|
|
|
9295
9391
|
}
|
|
9296
9392
|
return args.some((arg) => NO_SYNC_FLAGS.includes(arg));
|
|
9297
9393
|
}
|
|
9394
|
+
var OPTIONS_WITH_VALUE = /* @__PURE__ */ new Set(["--port", "-p", "--project-path"]);
|
|
9395
|
+
function findCommandName(args) {
|
|
9396
|
+
for (let i = 0; i < args.length; i++) {
|
|
9397
|
+
const arg = args[i];
|
|
9398
|
+
if (arg.startsWith("-")) {
|
|
9399
|
+
if (OPTIONS_WITH_VALUE.has(arg)) {
|
|
9400
|
+
i++;
|
|
9401
|
+
}
|
|
9402
|
+
continue;
|
|
9403
|
+
}
|
|
9404
|
+
return arg;
|
|
9405
|
+
}
|
|
9406
|
+
return void 0;
|
|
9407
|
+
}
|
|
9298
9408
|
function extractSyncGlobalOptions(args) {
|
|
9299
9409
|
const options = {};
|
|
9300
9410
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -9329,15 +9439,21 @@ async function main() {
|
|
|
9329
9439
|
return;
|
|
9330
9440
|
}
|
|
9331
9441
|
const args = process.argv.slice(2);
|
|
9332
|
-
const cmdName = args.find((arg) => !arg.startsWith("-"));
|
|
9333
9442
|
const syncGlobalOptions = extractSyncGlobalOptions(args);
|
|
9443
|
+
const cmdName = findCommandName(args);
|
|
9334
9444
|
const NO_PROJECT_COMMANDS = [UPDATE_COMMAND, "completion"];
|
|
9335
9445
|
const skipProjectDetection = cmdName === void 0 || NO_PROJECT_COMMANDS.includes(cmdName);
|
|
9336
9446
|
if (skipProjectDetection) {
|
|
9337
|
-
const
|
|
9338
|
-
const
|
|
9447
|
+
const defaultToolNames2 = getDefaultToolNames();
|
|
9448
|
+
const isTopLevelHelp = cmdName === void 0 && (args.includes("-h") || args.includes("--help"));
|
|
9449
|
+
const shouldFilter = syncGlobalOptions.projectPath !== void 0 || isTopLevelHelp;
|
|
9450
|
+
const sourceTools = shouldFilter ? loadToolsCache(syncGlobalOptions.projectPath).tools : getDefaultTools().tools;
|
|
9451
|
+
const tools = shouldFilter ? filterEnabledTools(sourceTools, syncGlobalOptions.projectPath) : sourceTools;
|
|
9452
|
+
if (!shouldFilter || isToolEnabled(FOCUS_WINDOW_COMMAND, syncGlobalOptions.projectPath)) {
|
|
9453
|
+
registerFocusWindowCommand(program2, HELP_GROUP_BUILTIN_TOOLS);
|
|
9454
|
+
}
|
|
9339
9455
|
for (const tool of tools) {
|
|
9340
|
-
registerToolCommand(tool);
|
|
9456
|
+
registerToolCommand(tool, getToolHelpGroup(tool.name, defaultToolNames2));
|
|
9341
9457
|
}
|
|
9342
9458
|
program2.parse();
|
|
9343
9459
|
return;
|
|
@@ -9366,8 +9482,12 @@ async function main() {
|
|
|
9366
9482
|
}
|
|
9367
9483
|
const toolsCache = loadToolsCache();
|
|
9368
9484
|
const projectPath = syncGlobalOptions.projectPath;
|
|
9485
|
+
const defaultToolNames = getDefaultToolNames();
|
|
9486
|
+
if (isToolEnabled(FOCUS_WINDOW_COMMAND, projectPath)) {
|
|
9487
|
+
registerFocusWindowCommand(program2, HELP_GROUP_BUILTIN_TOOLS);
|
|
9488
|
+
}
|
|
9369
9489
|
for (const tool of filterEnabledTools(toolsCache.tools, projectPath)) {
|
|
9370
|
-
registerToolCommand(tool);
|
|
9490
|
+
registerToolCommand(tool, getToolHelpGroup(tool.name, defaultToolNames));
|
|
9371
9491
|
}
|
|
9372
9492
|
if (cmdName && !commandExists(cmdName, projectPath)) {
|
|
9373
9493
|
if (!isToolEnabled(cmdName, projectPath)) {
|
|
@@ -9380,7 +9500,7 @@ async function main() {
|
|
|
9380
9500
|
const newCache = loadToolsCache();
|
|
9381
9501
|
const tool = filterEnabledTools(newCache.tools, projectPath).find((t) => t.name === cmdName);
|
|
9382
9502
|
if (tool) {
|
|
9383
|
-
registerToolCommand(tool);
|
|
9503
|
+
registerToolCommand(tool, getToolHelpGroup(tool.name, defaultToolNames));
|
|
9384
9504
|
console.log(`\x1B[32m\u2713 Found '${cmdName}' after sync.\x1B[0m
|
|
9385
9505
|
`);
|
|
9386
9506
|
} else {
|