@ibm/ibmi-mcp-server 0.3.2 → 0.4.1
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 +36 -24
- package/dist/cli/commands/columns.d.ts +7 -0
- package/dist/cli/commands/columns.d.ts.map +1 -0
- package/dist/cli/commands/columns.js +29 -0
- package/dist/cli/commands/columns.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +10 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +225 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/related.d.ts +7 -0
- package/dist/cli/commands/related.d.ts.map +1 -0
- package/dist/cli/commands/related.js +32 -0
- package/dist/cli/commands/related.js.map +1 -0
- package/dist/cli/commands/schemas.d.ts +7 -0
- package/dist/cli/commands/schemas.d.ts.map +1 -0
- package/dist/cli/commands/schemas.js +49 -0
- package/dist/cli/commands/schemas.js.map +1 -0
- package/dist/cli/commands/sql.d.ts +8 -0
- package/dist/cli/commands/sql.d.ts.map +1 -0
- package/dist/cli/commands/sql.js +106 -0
- package/dist/cli/commands/sql.js.map +1 -0
- package/dist/cli/commands/system.d.ts +11 -0
- package/dist/cli/commands/system.d.ts.map +1 -0
- package/dist/cli/commands/system.js +263 -0
- package/dist/cli/commands/system.js.map +1 -0
- package/dist/cli/commands/tables.d.ts +7 -0
- package/dist/cli/commands/tables.d.ts.map +1 -0
- package/dist/cli/commands/tables.js +48 -0
- package/dist/cli/commands/tables.js.map +1 -0
- package/dist/cli/commands/tool.d.ts +18 -0
- package/dist/cli/commands/tool.d.ts.map +1 -0
- package/dist/cli/commands/tool.js +194 -0
- package/dist/cli/commands/tool.js.map +1 -0
- package/dist/cli/commands/tools-list.d.ts +20 -0
- package/dist/cli/commands/tools-list.d.ts.map +1 -0
- package/dist/cli/commands/tools-list.js +209 -0
- package/dist/cli/commands/tools-list.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +7 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +77 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/config/credentials.d.ts +21 -0
- package/dist/cli/config/credentials.d.ts.map +1 -0
- package/dist/cli/config/credentials.js +96 -0
- package/dist/cli/config/credentials.js.map +1 -0
- package/dist/cli/config/index.d.ts +10 -0
- package/dist/cli/config/index.d.ts.map +1 -0
- package/dist/cli/config/index.js +9 -0
- package/dist/cli/config/index.js.map +1 -0
- package/dist/cli/config/loader.d.ts +36 -0
- package/dist/cli/config/loader.d.ts.map +1 -0
- package/dist/cli/config/loader.js +206 -0
- package/dist/cli/config/loader.js.map +1 -0
- package/dist/cli/config/resolver.d.ts +26 -0
- package/dist/cli/config/resolver.d.ts.map +1 -0
- package/dist/cli/config/resolver.js +102 -0
- package/dist/cli/config/resolver.js.map +1 -0
- package/dist/cli/config/schema.d.ts +128 -0
- package/dist/cli/config/schema.d.ts.map +1 -0
- package/dist/cli/config/schema.js +37 -0
- package/dist/cli/config/schema.js.map +1 -0
- package/dist/cli/config/types.d.ts +59 -0
- package/dist/cli/config/types.d.ts.map +1 -0
- package/dist/cli/config/types.js +6 -0
- package/dist/cli/config/types.js.map +1 -0
- package/dist/cli/formatters/output.d.ts +60 -0
- package/dist/cli/formatters/output.d.ts.map +1 -0
- package/dist/cli/formatters/output.js +190 -0
- package/dist/cli/formatters/output.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +98 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/command-helpers.d.ts +47 -0
- package/dist/cli/utils/command-helpers.d.ts.map +1 -0
- package/dist/cli/utils/command-helpers.js +211 -0
- package/dist/cli/utils/command-helpers.js.map +1 -0
- package/dist/cli/utils/connection.d.ts +20 -0
- package/dist/cli/utils/connection.d.ts.map +1 -0
- package/dist/cli/utils/connection.js +37 -0
- package/dist/cli/utils/connection.js.map +1 -0
- package/dist/cli/utils/exit-codes.d.ts +48 -0
- package/dist/cli/utils/exit-codes.d.ts.map +1 -0
- package/dist/cli/utils/exit-codes.js +111 -0
- package/dist/cli/utils/exit-codes.js.map +1 -0
- package/dist/cli/utils/yaml-loader.d.ts +69 -0
- package/dist/cli/utils/yaml-loader.d.ts.map +1 -0
- package/dist/cli/utils/yaml-loader.js +135 -0
- package/dist/cli/utils/yaml-loader.js.map +1 -0
- package/dist/cli/utils/yaml-to-commander.d.ts +26 -0
- package/dist/cli/utils/yaml-to-commander.d.ts.map +1 -0
- package/dist/cli/utils/yaml-to-commander.js +156 -0
- package/dist/cli/utils/yaml-to-commander.js.map +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +9 -10
- package/dist/config/index.js.map +1 -1
- package/dist/config/resolver.d.ts.map +1 -1
- package/dist/config/resolver.js +6 -0
- package/dist/config/resolver.js.map +1 -1
- package/dist/ibmi-mcp-server/tools/executeSql.tool.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/tools/executeSql.tool.js +6 -2
- package/dist/ibmi-mcp-server/tools/executeSql.tool.js.map +1 -1
- package/dist/ibmi-mcp-server/tools/generateSql.tool.js +1 -1
- package/dist/ibmi-mcp-server/tools/generateSql.tool.js.map +1 -1
- package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.d.ts +93 -0
- package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.js +198 -0
- package/dist/ibmi-mcp-server/tools/getRelatedObjects.tool.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/getTableColumns.tool.d.ts +87 -0
- package/dist/ibmi-mcp-server/tools/getTableColumns.tool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/getTableColumns.tool.js +163 -0
- package/dist/ibmi-mcp-server/tools/getTableColumns.tool.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/index.d.ts +175 -0
- package/dist/ibmi-mcp-server/tools/index.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/tools/index.js +27 -1
- package/dist/ibmi-mcp-server/tools/index.js.map +1 -1
- package/dist/ibmi-mcp-server/tools/listSchemas.tool.d.ts +107 -0
- package/dist/ibmi-mcp-server/tools/listSchemas.tool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/listSchemas.tool.js +195 -0
- package/dist/ibmi-mcp-server/tools/listSchemas.tool.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.d.ts +107 -0
- package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.js +198 -0
- package/dist/ibmi-mcp-server/tools/listTablesInSchema.tool.js.map +1 -0
- package/dist/ibmi-mcp-server/tools/validateQuery.tool.d.ts +229 -0
- package/dist/ibmi-mcp-server/tools/validateQuery.tool.d.ts.map +1 -0
- package/dist/ibmi-mcp-server/tools/validateQuery.tool.js +401 -0
- package/dist/ibmi-mcp-server/tools/validateQuery.tool.js.map +1 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts +2 -0
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.d.ts.map +1 -1
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.js +21 -7
- package/dist/ibmi-mcp-server/utils/cli/argumentParser.js.map +1 -1
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js +1 -1
- package/dist/ibmi-mcp-server/utils/security/sqlSecurityValidator.js.map +1 -1
- package/dist/mcp-server/tools/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/index.js +5 -3
- package/dist/mcp-server/tools/index.js.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Dynamic YAML tool execution command.
|
|
3
|
+
*
|
|
4
|
+
* `ibmi tool <name> [options]` — run any YAML-defined tool from the CLI.
|
|
5
|
+
*
|
|
6
|
+
* The command uses allowUnknownOption() to accept arbitrary tool-specific
|
|
7
|
+
* options, then resolves them against the YAML parameter definitions.
|
|
8
|
+
*
|
|
9
|
+
* Supports --dry-run to show the resolved SQL and parameters without executing.
|
|
10
|
+
*
|
|
11
|
+
* @module cli/commands/tool
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from "commander";
|
|
14
|
+
import { loadYamlTools, } from "../utils/yaml-loader.js";
|
|
15
|
+
import { registerToolOptions, optsToParams, validateRequiredParams, } from "../utils/yaml-to-commander.js";
|
|
16
|
+
import { getFormat, isStreaming, createCliContext, } from "../utils/command-helpers.js";
|
|
17
|
+
import { resolveSystem } from "../config/resolver.js";
|
|
18
|
+
import { connectSystem } from "../utils/connection.js";
|
|
19
|
+
import { renderOutput, renderNdjson, renderError, } from "../formatters/output.js";
|
|
20
|
+
import { ExitCode, classifyError, ErrorCode } from "../utils/exit-codes.js";
|
|
21
|
+
/**
|
|
22
|
+
* Register `ibmi tool <name>` — dynamic YAML tool execution.
|
|
23
|
+
*/
|
|
24
|
+
export function registerToolCommand(program) {
|
|
25
|
+
program
|
|
26
|
+
.command("tool <name>")
|
|
27
|
+
.description("Run a YAML-defined tool by name")
|
|
28
|
+
.option("--dry-run", "Show resolved SQL and parameters without executing")
|
|
29
|
+
.allowUnknownOption()
|
|
30
|
+
.allowExcessArguments()
|
|
31
|
+
.action(async (name, _opts, cmd) => {
|
|
32
|
+
const format = getFormat(cmd);
|
|
33
|
+
try {
|
|
34
|
+
// Resolve --tools paths from global options
|
|
35
|
+
const globalOpts = cmd.optsWithGlobals();
|
|
36
|
+
const toolsOpt = globalOpts["tools"];
|
|
37
|
+
if (!toolsOpt) {
|
|
38
|
+
renderError(new Error("No tools path specified. Use --tools <path> to specify YAML tool file(s)."), format, undefined, ErrorCode.USAGE_ERROR);
|
|
39
|
+
process.exitCode = ExitCode.USAGE;
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const paths = toolsOpt.split(",").map((p) => p.trim());
|
|
43
|
+
const config = loadYamlTools(paths);
|
|
44
|
+
// Find the tool
|
|
45
|
+
const tool = config.tools[name];
|
|
46
|
+
if (!tool) {
|
|
47
|
+
const available = Object.keys(config.tools).join(", ");
|
|
48
|
+
renderError(new Error(`Tool '${name}' not found. Available tools: ${available || "(none)"}`), format, undefined, ErrorCode.NOT_FOUND);
|
|
49
|
+
process.exitCode = ExitCode.USAGE;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Build a sub-command with tool-specific options and re-parse
|
|
53
|
+
const toolParams = resolveToolParams(cmd, tool);
|
|
54
|
+
// Validate required parameters
|
|
55
|
+
const missing = validateRequiredParams(toolParams, tool.parameters);
|
|
56
|
+
if (missing.length > 0) {
|
|
57
|
+
const flags = missing.map((n) => `--${n.replace(/_/g, "-")}`).join(", ");
|
|
58
|
+
renderError(new Error(`Missing required parameter(s): ${flags}`), format, undefined, ErrorCode.USAGE_ERROR);
|
|
59
|
+
process.exitCode = ExitCode.USAGE;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Dry-run: show SQL and parameters
|
|
63
|
+
const dryRun = globalOpts["dryRun"] || _opts["dryRun"];
|
|
64
|
+
if (dryRun) {
|
|
65
|
+
await handleDryRun(name, tool, toolParams, cmd);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Execute the tool
|
|
69
|
+
await executeTool(name, tool, toolParams, cmd);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
73
|
+
const classified = classifyError(error);
|
|
74
|
+
renderError(error, format, undefined, classified.errorCode);
|
|
75
|
+
process.exitCode = classified.exitCode;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parse tool-specific options from the raw argv using a dynamic Commander sub-command.
|
|
81
|
+
*/
|
|
82
|
+
function resolveToolParams(cmd, tool) {
|
|
83
|
+
if (tool.parameters.length === 0)
|
|
84
|
+
return {};
|
|
85
|
+
// Build a temporary command with tool-specific options
|
|
86
|
+
const tempCmd = new Command("temp");
|
|
87
|
+
tempCmd.exitOverride();
|
|
88
|
+
tempCmd.allowUnknownOption();
|
|
89
|
+
registerToolOptions(tempCmd, tool.parameters);
|
|
90
|
+
// Extract the raw args that were passed through by the parent command
|
|
91
|
+
// Commander stores unparsed args in cmd.args (after the <name> positional)
|
|
92
|
+
const rawArgs = cmd.args ?? [];
|
|
93
|
+
try {
|
|
94
|
+
tempCmd.parse(rawArgs, { from: "user" });
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Commander may throw for unrecognized options; we allow that
|
|
98
|
+
}
|
|
99
|
+
return optsToParams(tempCmd.opts(), tool.parameters);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Handle --dry-run: show resolved SQL and parameters.
|
|
103
|
+
*/
|
|
104
|
+
async function handleDryRun(name, tool, params, cmd) {
|
|
105
|
+
const format = getFormat(cmd);
|
|
106
|
+
if (!tool.statement) {
|
|
107
|
+
renderError(new Error(`Tool '${name}' has no SQL statement defined.`), format, undefined, ErrorCode.USAGE_ERROR);
|
|
108
|
+
process.exitCode = ExitCode.USAGE;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (format === "json") {
|
|
112
|
+
renderOutput([
|
|
113
|
+
{
|
|
114
|
+
tool: name,
|
|
115
|
+
dry_run: true,
|
|
116
|
+
sql: tool.statement.trim(),
|
|
117
|
+
parameters: params,
|
|
118
|
+
},
|
|
119
|
+
], format, { rowCount: 1, command: `tool:${name}` });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Human-readable dry-run output
|
|
123
|
+
const globalOpts = cmd.optsWithGlobals();
|
|
124
|
+
const systemName = globalOpts["system"];
|
|
125
|
+
const lines = [];
|
|
126
|
+
if (systemName) {
|
|
127
|
+
lines.push(`Would execute on [${systemName}]:`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
lines.push("Would execute:");
|
|
131
|
+
}
|
|
132
|
+
lines.push("────────────────────────────────────────");
|
|
133
|
+
lines.push(tool.statement.trim());
|
|
134
|
+
if (Object.keys(params).length > 0) {
|
|
135
|
+
lines.push("");
|
|
136
|
+
lines.push(`Parameters: ${JSON.stringify(params)}`);
|
|
137
|
+
}
|
|
138
|
+
lines.push("────────────────────────────────────────");
|
|
139
|
+
process.stdout.write(lines.join("\n") + "\n");
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Execute a YAML tool against the connected system.
|
|
143
|
+
*/
|
|
144
|
+
async function executeTool(name, tool, params, cmd) {
|
|
145
|
+
const format = getFormat(cmd);
|
|
146
|
+
const stream = isStreaming(cmd);
|
|
147
|
+
const globalOpts = cmd.optsWithGlobals();
|
|
148
|
+
if (!tool.statement) {
|
|
149
|
+
renderError(new Error(`Tool '${name}' has no SQL statement defined.`), format, undefined, ErrorCode.USAGE_ERROR);
|
|
150
|
+
process.exitCode = ExitCode.USAGE;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Resolve system and connect
|
|
154
|
+
const resolved = resolveSystem(globalOpts["system"]);
|
|
155
|
+
const cleanup = await connectSystem(resolved);
|
|
156
|
+
try {
|
|
157
|
+
const ctx = createCliContext(name);
|
|
158
|
+
const startTime = Date.now();
|
|
159
|
+
// Dynamic import to avoid loading server infrastructure until execution time
|
|
160
|
+
const { ParameterProcessor } = await import("../../ibmi-mcp-server/utils/sql/parameterProcessor.js");
|
|
161
|
+
const { IBMiConnectionPool } = await import("../../ibmi-mcp-server/services/connectionPool.js");
|
|
162
|
+
// Process SQL parameters (BindingValue from mapepire-js)
|
|
163
|
+
let processedSql;
|
|
164
|
+
let bindingParams = [];
|
|
165
|
+
if (tool.parameters.length > 0 && Object.keys(params).length > 0) {
|
|
166
|
+
// Convert YamlToolParameter[] to the SqlToolParameter shape expected by ParameterProcessor
|
|
167
|
+
const result = await ParameterProcessor.process(tool.statement, params, tool.parameters, { context: ctx });
|
|
168
|
+
processedSql = result.sql;
|
|
169
|
+
bindingParams = result.parameters;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
processedSql = tool.statement;
|
|
173
|
+
}
|
|
174
|
+
// Execute the query
|
|
175
|
+
const result = await IBMiConnectionPool.executeQuery(processedSql, bindingParams, ctx);
|
|
176
|
+
const elapsedMs = Date.now() - startTime;
|
|
177
|
+
const data = (result.data ?? []);
|
|
178
|
+
// NDJSON streaming: one JSON object per line
|
|
179
|
+
if (stream && format === "json") {
|
|
180
|
+
renderNdjson(data);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
renderOutput(data, format, {
|
|
184
|
+
rowCount: data.length,
|
|
185
|
+
elapsedMs,
|
|
186
|
+
system: resolved,
|
|
187
|
+
command: `tool:${name}`,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
await cleanup();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/cli/commands/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Discovery commands for YAML-defined tools.
|
|
3
|
+
*
|
|
4
|
+
* - `ibmi tools` — List all available tools
|
|
5
|
+
* - `ibmi tools show <name>` — Show detailed info for a single tool
|
|
6
|
+
* - `ibmi toolsets` — List all toolsets
|
|
7
|
+
*
|
|
8
|
+
* These are read-only commands that parse YAML files without connecting to a system.
|
|
9
|
+
* @module cli/commands/tools-list
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
/**
|
|
13
|
+
* Register `ibmi tools` — list available YAML tools.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerToolsCommand(program: Command): void;
|
|
16
|
+
/**
|
|
17
|
+
* Register `ibmi toolsets` — list available toolsets.
|
|
18
|
+
*/
|
|
19
|
+
export declare function registerToolsetsCommand(program: Command): void;
|
|
20
|
+
//# sourceMappingURL=tools-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tools-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+I3D;AAoBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC9D"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Discovery commands for YAML-defined tools.
|
|
3
|
+
*
|
|
4
|
+
* - `ibmi tools` — List all available tools
|
|
5
|
+
* - `ibmi tools show <name>` — Show detailed info for a single tool
|
|
6
|
+
* - `ibmi toolsets` — List all toolsets
|
|
7
|
+
*
|
|
8
|
+
* These are read-only commands that parse YAML files without connecting to a system.
|
|
9
|
+
* @module cli/commands/tools-list
|
|
10
|
+
*/
|
|
11
|
+
import { loadYamlTools, buildToolsetMap, } from "../utils/yaml-loader.js";
|
|
12
|
+
import { getFormat } from "../utils/command-helpers.js";
|
|
13
|
+
import { renderOutput, renderError, renderMessage, } from "../formatters/output.js";
|
|
14
|
+
import { ExitCode } from "../utils/exit-codes.js";
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the --tools paths from command options.
|
|
17
|
+
* Falls back to the default tools/ directory relative to the package root.
|
|
18
|
+
*/
|
|
19
|
+
function resolveToolsPaths(cmd) {
|
|
20
|
+
const opts = cmd.optsWithGlobals();
|
|
21
|
+
const toolsOpt = opts["tools"];
|
|
22
|
+
if (toolsOpt) {
|
|
23
|
+
return toolsOpt.split(",").map((p) => p.trim());
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Load YAML tools config from CLI options, with error handling.
|
|
29
|
+
*/
|
|
30
|
+
function loadToolsConfig(cmd) {
|
|
31
|
+
const paths = resolveToolsPaths(cmd);
|
|
32
|
+
if (paths.length === 0) {
|
|
33
|
+
process.stderr.write("No tools path specified. Use --tools <path> to specify YAML tool file(s) or directory.\n");
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return loadYamlTools(paths);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register `ibmi tools` — list available YAML tools.
|
|
40
|
+
*/
|
|
41
|
+
export function registerToolsCommand(program) {
|
|
42
|
+
const toolsCmd = program
|
|
43
|
+
.command("tools")
|
|
44
|
+
.description("List available YAML-defined tools")
|
|
45
|
+
.option("--toolset <name>", "Filter by toolset name");
|
|
46
|
+
// ibmi tools (default: list all)
|
|
47
|
+
toolsCmd.action((opts, cmd) => {
|
|
48
|
+
const format = getFormat(cmd);
|
|
49
|
+
try {
|
|
50
|
+
const config = loadToolsConfig(cmd);
|
|
51
|
+
if (!config) {
|
|
52
|
+
process.exitCode = ExitCode.USAGE;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const toolsetMap = buildToolsetMap(config.toolsets);
|
|
56
|
+
const toolsetFilter = opts["toolset"];
|
|
57
|
+
const rows = [];
|
|
58
|
+
for (const [name, tool] of Object.entries(config.tools)) {
|
|
59
|
+
if (tool.enabled === false)
|
|
60
|
+
continue;
|
|
61
|
+
const toolsets = toolsetMap.get(name) ?? [];
|
|
62
|
+
// Filter by toolset if specified
|
|
63
|
+
if (toolsetFilter && !toolsets.includes(toolsetFilter))
|
|
64
|
+
continue;
|
|
65
|
+
rows.push({
|
|
66
|
+
TOOL: name,
|
|
67
|
+
TOOLSET: toolsets.join(", ") || "-",
|
|
68
|
+
DESCRIPTION: tool.description,
|
|
69
|
+
PARAMS: tool.parameters.length,
|
|
70
|
+
READ_ONLY: tool.security?.readOnly ?? tool.annotations?.["readOnlyHint"] ?? true,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (rows.length === 0) {
|
|
74
|
+
renderMessage(toolsetFilter
|
|
75
|
+
? `No tools found in toolset '${toolsetFilter}'.`
|
|
76
|
+
: "No tools found.", format);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
renderOutput(rows, format, { rowCount: rows.length });
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
renderError(err instanceof Error ? err : new Error(String(err)), format);
|
|
83
|
+
process.exitCode = ExitCode.GENERAL;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// ibmi tools show <name>
|
|
87
|
+
toolsCmd
|
|
88
|
+
.command("show <name>")
|
|
89
|
+
.description("Show detailed information for a tool")
|
|
90
|
+
.action((name, _opts, cmd) => {
|
|
91
|
+
const format = getFormat(cmd);
|
|
92
|
+
try {
|
|
93
|
+
const config = loadToolsConfig(cmd);
|
|
94
|
+
if (!config) {
|
|
95
|
+
process.exitCode = ExitCode.USAGE;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const tool = config.tools[name];
|
|
99
|
+
if (!tool) {
|
|
100
|
+
renderError(new Error(`Tool '${name}' not found. Use 'ibmi tools --tools <path>' to list available tools.`), format);
|
|
101
|
+
process.exitCode = ExitCode.USAGE;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const toolsetMap = buildToolsetMap(config.toolsets);
|
|
105
|
+
const toolsets = toolsetMap.get(name) ?? [];
|
|
106
|
+
if (format === "json") {
|
|
107
|
+
// JSON: output structured data
|
|
108
|
+
renderOutput([
|
|
109
|
+
{
|
|
110
|
+
name,
|
|
111
|
+
description: tool.description,
|
|
112
|
+
source: tool.source,
|
|
113
|
+
toolsets,
|
|
114
|
+
readOnly: tool.security?.readOnly ?? true,
|
|
115
|
+
parameters: tool.parameters,
|
|
116
|
+
sql: tool.statement ?? null,
|
|
117
|
+
},
|
|
118
|
+
], format, { rowCount: 1 });
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Human-readable detail view
|
|
122
|
+
const lines = [];
|
|
123
|
+
lines.push(`Tool: ${name}`);
|
|
124
|
+
lines.push(`Description: ${tool.description}`);
|
|
125
|
+
lines.push(`Source: ${tool.source}`);
|
|
126
|
+
if (toolsets.length > 0) {
|
|
127
|
+
lines.push(`Toolsets: ${toolsets.join(", ")}`);
|
|
128
|
+
}
|
|
129
|
+
lines.push(`Read-only: ${tool.security?.readOnly ?? tool.annotations?.["readOnlyHint"] ?? true}`);
|
|
130
|
+
lines.push("");
|
|
131
|
+
// Parameters
|
|
132
|
+
if (tool.parameters.length > 0) {
|
|
133
|
+
lines.push("Parameters:");
|
|
134
|
+
for (const p of tool.parameters) {
|
|
135
|
+
lines.push(formatParameter(p));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lines.push("Parameters: (none)");
|
|
140
|
+
}
|
|
141
|
+
lines.push("");
|
|
142
|
+
// SQL
|
|
143
|
+
if (tool.statement) {
|
|
144
|
+
lines.push("SQL:");
|
|
145
|
+
lines.push(tool.statement.trim());
|
|
146
|
+
}
|
|
147
|
+
process.stdout.write(lines.join("\n") + "\n");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
renderError(err instanceof Error ? err : new Error(String(err)), format);
|
|
152
|
+
process.exitCode = ExitCode.GENERAL;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Format a parameter for human-readable display.
|
|
158
|
+
*/
|
|
159
|
+
function formatParameter(p) {
|
|
160
|
+
const parts = [];
|
|
161
|
+
parts.push(` --${p.name.replace(/_/g, "-")}`);
|
|
162
|
+
parts.push(`(${p.type})`);
|
|
163
|
+
if (p.required)
|
|
164
|
+
parts.push("[required]");
|
|
165
|
+
if (p.default !== undefined)
|
|
166
|
+
parts.push(`default: ${JSON.stringify(p.default)}`);
|
|
167
|
+
if (p.enum && p.enum.length > 0) {
|
|
168
|
+
parts.push(`choices: ${p.enum.join(", ")}`);
|
|
169
|
+
}
|
|
170
|
+
if (p.description)
|
|
171
|
+
parts.push(`— ${p.description}`);
|
|
172
|
+
return parts.join(" ");
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Register `ibmi toolsets` — list available toolsets.
|
|
176
|
+
*/
|
|
177
|
+
export function registerToolsetsCommand(program) {
|
|
178
|
+
program
|
|
179
|
+
.command("toolsets")
|
|
180
|
+
.description("List available toolsets")
|
|
181
|
+
.action((_opts, cmd) => {
|
|
182
|
+
const format = getFormat(cmd);
|
|
183
|
+
try {
|
|
184
|
+
const config = loadToolsConfig(cmd);
|
|
185
|
+
if (!config) {
|
|
186
|
+
process.exitCode = ExitCode.USAGE;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const rows = [];
|
|
190
|
+
for (const [name, ts] of Object.entries(config.toolsets)) {
|
|
191
|
+
rows.push({
|
|
192
|
+
TOOLSET: name,
|
|
193
|
+
TOOLS: ts.tools.length,
|
|
194
|
+
DESCRIPTION: ts.description ?? ts.title ?? "-",
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (rows.length === 0) {
|
|
198
|
+
renderMessage("No toolsets found.", format);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
renderOutput(rows, format, { rowCount: rows.length });
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
renderError(err instanceof Error ? err : new Error(String(err)), format);
|
|
205
|
+
process.exitCode = ExitCode.GENERAL;
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=tools-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-list.js","sourceRoot":"","sources":["../../../src/cli/commands/tools-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `ibmi validate "<sql>"` command — validate SQL syntax and object references.
|
|
3
|
+
* @module cli/commands/validate
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
export declare function registerValidateCommand(program: Command): void;
|
|
7
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF9D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `ibmi validate "<sql>"` command — validate SQL syntax and object references.
|
|
3
|
+
* @module cli/commands/validate
|
|
4
|
+
*/
|
|
5
|
+
import { withConnection } from "../utils/command-helpers.js";
|
|
6
|
+
export function registerValidateCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command("validate <sql>")
|
|
9
|
+
.description("Validate SQL syntax and verify referenced objects exist")
|
|
10
|
+
.action(async (sql, _opts, cmd) => {
|
|
11
|
+
await withConnection(cmd, "validate_query", async (_resolved, ctx) => {
|
|
12
|
+
const { validateQueryLogic } = await import("../../ibmi-mcp-server/tools/validateQuery.tool.js");
|
|
13
|
+
const result = await validateQueryLogic({ sql_statement: sql }, ctx, {});
|
|
14
|
+
if (!result.success) {
|
|
15
|
+
throw new Error(result.error?.message ?? "Failed to validate query");
|
|
16
|
+
}
|
|
17
|
+
// Build a summary view for CLI output
|
|
18
|
+
const summary = [];
|
|
19
|
+
// Parse results summary
|
|
20
|
+
if (result.data && result.data.length > 0) {
|
|
21
|
+
const stmtTypes = [
|
|
22
|
+
...new Set(result.data
|
|
23
|
+
.map((r) => r.SQL_STATEMENT_TYPE)
|
|
24
|
+
.filter(Boolean)),
|
|
25
|
+
];
|
|
26
|
+
summary.push({
|
|
27
|
+
CHECK: "Syntax",
|
|
28
|
+
STATUS: "PASS",
|
|
29
|
+
DETAILS: stmtTypes.length > 0
|
|
30
|
+
? `Statement type: ${stmtTypes.join(", ")}`
|
|
31
|
+
: "Parsed successfully",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
summary.push({
|
|
36
|
+
CHECK: "Syntax",
|
|
37
|
+
STATUS: "FAIL",
|
|
38
|
+
DETAILS: "Statement could not be parsed (syntax error)",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Object validation summary
|
|
42
|
+
const ov = result.objectValidation;
|
|
43
|
+
if (ov) {
|
|
44
|
+
summary.push({
|
|
45
|
+
CHECK: "Tables",
|
|
46
|
+
STATUS: ov.tables.invalid.length === 0 ? "PASS" : "FAIL",
|
|
47
|
+
DETAILS: ov.tables.invalid.length === 0
|
|
48
|
+
? `${ov.tables.valid.length} table(s) verified`
|
|
49
|
+
: `Not found: ${ov.tables.invalid.join(", ")}`,
|
|
50
|
+
});
|
|
51
|
+
if (ov.columns.valid.length > 0 || ov.columns.invalid.length > 0) {
|
|
52
|
+
summary.push({
|
|
53
|
+
CHECK: "Columns",
|
|
54
|
+
STATUS: ov.columns.invalid.length === 0 ? "PASS" : "WARN",
|
|
55
|
+
DETAILS: ov.columns.invalid.length === 0
|
|
56
|
+
? `${ov.columns.valid.length} column(s) verified`
|
|
57
|
+
: `Not verified: ${ov.columns.invalid.join(", ")}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (ov.routines.valid.length > 0 || ov.routines.invalid.length > 0) {
|
|
61
|
+
summary.push({
|
|
62
|
+
CHECK: "Routines",
|
|
63
|
+
STATUS: ov.routines.invalid.length === 0 ? "PASS" : "WARN",
|
|
64
|
+
DETAILS: ov.routines.invalid.length === 0
|
|
65
|
+
? `${ov.routines.valid.length} routine(s) verified`
|
|
66
|
+
: `Not verified: ${ov.routines.invalid.join(", ")}`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
data: summary,
|
|
72
|
+
meta: { rowCount: summary.length },
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Credential management for the IBM i CLI.
|
|
3
|
+
* Handles environment variable expansion in config values and interactive password prompting.
|
|
4
|
+
* @module cli/config/credentials
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Expand ${ENV_VAR} references in a string value.
|
|
8
|
+
* Returns the original string if no env var pattern is found or the var is not set.
|
|
9
|
+
*/
|
|
10
|
+
export declare function expandEnvVars(value: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Prompt the user for a password interactively (hidden input).
|
|
13
|
+
* Returns the entered password string.
|
|
14
|
+
*/
|
|
15
|
+
export declare function promptPassword(prompt: string): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the password for a system config.
|
|
18
|
+
* Priority: config password (with env expansion) → interactive prompt.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolvePassword(systemName: string, configPassword: string | undefined, user: string, host: string): Promise<string>;
|
|
21
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/cli/config/credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDpE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
|