@ibm/ibmi-mcp-server 0.4.5 → 0.5.0

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.
Files changed (153) hide show
  1. package/README.md +2 -0
  2. package/dist/config/index.d.ts +2 -0
  3. package/dist/config/index.d.ts.map +1 -1
  4. package/dist/config/index.js +58 -0
  5. package/dist/config/index.js.map +1 -1
  6. package/dist/ibmi-mcp-server/schemas/config.d.ts +58 -0
  7. package/dist/ibmi-mcp-server/schemas/config.d.ts.map +1 -1
  8. package/dist/ibmi-mcp-server/schemas/config.js +35 -0
  9. package/dist/ibmi-mcp-server/schemas/config.js.map +1 -1
  10. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts +18 -1
  11. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.d.ts.map +1 -1
  12. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js +30 -2
  13. package/dist/ibmi-mcp-server/services/authenticatedPoolManager.js.map +1 -1
  14. package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts +5 -2
  15. package/dist/ibmi-mcp-server/services/baseConnectionPool.d.ts.map +1 -1
  16. package/dist/ibmi-mcp-server/services/baseConnectionPool.js +45 -3
  17. package/dist/ibmi-mcp-server/services/baseConnectionPool.js.map +1 -1
  18. package/dist/ibmi-mcp-server/services/connectionPool.d.ts +3 -2
  19. package/dist/ibmi-mcp-server/services/connectionPool.d.ts.map +1 -1
  20. package/dist/ibmi-mcp-server/services/connectionPool.js +5 -2
  21. package/dist/ibmi-mcp-server/services/connectionPool.js.map +1 -1
  22. package/dist/ibmi-mcp-server/services/sourceManager.d.ts +18 -1
  23. package/dist/ibmi-mcp-server/services/sourceManager.d.ts.map +1 -1
  24. package/dist/ibmi-mcp-server/services/sourceManager.js +31 -2
  25. package/dist/ibmi-mcp-server/services/sourceManager.js.map +1 -1
  26. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts.map +1 -1
  27. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +1 -1
  28. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -1
  29. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +1 -1
  30. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -1
  31. package/dist/ibmi-mcp-server/utils/config/toolFactory.js +47 -4
  32. package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -1
  33. package/dist/public/context.d.ts +5 -0
  34. package/dist/public/context.d.ts.map +1 -0
  35. package/dist/public/context.js +5 -0
  36. package/dist/public/context.js.map +1 -0
  37. package/dist/public/formatting.d.ts +5 -0
  38. package/dist/public/formatting.d.ts.map +1 -0
  39. package/dist/public/formatting.js +5 -0
  40. package/dist/public/formatting.js.map +1 -0
  41. package/dist/public/services.d.ts +8 -0
  42. package/dist/public/services.d.ts.map +1 -0
  43. package/dist/public/services.js +8 -0
  44. package/dist/public/services.js.map +1 -0
  45. package/dist/public/tools.d.ts +16 -0
  46. package/dist/public/tools.d.ts.map +1 -0
  47. package/dist/public/tools.js +15 -0
  48. package/dist/public/tools.js.map +1 -0
  49. package/package.json +20 -17
  50. package/dist/cli/commands/columns.d.ts +0 -7
  51. package/dist/cli/commands/columns.d.ts.map +0 -1
  52. package/dist/cli/commands/columns.js +0 -29
  53. package/dist/cli/commands/columns.js.map +0 -1
  54. package/dist/cli/commands/completion.d.ts +0 -10
  55. package/dist/cli/commands/completion.d.ts.map +0 -1
  56. package/dist/cli/commands/completion.js +0 -247
  57. package/dist/cli/commands/completion.js.map +0 -1
  58. package/dist/cli/commands/config.d.ts +0 -11
  59. package/dist/cli/commands/config.d.ts.map +0 -1
  60. package/dist/cli/commands/config.js +0 -124
  61. package/dist/cli/commands/config.js.map +0 -1
  62. package/dist/cli/commands/describe.d.ts +0 -9
  63. package/dist/cli/commands/describe.d.ts.map +0 -1
  64. package/dist/cli/commands/describe.js +0 -82
  65. package/dist/cli/commands/describe.js.map +0 -1
  66. package/dist/cli/commands/related.d.ts +0 -7
  67. package/dist/cli/commands/related.d.ts.map +0 -1
  68. package/dist/cli/commands/related.js +0 -32
  69. package/dist/cli/commands/related.js.map +0 -1
  70. package/dist/cli/commands/schemas.d.ts +0 -7
  71. package/dist/cli/commands/schemas.d.ts.map +0 -1
  72. package/dist/cli/commands/schemas.js +0 -49
  73. package/dist/cli/commands/schemas.js.map +0 -1
  74. package/dist/cli/commands/sql.d.ts +0 -8
  75. package/dist/cli/commands/sql.d.ts.map +0 -1
  76. package/dist/cli/commands/sql.js +0 -187
  77. package/dist/cli/commands/sql.js.map +0 -1
  78. package/dist/cli/commands/system.d.ts +0 -11
  79. package/dist/cli/commands/system.d.ts.map +0 -1
  80. package/dist/cli/commands/system.js +0 -263
  81. package/dist/cli/commands/system.js.map +0 -1
  82. package/dist/cli/commands/tables.d.ts +0 -7
  83. package/dist/cli/commands/tables.d.ts.map +0 -1
  84. package/dist/cli/commands/tables.js +0 -48
  85. package/dist/cli/commands/tables.js.map +0 -1
  86. package/dist/cli/commands/tool.d.ts +0 -18
  87. package/dist/cli/commands/tool.d.ts.map +0 -1
  88. package/dist/cli/commands/tool.js +0 -194
  89. package/dist/cli/commands/tool.js.map +0 -1
  90. package/dist/cli/commands/tools-list.d.ts +0 -20
  91. package/dist/cli/commands/tools-list.d.ts.map +0 -1
  92. package/dist/cli/commands/tools-list.js +0 -209
  93. package/dist/cli/commands/tools-list.js.map +0 -1
  94. package/dist/cli/commands/validate.d.ts +0 -7
  95. package/dist/cli/commands/validate.d.ts.map +0 -1
  96. package/dist/cli/commands/validate.js +0 -77
  97. package/dist/cli/commands/validate.js.map +0 -1
  98. package/dist/cli/config/credentials.d.ts +0 -21
  99. package/dist/cli/config/credentials.d.ts.map +0 -1
  100. package/dist/cli/config/credentials.js +0 -96
  101. package/dist/cli/config/credentials.js.map +0 -1
  102. package/dist/cli/config/index.d.ts +0 -11
  103. package/dist/cli/config/index.d.ts.map +0 -1
  104. package/dist/cli/config/index.js +0 -9
  105. package/dist/cli/config/index.js.map +0 -1
  106. package/dist/cli/config/loader.d.ts +0 -52
  107. package/dist/cli/config/loader.d.ts.map +0 -1
  108. package/dist/cli/config/loader.js +0 -237
  109. package/dist/cli/config/loader.js.map +0 -1
  110. package/dist/cli/config/resolver.d.ts +0 -31
  111. package/dist/cli/config/resolver.d.ts.map +0 -1
  112. package/dist/cli/config/resolver.js +0 -115
  113. package/dist/cli/config/resolver.js.map +0 -1
  114. package/dist/cli/config/schema.d.ts +0 -128
  115. package/dist/cli/config/schema.d.ts.map +0 -1
  116. package/dist/cli/config/schema.js +0 -37
  117. package/dist/cli/config/schema.js.map +0 -1
  118. package/dist/cli/config/types.d.ts +0 -59
  119. package/dist/cli/config/types.d.ts.map +0 -1
  120. package/dist/cli/config/types.js +0 -6
  121. package/dist/cli/config/types.js.map +0 -1
  122. package/dist/cli/formatters/output.d.ts +0 -70
  123. package/dist/cli/formatters/output.d.ts.map +0 -1
  124. package/dist/cli/formatters/output.js +0 -279
  125. package/dist/cli/formatters/output.js.map +0 -1
  126. package/dist/cli/index.d.ts +0 -13
  127. package/dist/cli/index.d.ts.map +0 -1
  128. package/dist/cli/index.js +0 -102
  129. package/dist/cli/index.js.map +0 -1
  130. package/dist/cli/utils/command-helpers.d.ts +0 -47
  131. package/dist/cli/utils/command-helpers.d.ts.map +0 -1
  132. package/dist/cli/utils/command-helpers.js +0 -211
  133. package/dist/cli/utils/command-helpers.js.map +0 -1
  134. package/dist/cli/utils/connection.d.ts +0 -20
  135. package/dist/cli/utils/connection.d.ts.map +0 -1
  136. package/dist/cli/utils/connection.js +0 -37
  137. package/dist/cli/utils/connection.js.map +0 -1
  138. package/dist/cli/utils/exit-codes.d.ts +0 -48
  139. package/dist/cli/utils/exit-codes.d.ts.map +0 -1
  140. package/dist/cli/utils/exit-codes.js +0 -111
  141. package/dist/cli/utils/exit-codes.js.map +0 -1
  142. package/dist/cli/utils/multi-connection.d.ts +0 -26
  143. package/dist/cli/utils/multi-connection.d.ts.map +0 -1
  144. package/dist/cli/utils/multi-connection.js +0 -72
  145. package/dist/cli/utils/multi-connection.js.map +0 -1
  146. package/dist/cli/utils/yaml-loader.d.ts +0 -69
  147. package/dist/cli/utils/yaml-loader.d.ts.map +0 -1
  148. package/dist/cli/utils/yaml-loader.js +0 -135
  149. package/dist/cli/utils/yaml-loader.js.map +0 -1
  150. package/dist/cli/utils/yaml-to-commander.d.ts +0 -26
  151. package/dist/cli/utils/yaml-to-commander.d.ts.map +0 -1
  152. package/dist/cli/utils/yaml-to-commander.js +0 -156
  153. package/dist/cli/utils/yaml-to-commander.js.map +0 -1
@@ -1,124 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi config` commands for inspecting CLI configuration.
3
- * Shows merged configuration with per-setting origin tracking.
4
- * @module cli/commands/config
5
- */
6
- import { loadConfig, loadConfigLayers, getUserConfigPath, } from "../config/index.js";
7
- import { renderOutput, renderError } from "../formatters/output.js";
8
- import { ExitCode } from "../utils/exit-codes.js";
9
- import { getFormat } from "../utils/command-helpers.js";
10
- /**
11
- * Determine which config layer a top-level key (`default` or `format`) came from.
12
- * Project layer takes precedence if it defines the key.
13
- */
14
- function findOrigin(layers, key) {
15
- // Check project first (higher precedence)
16
- for (const layer of [...layers].reverse()) {
17
- if (layer.config && layer.config[key] !== undefined) {
18
- return layer.scope;
19
- }
20
- }
21
- return "unknown";
22
- }
23
- /**
24
- * Determine which config layer a system definition came from.
25
- * Project layer takes precedence for same-named systems.
26
- */
27
- function findSystemOrigin(layers, name) {
28
- for (const layer of [...layers].reverse()) {
29
- if (layer.config && name in layer.config.systems) {
30
- return layer.scope;
31
- }
32
- }
33
- return "unknown";
34
- }
35
- /** Environment variables checked for config overrides. */
36
- const CONFIG_ENV_VARS = ["IBMI_SYSTEM", "DB2i_HOST", "DB2i_USER", "DB2i_PASS"];
37
- /** Env vars whose values must be masked in output. */
38
- const SENSITIVE_ENV_VARS = new Set(["DB2i_PASS"]);
39
- /** Return active environment variable overrides that affect config resolution. */
40
- function getActiveEnvOverrides() {
41
- const overrides = [];
42
- for (const name of CONFIG_ENV_VARS) {
43
- const value = process.env[name];
44
- if (value) {
45
- overrides.push({ name, value: SENSITIVE_ENV_VARS.has(name) ? "****" : value });
46
- }
47
- }
48
- return overrides;
49
- }
50
- /**
51
- * Register `ibmi config` subcommands.
52
- */
53
- export function registerConfigCommand(program) {
54
- const config = program
55
- .command("config")
56
- .description("Inspect CLI configuration")
57
- .action(() => {
58
- config.outputHelp();
59
- });
60
- config
61
- .command("show")
62
- .description("Show active configuration with file origins")
63
- .action((_opts, cmd) => {
64
- const format = getFormat(cmd);
65
- try {
66
- const layers = loadConfigLayers();
67
- const merged = loadConfig();
68
- const data = [];
69
- // File layer status
70
- const userPath = getUserConfigPath();
71
- const userLayer = layers.find((l) => l.scope === "user");
72
- data.push({
73
- PROPERTY: "[user]",
74
- VALUE: userLayer?.exists ? "loaded" : "not found",
75
- SOURCE: userPath,
76
- });
77
- const projectLayer = layers.find((l) => l.scope === "project");
78
- if (projectLayer) {
79
- data.push({
80
- PROPERTY: "[project]",
81
- VALUE: "loaded",
82
- SOURCE: projectLayer.path,
83
- });
84
- }
85
- // Top-level settings
86
- if (merged.default) {
87
- data.push({
88
- PROPERTY: "default",
89
- VALUE: merged.default,
90
- SOURCE: findOrigin(layers, "default"),
91
- });
92
- }
93
- if (merged.format) {
94
- data.push({
95
- PROPERTY: "format",
96
- VALUE: merged.format,
97
- SOURCE: findOrigin(layers, "format"),
98
- });
99
- }
100
- // Systems
101
- for (const [name, sys] of Object.entries(merged.systems)) {
102
- data.push({
103
- PROPERTY: `systems.${name}`,
104
- VALUE: `${sys.host}:${sys.port} (${sys.user})`,
105
- SOURCE: findSystemOrigin(layers, name),
106
- });
107
- }
108
- // Active env overrides
109
- for (const override of getActiveEnvOverrides()) {
110
- data.push({
111
- PROPERTY: override.name,
112
- VALUE: override.value,
113
- SOURCE: "environment",
114
- });
115
- }
116
- renderOutput(data, format, { rowCount: data.length });
117
- }
118
- catch (err) {
119
- renderError(err instanceof Error ? err : new Error(String(err)), format);
120
- process.exitCode = ExitCode.GENERAL;
121
- }
122
- });
123
- }
124
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi describe <objects>` command — generate DDL for SQL objects.
3
- * Accepts a comma-delimited list of LIBRARY.OBJECT references and returns
4
- * the CREATE statement for each using the QSYS2.GENERATE_SQL service.
5
- * @module cli/commands/describe
6
- */
7
- import { Command } from "commander";
8
- export declare function registerDescribeCommand(program: Command): void;
9
- //# sourceMappingURL=describe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/describe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiF9D"}
@@ -1,82 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi describe <objects>` command — generate DDL for SQL objects.
3
- * Accepts a comma-delimited list of LIBRARY.OBJECT references and returns
4
- * the CREATE statement for each using the QSYS2.GENERATE_SQL service.
5
- * @module cli/commands/describe
6
- */
7
- import { withConnection } from "../utils/command-helpers.js";
8
- import { OBJECT_TYPES } from "../../ibmi-mcp-server/tools/generateSql.tool.js";
9
- import { ExitCode } from "../utils/exit-codes.js";
10
- /**
11
- * Parse a qualified object reference into library and name.
12
- * "SAMPLE.EMPLOYEE" → { library: "SAMPLE", name: "EMPLOYEE" }
13
- * "EMPLOYEE" → { name: "EMPLOYEE" } (library defaults at tool level)
14
- */
15
- function parseObjectRef(ref) {
16
- const parts = ref.trim().split(".");
17
- if (parts.length > 2) {
18
- throw new Error(`Invalid object reference "${ref}". Expected LIBRARY.OBJECT or OBJECT.`);
19
- }
20
- if (parts.length === 2) {
21
- return { library: parts[0].toUpperCase(), name: parts[1].toUpperCase() };
22
- }
23
- return { name: parts[0].toUpperCase() };
24
- }
25
- export function registerDescribeCommand(program) {
26
- program
27
- .command("describe <objects>")
28
- .description("Generate DDL for one or more SQL objects (comma-separated LIBRARY.OBJECT)")
29
- .option("--type <type>", `Object type: ${OBJECT_TYPES.join(", ")}`, "TABLE")
30
- .action(async (objects, opts, cmd) => {
31
- const objectType = opts["type"].toUpperCase();
32
- if (!OBJECT_TYPES.includes(objectType)) {
33
- process.stderr.write(`Error: Invalid --type "${opts["type"]}". Valid types: ${OBJECT_TYPES.join(", ")}\n`);
34
- process.exitCode = ExitCode.USAGE;
35
- return;
36
- }
37
- const refs = objects
38
- .split(",")
39
- .map((s) => s.trim())
40
- .filter(Boolean);
41
- if (refs.length === 0) {
42
- process.stderr.write("Error: No objects specified.\n");
43
- process.exitCode = ExitCode.USAGE;
44
- return;
45
- }
46
- await withConnection(cmd, "describe_sql_object", async (_resolved, ctx) => {
47
- const { generateSqlTool } = await import("../../ibmi-mcp-server/tools/generateSql.tool.js");
48
- const logicFn = generateSqlTool.logic;
49
- const data = [];
50
- for (const ref of refs) {
51
- const parsed = parseObjectRef(ref);
52
- const result = await logicFn({
53
- object_name: parsed.name,
54
- object_library: parsed.library ?? "QSYS2",
55
- object_type: objectType,
56
- }, ctx, {});
57
- const qualifiedName = parsed.library
58
- ? `${parsed.library}.${parsed.name}`
59
- : parsed.name;
60
- if (result.success && result.sql) {
61
- data.push({
62
- OBJECT: qualifiedName,
63
- TYPE: objectType,
64
- DDL: result.sql,
65
- });
66
- }
67
- else {
68
- data.push({
69
- OBJECT: qualifiedName,
70
- TYPE: objectType,
71
- DDL: `ERROR: ${result.error?.message ?? "DDL generation failed"}`,
72
- });
73
- }
74
- }
75
- return {
76
- data,
77
- meta: { rowCount: data.length },
78
- };
79
- });
80
- });
81
- }
82
- //# sourceMappingURL=describe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"describe.js","sourceRoot":"","sources":["../../../src/cli/commands/describe.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi related <library> <object>` command — find dependent objects.
3
- * @module cli/commands/related
4
- */
5
- import { Command } from "commander";
6
- export declare function registerRelatedCommand(program: Command): void;
7
- //# sourceMappingURL=related.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"related.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/related.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqC7D"}
@@ -1,32 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi related <library> <object>` command — find dependent objects.
3
- * @module cli/commands/related
4
- */
5
- import { withConnection } from "../utils/command-helpers.js";
6
- export function registerRelatedCommand(program) {
7
- program
8
- .command("related <library> <object>")
9
- .description("Find objects that depend on a database file")
10
- .option("--type <type>", "Filter by object type (e.g. INDEX, VIEW, TRIGGER, FOREIGN KEY)")
11
- .action(async (library, object, opts, cmd) => {
12
- await withConnection(cmd, "get_related_objects", async (_resolved, ctx) => {
13
- const { getRelatedObjectsLogic } = await import("../../ibmi-mcp-server/tools/getRelatedObjects.tool.js");
14
- const result = await getRelatedObjectsLogic({
15
- library_name: library,
16
- file_name: object,
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
- object_type_filter: opts["type"],
19
- }, ctx, {});
20
- if (!result.success) {
21
- throw new Error(result.error?.message ?? "Failed to get related objects");
22
- }
23
- return {
24
- data: (result.data ?? []),
25
- meta: {
26
- rowCount: result.rowCount ?? 0,
27
- },
28
- };
29
- });
30
- });
31
- }
32
- //# sourceMappingURL=related.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"related.js","sourceRoot":"","sources":["../../../src/cli/commands/related.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,4BAA4B,CAAC;SACrC,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CACL,eAAe,EACf,gEAAgE,CACjE;SACA,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,MAAc,EAAE,IAAI,EAAE,GAAY,EAAE,EAAE;QACpE,MAAM,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;YACxE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAC7C,uDAAuD,CACxD,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC;gBACE,YAAY,EAAE,OAAO;gBACrB,SAAS,EAAE,MAAM;gBACjB,8DAA8D;gBAC9D,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAQ;aACxC,EACD,GAAG,EACH,EAAgB,CACjB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,+BAA+B,CAAC,CAAC;YAC5E,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAA8B;gBACtD,IAAI,EAAE;oBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;iBAC/B;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi schemas` command — list available schemas/libraries.
3
- * @module cli/commands/schemas
4
- */
5
- import { Command } from "commander";
6
- export declare function registerSchemasCommand(program: Command): void;
7
- //# sourceMappingURL=schemas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmD7D"}
@@ -1,49 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi schemas` command — list available schemas/libraries.
3
- * @module cli/commands/schemas
4
- */
5
- import { withConnection } from "../utils/command-helpers.js";
6
- import { ExitCode } from "../utils/exit-codes.js";
7
- export function registerSchemasCommand(program) {
8
- program
9
- .command("schemas")
10
- .description("List schemas/libraries on the target system")
11
- .option("--filter <pattern>", "Filter by schema name (SQL LIKE pattern, e.g. 'MY%')")
12
- .option("--system-schemas", "Include system schemas (Q* and SYS*)", false)
13
- .option("--limit <n>", "Maximum rows to return", "50")
14
- .option("--offset <n>", "Rows to skip for pagination", "0")
15
- .action(async (opts, cmd) => {
16
- const limit = parseInt(opts["limit"], 10);
17
- const offset = parseInt(opts["offset"], 10);
18
- if (isNaN(limit) || limit < 0) {
19
- process.stderr.write(`Error: Invalid --limit value: "${opts["limit"]}". Must be a positive integer.\n`);
20
- process.exitCode = ExitCode.USAGE;
21
- return;
22
- }
23
- if (isNaN(offset) || offset < 0) {
24
- process.stderr.write(`Error: Invalid --offset value: "${opts["offset"]}". Must be a non-negative integer.\n`);
25
- process.exitCode = ExitCode.USAGE;
26
- return;
27
- }
28
- await withConnection(cmd, "list_schemas", async (_resolved, ctx) => {
29
- const { listSchemasLogic } = await import("../../ibmi-mcp-server/tools/listSchemas.tool.js");
30
- const result = await listSchemasLogic({
31
- filter: opts["filter"],
32
- include_system: opts["systemSchemas"],
33
- limit,
34
- offset,
35
- }, ctx, {});
36
- if (!result.success) {
37
- throw new Error(result.error?.message ?? "Failed to list schemas");
38
- }
39
- return {
40
- data: (result.data ?? []),
41
- meta: {
42
- rowCount: result.rowCount ?? 0,
43
- hasMore: result.hasMore,
44
- },
45
- };
46
- });
47
- });
48
- }
49
- //# sourceMappingURL=schemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/cli/commands/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,oBAAoB,EAAE,sDAAsD,CAAC;SACpF,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,EAAE,KAAK,CAAC;SACzE,MAAM,CAAC,aAAa,EAAE,wBAAwB,EAAE,IAAI,CAAC;SACrD,MAAM,CAAC,cAAc,EAAE,6BAA6B,EAAE,GAAG,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAY,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAW,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAW,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACxG,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;YAC9G,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;YACjE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CACvC,iDAAiD,CAClD,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC;gBACE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAuB;gBAC5C,cAAc,EAAE,IAAI,CAAC,eAAe,CAAY;gBAChD,KAAK;gBACL,MAAM;aACP,EACD,GAAG,EACH,EAAgB,CACjB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC,CAAC;YACrE,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAA8B;gBACtD,IAAI,EAAE;oBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;oBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi sql "<sql>"` command — execute SQL queries.
3
- * Supports inline SQL, --file, stdin piping, and multi-system parallel execution.
4
- * @module cli/commands/sql
5
- */
6
- import { Command } from "commander";
7
- export declare function registerSqlCommand(program: Command): void;
8
- //# sourceMappingURL=sql.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sql.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0GzD"}
@@ -1,187 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi sql "<sql>"` command — execute SQL queries.
3
- * Supports inline SQL, --file, stdin piping, and multi-system parallel execution.
4
- * @module cli/commands/sql
5
- */
6
- import { readFileSync } from "fs";
7
- import { withConnection, getFormat, createCliContext } from "../utils/command-helpers.js";
8
- import { renderMessage, renderMultiSystemOutput, renderMultiSystemNdjson } from "../formatters/output.js";
9
- import { ExitCode } from "../utils/exit-codes.js";
10
- /**
11
- * Read SQL from stdin (piped input).
12
- * Returns null if stdin is a TTY (interactive).
13
- */
14
- function readStdin() {
15
- if (process.stdin.isTTY)
16
- return null;
17
- try {
18
- return readFileSync(0, "utf-8").trim();
19
- }
20
- catch {
21
- return null;
22
- }
23
- }
24
- /**
25
- * Resolve SQL from the various sources: argument, --file, or stdin.
26
- * Returns the SQL string or undefined if no source provided.
27
- */
28
- function resolveSql(statement, opts) {
29
- if (statement)
30
- return statement;
31
- if (opts["file"]) {
32
- try {
33
- return readFileSync(opts["file"], "utf-8").trim();
34
- }
35
- catch (err) {
36
- process.stderr.write(`Error reading file: ${err instanceof Error ? err.message : String(err)}\n`);
37
- process.exitCode = ExitCode.USAGE;
38
- return undefined;
39
- }
40
- }
41
- return readStdin() ?? undefined;
42
- }
43
- /**
44
- * Apply FETCH FIRST N ROWS ONLY if not already present.
45
- */
46
- function applyRowLimit(sql, maxRows) {
47
- if (maxRows &&
48
- !sql.toUpperCase().includes("FETCH FIRST") &&
49
- !sql.toUpperCase().includes("FETCH NEXT")) {
50
- return `${sql.replace(/;\s*$/, "")} FETCH FIRST ${maxRows} ROWS ONLY`;
51
- }
52
- return sql;
53
- }
54
- export function registerSqlCommand(program) {
55
- program
56
- .command("sql [statement]")
57
- .description("Execute a SQL query against the target system")
58
- .option("--file <path>", "Read SQL from a file")
59
- .option("--limit <n>", "Maximum rows to return")
60
- .option("--read-only", "Enforce read-only mode (default: true)", true)
61
- .option("--no-read-only", "Allow mutation queries")
62
- .option("--dry-run", "Print SQL without executing", false)
63
- .action(async (statement, opts, cmd) => {
64
- const sql = resolveSql(statement, opts);
65
- if (!sql) {
66
- if (!process.exitCode) {
67
- process.stderr.write("Error: No SQL provided. Pass as argument, use --file, or pipe via stdin.\n");
68
- process.exitCode = ExitCode.USAGE;
69
- }
70
- return;
71
- }
72
- // Dry run: print SQL and exit
73
- if (opts["dryRun"]) {
74
- const format = getFormat(cmd);
75
- renderMessage(sql, format);
76
- return;
77
- }
78
- // Multi-system detection
79
- const systemFlag = cmd.optsWithGlobals()["system"];
80
- if (systemFlag && systemFlag.includes(",")) {
81
- // Reject --watch + multi-system for v1
82
- if (cmd.optsWithGlobals()["watch"]) {
83
- process.stderr.write("Error: --watch is not supported with multiple systems.\n");
84
- process.exitCode = ExitCode.USAGE;
85
- return;
86
- }
87
- await handleMultiSystemSql(sql, opts, cmd, systemFlag);
88
- return;
89
- }
90
- // Existing single-system path (unchanged)
91
- await withConnection(cmd, "execute_sql", async (resolved, ctx) => {
92
- // Configure read-only mode based on CLI flag and system config
93
- const readOnly = opts["readOnly"] || resolved.config.readOnly;
94
- // Confirm execution if system requires it
95
- if (resolved.config.confirm && process.stdin.isTTY) {
96
- const { promptPassword } = await import("../config/credentials.js");
97
- const answer = await promptPassword(`Execute on [${resolved.name}]? (y/N) `);
98
- if (answer.toLowerCase() !== "y") {
99
- throw new Error("Execution cancelled by user");
100
- }
101
- }
102
- // Apply maxRows limit
103
- let execSql = sql;
104
- let maxRows = resolved.config.maxRows;
105
- if (opts["limit"]) {
106
- maxRows = parseInt(opts["limit"], 10);
107
- if (isNaN(maxRows) || maxRows <= 0) {
108
- throw new Error(`Invalid --limit value: "${opts["limit"]}". Must be a positive integer.`);
109
- }
110
- }
111
- execSql = applyRowLimit(execSql, maxRows);
112
- // Configure execute_sql tool security before importing
113
- const { configureExecuteSqlTool } = await import("../../ibmi-mcp-server/tools/executeSql.tool.js");
114
- configureExecuteSqlTool({
115
- enabled: true,
116
- security: { readOnly },
117
- });
118
- const { executeSqlTool } = await import("../../ibmi-mcp-server/tools/executeSql.tool.js");
119
- const logicFn = executeSqlTool.logic;
120
- const result = await logicFn({ sql: execSql }, ctx, {});
121
- if (!result.success) {
122
- throw new Error(result.error?.message ?? "SQL execution failed");
123
- }
124
- return {
125
- data: (result.data ?? []),
126
- meta: {
127
- rowCount: result.rowCount ?? 0,
128
- },
129
- };
130
- });
131
- });
132
- }
133
- /**
134
- * Execute SQL against multiple systems in parallel via SourceManager.
135
- * Creates a temporary SourceManager — each system gets its own pool.
136
- */
137
- async function handleMultiSystemSql(sql, opts, cmd, systemFlag) {
138
- const format = getFormat(cmd);
139
- const isStream = cmd.optsWithGlobals()["stream"] === true;
140
- try {
141
- const { resolveSystems } = await import("../config/resolver.js");
142
- const { executeMultiSystem } = await import("../utils/multi-connection.js");
143
- const systems = resolveSystems(systemFlag);
144
- // Enforce read-only: true if CLI flag is set OR any target system requires it
145
- const readOnly = opts["readOnly"] ||
146
- systems.some((s) => s.config.readOnly);
147
- if (readOnly) {
148
- const { SqlSecurityValidator } = await import("../../ibmi-mcp-server/utils/security/sqlSecurityValidator.js");
149
- const ctx = createCliContext("multi_sql_security");
150
- SqlSecurityValidator.validateQuery(sql, { readOnly: true, maxQueryLength: 10000 }, ctx);
151
- }
152
- // Respect the most restrictive system's row limit when none is explicit
153
- let maxRows;
154
- if (opts["limit"]) {
155
- maxRows = parseInt(opts["limit"], 10);
156
- if (isNaN(maxRows) || maxRows <= 0) {
157
- process.stderr.write(`Error: Invalid --limit value: "${opts["limit"]}". Must be a positive integer.\n`);
158
- process.exitCode = ExitCode.USAGE;
159
- return;
160
- }
161
- }
162
- else {
163
- maxRows = Math.min(...systems.map((s) => s.config.maxRows ?? Infinity));
164
- if (!isFinite(maxRows))
165
- maxRows = undefined;
166
- }
167
- const execSql = applyRowLimit(sql, maxRows);
168
- const results = await executeMultiSystem(systems, async (sourceName, mgr, ctx) => {
169
- const result = await mgr.executeQuery(sourceName, execSql, [], ctx);
170
- const data = (result.data ?? []);
171
- return { data, meta: { rowCount: data.length } };
172
- });
173
- if (isStream && format === "json") {
174
- renderMultiSystemNdjson(results);
175
- }
176
- else {
177
- renderMultiSystemOutput(results, format);
178
- }
179
- }
180
- catch (err) {
181
- const { renderError } = await import("../formatters/output.js");
182
- const error = err instanceof Error ? err : new Error(String(err));
183
- renderError(error, format);
184
- process.exitCode = ExitCode.GENERAL;
185
- }
186
- }
187
- //# sourceMappingURL=sql.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../src/cli/commands/sql.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @fileoverview `ibmi system` commands for managing IBM i system configurations.
3
- * Provides list, show, add, remove, default, and test subcommands.
4
- * @module cli/commands/system
5
- */
6
- import { Command } from "commander";
7
- /**
8
- * Register all `ibmi system` subcommands.
9
- */
10
- export declare function registerSystemCommand(program: Command): void;
11
- //# sourceMappingURL=system.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/system.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0DpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoQ5D"}