@ibm/ibmi-mcp-server 0.4.4 → 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 (149) 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/tools/generateSql.tool.d.ts +4 -0
  27. package/dist/ibmi-mcp-server/tools/generateSql.tool.d.ts.map +1 -1
  28. package/dist/ibmi-mcp-server/tools/generateSql.tool.js +1 -1
  29. package/dist/ibmi-mcp-server/tools/generateSql.tool.js.map +1 -1
  30. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.d.ts.map +1 -1
  31. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js +1 -1
  32. package/dist/ibmi-mcp-server/utils/config/toolConfigBuilder.js.map +1 -1
  33. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts +1 -1
  34. package/dist/ibmi-mcp-server/utils/config/toolFactory.d.ts.map +1 -1
  35. package/dist/ibmi-mcp-server/utils/config/toolFactory.js +47 -4
  36. package/dist/ibmi-mcp-server/utils/config/toolFactory.js.map +1 -1
  37. package/dist/public/context.d.ts +5 -0
  38. package/dist/public/context.d.ts.map +1 -0
  39. package/dist/public/context.js +5 -0
  40. package/dist/public/context.js.map +1 -0
  41. package/dist/public/formatting.d.ts +5 -0
  42. package/dist/public/formatting.d.ts.map +1 -0
  43. package/dist/public/formatting.js +5 -0
  44. package/dist/public/formatting.js.map +1 -0
  45. package/dist/public/services.d.ts +8 -0
  46. package/dist/public/services.d.ts.map +1 -0
  47. package/dist/public/services.js +8 -0
  48. package/dist/public/services.js.map +1 -0
  49. package/dist/public/tools.d.ts +16 -0
  50. package/dist/public/tools.d.ts.map +1 -0
  51. package/dist/public/tools.js +15 -0
  52. package/dist/public/tools.js.map +1 -0
  53. package/package.json +23 -17
  54. package/dist/cli/commands/columns.d.ts +0 -7
  55. package/dist/cli/commands/columns.d.ts.map +0 -1
  56. package/dist/cli/commands/columns.js +0 -29
  57. package/dist/cli/commands/columns.js.map +0 -1
  58. package/dist/cli/commands/completion.d.ts +0 -10
  59. package/dist/cli/commands/completion.d.ts.map +0 -1
  60. package/dist/cli/commands/completion.js +0 -246
  61. package/dist/cli/commands/completion.js.map +0 -1
  62. package/dist/cli/commands/config.d.ts +0 -11
  63. package/dist/cli/commands/config.d.ts.map +0 -1
  64. package/dist/cli/commands/config.js +0 -124
  65. package/dist/cli/commands/config.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 -106
  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 -26
  111. package/dist/cli/config/resolver.d.ts.map +0 -1
  112. package/dist/cli/config/resolver.js +0 -102
  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 -60
  123. package/dist/cli/formatters/output.d.ts.map +0 -1
  124. package/dist/cli/formatters/output.js +0 -190
  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 -100
  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/yaml-loader.d.ts +0 -69
  143. package/dist/cli/utils/yaml-loader.d.ts.map +0 -1
  144. package/dist/cli/utils/yaml-loader.js +0 -135
  145. package/dist/cli/utils/yaml-loader.js.map +0 -1
  146. package/dist/cli/utils/yaml-to-commander.d.ts +0 -26
  147. package/dist/cli/utils/yaml-to-commander.d.ts.map +0 -1
  148. package/dist/cli/utils/yaml-to-commander.js +0 -156
  149. package/dist/cli/utils/yaml-to-commander.js.map +0 -1
@@ -1,60 +0,0 @@
1
- /**
2
- * @fileoverview Central output controller for the IBM i CLI.
3
- * Handles TTY detection, format routing, and consistent output rendering.
4
- *
5
- * Supports two JSON output modes:
6
- * - **Envelope** (default): `{ok, system, host, command, data, meta}` — full result in one object
7
- * - **NDJSON** (--stream): One JSON object per row, newline-delimited — for piped workflows
8
- *
9
- * @module cli/formatters/output
10
- */
11
- import type { OutputFormat, ResolvedSystem } from "../config/types.js";
12
- import { type ErrorCodeValue } from "../utils/exit-codes.js";
13
- /**
14
- * Set the output file path. When set, all output is buffered and written
15
- * to the file on `finalizeOutput()`.
16
- */
17
- export declare function setOutputFile(filePath: string | undefined): void;
18
- /**
19
- * Finalize file output — write buffered content to file and print confirmation to stderr.
20
- */
21
- export declare function finalizeOutput(): void;
22
- /** Result metadata for output rendering. */
23
- export interface OutputMeta {
24
- /** Number of rows returned. */
25
- rowCount: number;
26
- /** Whether more rows exist beyond the current result. */
27
- hasMore?: boolean;
28
- /** Time taken for the query in milliseconds. */
29
- elapsedMs?: number;
30
- /** The resolved system used for this command. */
31
- system?: ResolvedSystem;
32
- /** The command name (e.g., "schemas", "sql", "tool:system_status"). */
33
- command?: string;
34
- }
35
- /**
36
- * Detect the appropriate output format.
37
- *
38
- * Priority: --raw → --format → config format → TTY auto-detect (table/json).
39
- */
40
- export declare function detectFormat(explicitFormat?: OutputFormat, raw?: boolean, configFormat?: OutputFormat): OutputFormat;
41
- /**
42
- * Render query results to stdout in the specified format.
43
- */
44
- export declare function renderOutput(data: Record<string, unknown>[], format: OutputFormat, meta?: OutputMeta): void;
45
- /**
46
- * Render results as NDJSON (newline-delimited JSON) for streaming.
47
- * Each row is a separate JSON object on its own line.
48
- * Agents and tools like `jq` can process rows incrementally.
49
- */
50
- export declare function renderNdjson(data: Record<string, unknown>[]): void;
51
- /**
52
- * Render an error to stderr. In JSON mode, outputs structured error JSON to stdout
53
- * with an error code for programmatic consumption.
54
- */
55
- export declare function renderError(error: Error, format: OutputFormat, system?: ResolvedSystem, errorCode?: ErrorCodeValue): void;
56
- /**
57
- * Render a simple message to stdout (e.g., success confirmation).
58
- */
59
- export declare function renderMessage(message: string, format: OutputFormat): void;
60
- //# sourceMappingURL=output.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAMhC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAGhE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAWD,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,cAAc,CAAC,EAAE,YAAY,EAC7B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,YAAY,CAKd;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,UAAU,GAChB,IAAI,CAgBN;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC9B,IAAI,CAIN;AAuFD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,cAAc,EACvB,SAAS,CAAC,EAAE,cAAc,GACzB,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,IAAI,CAMN"}
@@ -1,190 +0,0 @@
1
- /**
2
- * @fileoverview Central output controller for the IBM i CLI.
3
- * Handles TTY detection, format routing, and consistent output rendering.
4
- *
5
- * Supports two JSON output modes:
6
- * - **Envelope** (default): `{ok, system, host, command, data, meta}` — full result in one object
7
- * - **NDJSON** (--stream): One JSON object per row, newline-delimited — for piped workflows
8
- *
9
- * @module cli/formatters/output
10
- */
11
- import { writeFileSync } from "fs";
12
- import { tableFormatter } from "../../utils/formatting/tableFormatter.js";
13
- import { classifyError, } from "../utils/exit-codes.js";
14
- /** Module-level output file path set by --output global option. */
15
- let outputFilePath;
16
- let outputBuffer;
17
- /**
18
- * Set the output file path. When set, all output is buffered and written
19
- * to the file on `finalizeOutput()`.
20
- */
21
- export function setOutputFile(filePath) {
22
- outputFilePath = filePath;
23
- outputBuffer = filePath ? [] : undefined;
24
- }
25
- /**
26
- * Finalize file output — write buffered content to file and print confirmation to stderr.
27
- */
28
- export function finalizeOutput() {
29
- if (outputBuffer && outputFilePath) {
30
- writeFileSync(outputFilePath, outputBuffer.join(""), "utf-8");
31
- process.stderr.write(`Output written to ${outputFilePath}\n`);
32
- outputBuffer = undefined;
33
- outputFilePath = undefined;
34
- }
35
- }
36
- /** Write to the current output destination (file buffer or stdout). */
37
- function writeOutput(data) {
38
- if (outputBuffer) {
39
- outputBuffer.push(data);
40
- }
41
- else {
42
- process.stdout.write(data);
43
- }
44
- }
45
- /**
46
- * Detect the appropriate output format.
47
- *
48
- * Priority: --raw → --format → config format → TTY auto-detect (table/json).
49
- */
50
- export function detectFormat(explicitFormat, raw, configFormat) {
51
- if (raw)
52
- return "json";
53
- if (explicitFormat)
54
- return explicitFormat;
55
- if (configFormat)
56
- return configFormat;
57
- return process.stdout.isTTY ? "table" : "json";
58
- }
59
- /**
60
- * Render query results to stdout in the specified format.
61
- */
62
- export function renderOutput(data, format, meta) {
63
- switch (format) {
64
- case "json":
65
- renderJson(data, meta);
66
- break;
67
- case "csv":
68
- renderCsv(data);
69
- break;
70
- case "markdown":
71
- renderTable(data, "markdown", meta);
72
- break;
73
- case "table":
74
- default:
75
- renderTable(data, "grid", meta);
76
- break;
77
- }
78
- }
79
- /**
80
- * Render results as NDJSON (newline-delimited JSON) for streaming.
81
- * Each row is a separate JSON object on its own line.
82
- * Agents and tools like `jq` can process rows incrementally.
83
- */
84
- export function renderNdjson(data) {
85
- for (const row of data) {
86
- writeOutput(JSON.stringify(row) + "\n");
87
- }
88
- }
89
- /**
90
- * Render as JSON envelope to stdout.
91
- */
92
- function renderJson(data, meta) {
93
- const output = {
94
- ok: true,
95
- ...(meta?.system ? { system: meta.system.name, host: meta.system.config.host } : {}),
96
- ...(meta?.command ? { command: meta.command } : {}),
97
- data,
98
- meta: {
99
- rows: meta?.rowCount ?? data.length,
100
- hasMore: meta?.hasMore ?? false,
101
- ...(meta?.elapsedMs !== undefined ? { elapsed_ms: meta.elapsedMs } : {}),
102
- },
103
- };
104
- writeOutput(JSON.stringify(output, null, 2) + "\n");
105
- }
106
- /**
107
- * Render as CSV to stdout.
108
- */
109
- function renderCsv(data) {
110
- if (data.length === 0)
111
- return;
112
- const headers = Object.keys(data[0]);
113
- // Header row
114
- writeOutput(headers.map(escapeCsvField).join(",") + "\n");
115
- // Data rows
116
- for (const row of data) {
117
- const values = headers.map((h) => {
118
- const val = row[h];
119
- return val === null || val === undefined ? "" : String(val);
120
- });
121
- writeOutput(values.map(escapeCsvField).join(",") + "\n");
122
- }
123
- }
124
- function escapeCsvField(field) {
125
- if (field.includes(",") || field.includes('"') || field.includes("\n")) {
126
- return `"${field.replace(/"/g, '""')}"`;
127
- }
128
- return field;
129
- }
130
- /**
131
- * Render as a formatted table to stdout.
132
- */
133
- function renderTable(data, style, meta) {
134
- if (data.length === 0) {
135
- writeOutput("No results.\n");
136
- return;
137
- }
138
- const table = tableFormatter.format(data, { style, headerStyle: "uppercase" });
139
- writeOutput(table + "\n");
140
- // Footer with metadata
141
- const parts = [];
142
- if (meta?.system) {
143
- parts.push(`[${meta.system.name}] ${meta.system.config.host}`);
144
- }
145
- if (meta?.rowCount !== undefined) {
146
- parts.push(`${meta.rowCount} row${meta.rowCount !== 1 ? "s" : ""}`);
147
- }
148
- if (meta?.hasMore) {
149
- parts.push("(more available — use --limit/--offset)");
150
- }
151
- if (meta?.elapsedMs !== undefined) {
152
- parts.push(`${(meta.elapsedMs / 1000).toFixed(2)}s`);
153
- }
154
- if (parts.length > 0) {
155
- writeOutput(parts.join(" · ") + "\n");
156
- }
157
- }
158
- /**
159
- * Render an error to stderr. In JSON mode, outputs structured error JSON to stdout
160
- * with an error code for programmatic consumption.
161
- */
162
- export function renderError(error, format, system, errorCode) {
163
- if (format === "json") {
164
- const classified = classifyError(error);
165
- const output = {
166
- ok: false,
167
- ...(system ? { system: system.name } : {}),
168
- error: {
169
- code: errorCode ?? classified.errorCode,
170
- message: error.message,
171
- },
172
- };
173
- writeOutput(JSON.stringify(output, null, 2) + "\n");
174
- }
175
- else {
176
- process.stderr.write(`Error: ${error.message}\n`);
177
- }
178
- }
179
- /**
180
- * Render a simple message to stdout (e.g., success confirmation).
181
- */
182
- export function renderMessage(message, format) {
183
- if (format === "json") {
184
- writeOutput(JSON.stringify({ ok: true, message }) + "\n");
185
- }
186
- else {
187
- writeOutput(message + "\n");
188
- }
189
- }
190
- //# sourceMappingURL=output.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/cli/formatters/output.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * @fileoverview Entry point for the IBM i CLI (`ibmi`).
4
- * Provides a human-friendly and agent-friendly command-line interface to IBM i systems,
5
- * reusing the same tool infrastructure as the MCP server.
6
- * @module cli/index
7
- */
8
- import { Command } from "commander";
9
- /**
10
- * Create and configure the CLI program.
11
- */
12
- export declare function createProgram(): Command;
13
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CpC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAoCvC"}
package/dist/cli/index.js DELETED
@@ -1,100 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * @fileoverview Entry point for the IBM i CLI (`ibmi`).
4
- * Provides a human-friendly and agent-friendly command-line interface to IBM i systems,
5
- * reusing the same tool infrastructure as the MCP server.
6
- * @module cli/index
7
- */
8
- import { Command } from "commander";
9
- import { readFileSync } from "fs";
10
- import path from "path";
11
- import { fileURLToPath } from "url";
12
- import { registerConfigCommand } from "./commands/config.js";
13
- import { registerSystemCommand } from "./commands/system.js";
14
- import { registerSchemasCommand } from "./commands/schemas.js";
15
- import { registerTablesCommand } from "./commands/tables.js";
16
- import { registerColumnsCommand } from "./commands/columns.js";
17
- import { registerRelatedCommand } from "./commands/related.js";
18
- import { registerValidateCommand } from "./commands/validate.js";
19
- import { registerSqlCommand } from "./commands/sql.js";
20
- import { registerToolCommand } from "./commands/tool.js";
21
- import { registerToolsCommand, registerToolsetsCommand } from "./commands/tools-list.js";
22
- import { registerCompletionCommand } from "./commands/completion.js";
23
- /**
24
- * Load version from package.json.
25
- */
26
- function getVersion() {
27
- try {
28
- const currentDir = path.dirname(fileURLToPath(import.meta.url));
29
- // Walk up to find package.json (handles both src/ and dist/)
30
- let dir = currentDir;
31
- for (let i = 0; i < 5; i++) {
32
- try {
33
- const pkg = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf-8"));
34
- if (pkg.name === "@ibm/ibmi-mcp-server") {
35
- return pkg.version;
36
- }
37
- }
38
- catch {
39
- // Continue searching
40
- }
41
- dir = path.dirname(dir);
42
- }
43
- }
44
- catch {
45
- // Fallback
46
- }
47
- return "0.0.0";
48
- }
49
- /**
50
- * Create and configure the CLI program.
51
- */
52
- export function createProgram() {
53
- const program = new Command();
54
- program
55
- .name("ibmi")
56
- .description("IBM i command-line interface — query, explore, and manage IBM i systems")
57
- .version(getVersion(), "-v, --version")
58
- .option("--system <name>", "Target system name (overrides IBMI_SYSTEM and config default)")
59
- .option("--format <type>", "Output format: table, json, csv, markdown", undefined)
60
- .option("--raw", "Output as JSON (shorthand for --format json)")
61
- .option("--no-color", "Disable colored output")
62
- .option("--tools <path>", "Path to YAML tool file(s) or directory (comma-separated)")
63
- .option("--stream", "Stream results as NDJSON (one JSON object per line)")
64
- .option("--watch <seconds>", "Re-run command at interval (seconds)")
65
- .option("--output <path>", "Write output to file instead of stdout");
66
- // Register command groups
67
- registerConfigCommand(program);
68
- registerSystemCommand(program);
69
- registerSchemasCommand(program);
70
- registerTablesCommand(program);
71
- registerColumnsCommand(program);
72
- registerRelatedCommand(program);
73
- registerValidateCommand(program);
74
- registerSqlCommand(program);
75
- registerToolCommand(program);
76
- registerToolsCommand(program);
77
- registerToolsetsCommand(program);
78
- registerCompletionCommand(program);
79
- // Add a helpful message for when no command is given
80
- program.action(() => {
81
- program.outputHelp();
82
- });
83
- return program;
84
- }
85
- /**
86
- * Main entry point.
87
- */
88
- async function main() {
89
- const program = createProgram();
90
- try {
91
- await program.parseAsync(process.argv);
92
- }
93
- catch (err) {
94
- // Commander handles most errors, but catch anything unexpected
95
- process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
96
- process.exitCode = 1; // Top-level catch uses code 1 (general)
97
- }
98
- }
99
- main();
100
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- /**
2
- * @fileoverview Shared utilities for CLI command implementations.
3
- * Provides the `withConnection` wrapper that handles the full lifecycle
4
- * of system resolution, connection setup, execution, rendering, and cleanup.
5
- *
6
- * @module cli/utils/command-helpers
7
- */
8
- import { Command } from "commander";
9
- import type { OutputFormat, ResolvedSystem } from "../config/types.js";
10
- import type { RequestContext } from "../../utils/internal/requestContext.js";
11
- import { type OutputMeta } from "../formatters/output.js";
12
- /**
13
- * Get the effective output format from parent command options and config.
14
- *
15
- * Priority: --raw → --format → config format → TTY auto-detect.
16
- */
17
- export declare function getFormat(cmd: Command): OutputFormat;
18
- /**
19
- * Check if --stream mode is enabled.
20
- */
21
- export declare function isStreaming(cmd: Command): boolean;
22
- /**
23
- * Create a minimal RequestContext for CLI tool execution.
24
- * Avoids importing the full server utils (which would trigger OpenTelemetry).
25
- */
26
- export declare function createCliContext(toolName: string): RequestContext;
27
- /** Result shape expected from command actions. */
28
- export interface CommandResult {
29
- data: Record<string, unknown>[];
30
- meta?: Partial<OutputMeta>;
31
- }
32
- /**
33
- * Standard command action wrapper.
34
- *
35
- * Handles the full lifecycle:
36
- * 1. Resolve target system from --system flag / env / config
37
- * 2. Connect (set env vars for IBMiConnectionPool)
38
- * 3. Run the action callback
39
- * 4. Render output in the requested format (or NDJSON if --stream)
40
- * 5. Cleanup (close pool) in finally block
41
- * 6. Set semantic exit code on error
42
- *
43
- * When --watch <seconds> is set, the connect-execute-render cycle repeats
44
- * at the given interval until Ctrl+C is received.
45
- */
46
- export declare function withConnection(cmd: Command, toolName: string, action: (resolved: ResolvedSystem, ctx: RequestContext) => Promise<CommandResult>): Promise<void>;
47
- //# sourceMappingURL=command-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-helpers.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/command-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAK7E,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAapD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAOjE;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CACN,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,aAAa,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAsDf"}
@@ -1,211 +0,0 @@
1
- /**
2
- * @fileoverview Shared utilities for CLI command implementations.
3
- * Provides the `withConnection` wrapper that handles the full lifecycle
4
- * of system resolution, connection setup, execution, rendering, and cleanup.
5
- *
6
- * @module cli/utils/command-helpers
7
- */
8
- import { loadConfig } from "../config/loader.js";
9
- import { resolveSystem } from "../config/resolver.js";
10
- import { connectSystem } from "./connection.js";
11
- import { classifyError } from "./exit-codes.js";
12
- import { detectFormat, renderOutput, renderNdjson, renderError, setOutputFile, finalizeOutput, } from "../formatters/output.js";
13
- /**
14
- * Get the effective output format from parent command options and config.
15
- *
16
- * Priority: --raw → --format → config format → TTY auto-detect.
17
- */
18
- export function getFormat(cmd) {
19
- const opts = cmd.optsWithGlobals();
20
- let configFormat;
21
- try {
22
- configFormat = loadConfig().format;
23
- }
24
- catch {
25
- // Config may not exist — fall through to auto-detect
26
- }
27
- return detectFormat(opts["format"], opts["raw"], configFormat);
28
- }
29
- /**
30
- * Check if --stream mode is enabled.
31
- */
32
- export function isStreaming(cmd) {
33
- const opts = cmd.optsWithGlobals();
34
- return opts["stream"] === true;
35
- }
36
- /**
37
- * Create a minimal RequestContext for CLI tool execution.
38
- * Avoids importing the full server utils (which would trigger OpenTelemetry).
39
- */
40
- export function createCliContext(toolName) {
41
- return {
42
- requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
43
- timestamp: new Date().toISOString(),
44
- operation: "CliToolExecution",
45
- toolName,
46
- };
47
- }
48
- /**
49
- * Standard command action wrapper.
50
- *
51
- * Handles the full lifecycle:
52
- * 1. Resolve target system from --system flag / env / config
53
- * 2. Connect (set env vars for IBMiConnectionPool)
54
- * 3. Run the action callback
55
- * 4. Render output in the requested format (or NDJSON if --stream)
56
- * 5. Cleanup (close pool) in finally block
57
- * 6. Set semantic exit code on error
58
- *
59
- * When --watch <seconds> is set, the connect-execute-render cycle repeats
60
- * at the given interval until Ctrl+C is received.
61
- */
62
- export async function withConnection(cmd, toolName, action) {
63
- const format = getFormat(cmd);
64
- const stream = isStreaming(cmd);
65
- const opts = cmd.optsWithGlobals();
66
- const outputPath = opts["output"];
67
- const watchInterval = opts["watch"] ? parseInt(opts["watch"], 10) : undefined;
68
- if (outputPath) {
69
- setOutputFile(outputPath);
70
- }
71
- if (watchInterval && watchInterval > 0) {
72
- try {
73
- await runWithWatch(cmd, toolName, action, format, stream, watchInterval);
74
- }
75
- finally {
76
- if (outputPath)
77
- finalizeOutput();
78
- }
79
- return;
80
- }
81
- let cleanup;
82
- let resolved;
83
- try {
84
- resolved = resolveSystem(opts["system"]);
85
- cleanup = await connectSystem(resolved);
86
- const ctx = createCliContext(toolName);
87
- const startTime = Date.now();
88
- const result = await action(resolved, ctx);
89
- const elapsedMs = Date.now() - startTime;
90
- // NDJSON streaming: one JSON object per line, no envelope
91
- if (stream && format === "json") {
92
- renderNdjson(result.data);
93
- return;
94
- }
95
- renderOutput(result.data, format, {
96
- rowCount: result.data.length,
97
- elapsedMs,
98
- system: resolved,
99
- command: toolName,
100
- ...result.meta,
101
- });
102
- }
103
- catch (err) {
104
- const error = err instanceof Error ? err : new Error(String(err));
105
- const classified = classifyError(error);
106
- renderError(error, format, resolved, classified.errorCode);
107
- process.exitCode = classified.exitCode;
108
- }
109
- finally {
110
- if (cleanup)
111
- await cleanup();
112
- if (outputPath)
113
- finalizeOutput();
114
- }
115
- }
116
- /**
117
- * Strip sensitive flags (e.g. --password) from argv before displaying.
118
- */
119
- function sanitizeArgsForDisplay(args) {
120
- const sensitiveFlags = ["--password"];
121
- const sanitized = [];
122
- for (let i = 0; i < args.length; i++) {
123
- const arg = args[i];
124
- if (sensitiveFlags.some((f) => arg === f || arg.startsWith(`${f}=`))) {
125
- if (!arg.includes("="))
126
- i++; // skip next arg (the value)
127
- sanitized.push("--password ****");
128
- continue;
129
- }
130
- sanitized.push(arg);
131
- }
132
- return sanitized.join(" ");
133
- }
134
- /**
135
- * Run a command repeatedly at the specified interval.
136
- * Clears the screen between runs in table/markdown/csv mode (not JSON/NDJSON,
137
- * which are intended for piping). Shows a timestamp header on stderr.
138
- * Ctrl+C exits cleanly.
139
- */
140
- async function runWithWatch(cmd, toolName, action, format, stream, intervalSeconds) {
141
- let running = true;
142
- // Primary SIGINT handler to stop the loop
143
- const handler = () => {
144
- running = false;
145
- };
146
- process.on("SIGINT", handler);
147
- try {
148
- while (running) {
149
- // Clear screen for human-readable formats; leave JSON/NDJSON clean for piping
150
- if (format !== "json") {
151
- process.stdout.write("\x1b[2J\x1b[H");
152
- }
153
- // Show timestamp header so the user knows when the last refresh happened
154
- const now = new Date().toLocaleString();
155
- const args = sanitizeArgsForDisplay(process.argv.slice(2));
156
- process.stderr.write(`Every ${intervalSeconds}s: ibmi ${args} ${now}\n\n`);
157
- // Run one connect-execute-render cycle
158
- let cleanup;
159
- try {
160
- const opts = cmd.optsWithGlobals();
161
- const resolved = resolveSystem(opts["system"]);
162
- cleanup = await connectSystem(resolved);
163
- const ctx = createCliContext(toolName);
164
- const startTime = Date.now();
165
- const result = await action(resolved, ctx);
166
- const elapsedMs = Date.now() - startTime;
167
- if (stream && format === "json") {
168
- renderNdjson(result.data);
169
- }
170
- else {
171
- renderOutput(result.data, format, {
172
- rowCount: result.data.length,
173
- elapsedMs,
174
- system: resolved,
175
- command: toolName,
176
- ...result.meta,
177
- });
178
- }
179
- }
180
- catch (err) {
181
- const error = err instanceof Error ? err : new Error(String(err));
182
- const classified = classifyError(error);
183
- renderError(error, format, undefined, classified.errorCode);
184
- }
185
- finally {
186
- if (cleanup)
187
- await cleanup();
188
- }
189
- // Wait for the interval, but allow SIGINT to break out immediately
190
- if (running) {
191
- await new Promise((resolve) => {
192
- const timer = setTimeout(resolve, intervalSeconds * 1000);
193
- const sigHandler = () => {
194
- clearTimeout(timer);
195
- running = false;
196
- resolve();
197
- };
198
- process.once("SIGINT", sigHandler);
199
- // Remove the per-iteration handler once the timer fires naturally
200
- setTimeout(() => {
201
- process.removeListener("SIGINT", sigHandler);
202
- }, intervalSeconds * 1000 + 10);
203
- });
204
- }
205
- }
206
- }
207
- finally {
208
- process.removeListener("SIGINT", handler);
209
- }
210
- }
211
- //# sourceMappingURL=command-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../../src/cli/utils/command-helpers.ts"],"names":[],"mappings":"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"}