@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
package/README.md
CHANGED
|
@@ -315,24 +315,31 @@ npx -y @ibm/ibmi-mcp-server@latest [options]
|
|
|
315
315
|
| `--toolsets <list>` | Comma-separated list of toolsets to load |
|
|
316
316
|
| `--list-toolsets` | List all available toolsets and exit |
|
|
317
317
|
| `--transport <type>` | Transport type: `stdio` (default) or `http` |
|
|
318
|
+
| `--builtin-tools` | Enable built-in schema discovery tools (`list_schemas`, `list_tables_in_schema`, `get_table_columns`, `get_related_objects`, `validate_query`) |
|
|
319
|
+
| `--execute-sql` | Enable the `execute_sql` tool for ad-hoc queries |
|
|
318
320
|
| `--help` | Show help message |
|
|
319
321
|
|
|
320
322
|
<details>
|
|
321
323
|
<summary><strong>Common Examples</strong></summary>
|
|
322
324
|
|
|
323
|
-
**
|
|
325
|
+
**Full text-to-SQL workflow (schema discovery + query execution):**
|
|
324
326
|
```bash
|
|
325
|
-
npx -y @ibm/ibmi-mcp-server@latest --
|
|
327
|
+
npx -y @ibm/ibmi-mcp-server@latest --builtin-tools --execute-sql --transport http
|
|
326
328
|
```
|
|
327
329
|
|
|
328
|
-
**
|
|
330
|
+
**Schema discovery only (agents explore but can't run arbitrary SQL):**
|
|
331
|
+
```bash
|
|
332
|
+
npx -y @ibm/ibmi-mcp-server@latest --builtin-tools --tools ./tools
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Run server with YAML tools only:**
|
|
329
336
|
```bash
|
|
330
337
|
npx -y @ibm/ibmi-mcp-server@latest --transport http --tools ./tools
|
|
331
338
|
```
|
|
332
339
|
|
|
333
340
|
**Load specific toolsets only:**
|
|
334
341
|
```bash
|
|
335
|
-
npx -y @ibm/ibmi-mcp-server@latest --toolsets performance,security
|
|
342
|
+
npx -y @ibm/ibmi-mcp-server@latest --toolsets performance,security --tools ./tools
|
|
336
343
|
```
|
|
337
344
|
|
|
338
345
|
**List available toolsets:**
|
|
@@ -340,11 +347,6 @@ npx -y @ibm/ibmi-mcp-server@latest --toolsets performance,security
|
|
|
340
347
|
npx -y @ibm/ibmi-mcp-server@latest --list-toolsets --tools ./tools
|
|
341
348
|
```
|
|
342
349
|
|
|
343
|
-
**Use custom tools directory:**
|
|
344
|
-
```bash
|
|
345
|
-
npx -y @ibm/ibmi-mcp-server@latest --tools /absolute/path/to/custom-tools
|
|
346
|
-
```
|
|
347
|
-
|
|
348
350
|
</details>
|
|
349
351
|
|
|
350
352
|
---
|
|
@@ -1605,12 +1607,19 @@ Settings for controlling built-in MCP tools compiled into the server. These are
|
|
|
1605
1607
|
|
|
1606
1608
|
## Built-in Tools Overview
|
|
1607
1609
|
|
|
1608
|
-
The IBM i MCP Server includes
|
|
1610
|
+
The IBM i MCP Server includes built-in tools for schema discovery, query validation, and SQL execution. All built-in tools are **disabled by default** (except `describe_sql_object`) and must be explicitly enabled via CLI flags or environment variables.
|
|
1611
|
+
|
|
1612
|
+
| Tool | Status | Purpose | CLI Flag | Env Variable |
|
|
1613
|
+
|------|--------|---------|----------|-------------|
|
|
1614
|
+
| `describe_sql_object` | ✅ Always enabled | Generate DDL for database objects | — | — |
|
|
1615
|
+
| `list_schemas` | Disabled by default | List available schemas/libraries | `--builtin-tools` | `IBMI_ENABLE_DEFAULT_TOOLS` |
|
|
1616
|
+
| `list_tables_in_schema` | Disabled by default | List tables, views, physical files in a schema | `--builtin-tools` | `IBMI_ENABLE_DEFAULT_TOOLS` |
|
|
1617
|
+
| `get_table_columns` | Disabled by default | Get column metadata for a table | `--builtin-tools` | `IBMI_ENABLE_DEFAULT_TOOLS` |
|
|
1618
|
+
| `get_related_objects` | Disabled by default | Find dependent objects for impact analysis | `--builtin-tools` | `IBMI_ENABLE_DEFAULT_TOOLS` |
|
|
1619
|
+
| `validate_query` | Disabled by default | Validate SQL syntax and verify referenced objects | `--builtin-tools` | `IBMI_ENABLE_DEFAULT_TOOLS` |
|
|
1620
|
+
| `execute_sql` | ⚠️ Disabled by default | Execute ad-hoc SQL queries (readonly by default) | `--execute-sql` | `IBMI_ENABLE_EXECUTE_SQL` |
|
|
1609
1621
|
|
|
1610
|
-
|
|
1611
|
-
|------|--------|---------|---------------|
|
|
1612
|
-
| `describe_sql_object` | ✅ Always enabled | Generate DDL for database objects | None (always available) |
|
|
1613
|
-
| `execute_sql` | ⚠️ Disabled by default | Execute ad-hoc SQL queries (readonly by default) | `IBMI_ENABLE_EXECUTE_SQL`<br/>`IBMI_EXECUTE_SQL_READONLY` |
|
|
1622
|
+
> **Tip:** Use `--builtin-tools --execute-sql` together for the full text-to-SQL workflow. Use `--builtin-tools` alone to let agents discover schema while routing queries through curated YAML tools.
|
|
1614
1623
|
|
|
1615
1624
|
---
|
|
1616
1625
|
|
|
@@ -1661,6 +1670,8 @@ CREATE TABLE SALES.CUSTOMER (
|
|
|
1661
1670
|
|
|
1662
1671
|
The `execute_sql` tool allows MCP clients to run ad-hoc SQL queries against your IBM i Db2 database. This tool is **disabled by default** for security reasons.
|
|
1663
1672
|
|
|
1673
|
+
Enable via CLI flag `--execute-sql` or environment variables:
|
|
1674
|
+
|
|
1664
1675
|
| Variable | Description | Type | Default | Required |
|
|
1665
1676
|
|----------|-------------|------|---------|----------|
|
|
1666
1677
|
| `IBMI_ENABLE_EXECUTE_SQL` | Enable the built-in `execute_sql` tool | boolean | `false` | No |
|
|
@@ -1688,23 +1699,23 @@ The execute_sql tool includes multiple layers of protection:
|
|
|
1688
1699
|
**Examples:**
|
|
1689
1700
|
|
|
1690
1701
|
```bash
|
|
1691
|
-
#
|
|
1702
|
+
# Via CLI flags (recommended for development)
|
|
1703
|
+
npx -y @ibm/ibmi-mcp-server@latest --execute-sql --transport http
|
|
1704
|
+
npx -y @ibm/ibmi-mcp-server@latest --builtin-tools --execute-sql --transport http
|
|
1705
|
+
|
|
1706
|
+
# Via environment variables
|
|
1692
1707
|
IBMI_ENABLE_EXECUTE_SQL=true
|
|
1693
1708
|
IBMI_EXECUTE_SQL_READONLY=true # Default - only SELECT queries allowed
|
|
1694
1709
|
DB2i_HOST=ibmi-dev.local
|
|
1695
1710
|
DB2i_USER=DEVUSER
|
|
1696
1711
|
DB2i_PASS=devpass
|
|
1697
1712
|
|
|
1698
|
-
#
|
|
1713
|
+
# Enable write operations (INSERT/UPDATE/DELETE)
|
|
1699
1714
|
IBMI_ENABLE_EXECUTE_SQL=true
|
|
1700
1715
|
IBMI_EXECUTE_SQL_READONLY=false # Allow write operations
|
|
1701
|
-
DB2i_HOST=ibmi-dev.local
|
|
1702
|
-
DB2i_USER=DEVUSER
|
|
1703
|
-
DB2i_PASS=devpass
|
|
1704
1716
|
|
|
1705
1717
|
# Production: Use YAML tools instead (more controlled)
|
|
1706
|
-
|
|
1707
|
-
TOOLS_YAML_PATH=/opt/mcp-tools/production.yaml
|
|
1718
|
+
npx -y @ibm/ibmi-mcp-server@latest --tools /opt/mcp-tools/production.yaml
|
|
1708
1719
|
```
|
|
1709
1720
|
|
|
1710
1721
|
> **⚠️ Security Recommendation:** Keep `IBMI_EXECUTE_SQL_READONLY=true` (default) unless you explicitly need write operations. For production use cases requiring write access, consider using YAML-defined tools with parameterized queries instead of ad-hoc SQL.
|
|
@@ -1721,12 +1732,13 @@ TOOLS_YAML_PATH=/opt/mcp-tools/production.yaml
|
|
|
1721
1732
|
| **Security** | PARSE_STATEMENT + AST/Regex validation | Explicit whitelist of queries |
|
|
1722
1733
|
| **Use Case** | Development & exploration | Production & controlled access |
|
|
1723
1734
|
| **Configuration** | Environment variables | `TOOLS_YAML_PATH` |
|
|
1724
|
-
| **Examples** | `execute_sql`, `describe_sql_object` | Custom performance monitoring, security checks |
|
|
1735
|
+
| **Examples** | `list_schemas`, `get_table_columns`, `execute_sql`, `describe_sql_object` | Custom performance monitoring, security checks |
|
|
1725
1736
|
|
|
1726
1737
|
**Recommendation:**
|
|
1727
|
-
- Use
|
|
1728
|
-
- Use
|
|
1738
|
+
- Use **`--builtin-tools`** for schema discovery — safe, read-only catalog queries that help AI understand your database
|
|
1739
|
+
- Use **`--execute-sql`** in development for quick ad-hoc query exploration
|
|
1729
1740
|
- Use **YAML tools** in production for controlled, curated query access
|
|
1741
|
+
- Combine **`--builtin-tools` + YAML tools** to let agents discover schema while executing only curated queries
|
|
1730
1742
|
|
|
1731
1743
|
YAML tools allow you to:
|
|
1732
1744
|
- Curate specific queries with documentation
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `ibmi columns <schema> <table>` command — get column metadata.
|
|
3
|
+
* @module cli/commands/columns
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
export declare function registerColumnsCommand(program: Command): void;
|
|
7
|
+
//# sourceMappingURL=columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/columns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+B7D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `ibmi columns <schema> <table>` command — get column metadata.
|
|
3
|
+
* @module cli/commands/columns
|
|
4
|
+
*/
|
|
5
|
+
import { withConnection } from "../utils/command-helpers.js";
|
|
6
|
+
export function registerColumnsCommand(program) {
|
|
7
|
+
program
|
|
8
|
+
.command("columns <schema> <table>")
|
|
9
|
+
.description("Get column metadata for a table")
|
|
10
|
+
.action(async (schema, table, _opts, cmd) => {
|
|
11
|
+
await withConnection(cmd, "get_table_columns", async (_resolved, ctx) => {
|
|
12
|
+
const { getTableColumnsLogic } = await import("../../ibmi-mcp-server/tools/getTableColumns.tool.js");
|
|
13
|
+
const result = await getTableColumnsLogic({
|
|
14
|
+
schema_name: schema,
|
|
15
|
+
table_name: table,
|
|
16
|
+
}, ctx, {});
|
|
17
|
+
if (!result.success) {
|
|
18
|
+
throw new Error(result.error?.message ?? "Failed to get table columns");
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
data: (result.data ?? []),
|
|
22
|
+
meta: {
|
|
23
|
+
rowCount: result.rowCount ?? 0,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/cli/commands/columns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,0BAA0B,CAAC;SACnC,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,KAAa,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;QACnE,MAAM,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;YACtE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAC3C,qDAAqD,CACtD,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,WAAW,EAAE,MAAM;gBACnB,UAAU,EAAE,KAAK;aAClB,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,6BAA6B,CAAC,CAAC;YAC1E,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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `ibmi completion bash|zsh|fish` — generate shell completion scripts.
|
|
3
|
+
* @module cli/commands/completion
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
/**
|
|
7
|
+
* Register `ibmi completion bash|zsh|fish`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerCompletionCommand(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkNpC;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBhE"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `ibmi completion bash|zsh|fish` — generate shell completion scripts.
|
|
3
|
+
* @module cli/commands/completion
|
|
4
|
+
*/
|
|
5
|
+
import { ExitCode } from "../utils/exit-codes.js";
|
|
6
|
+
/** Top-level commands. */
|
|
7
|
+
const COMMANDS = [
|
|
8
|
+
"system",
|
|
9
|
+
"schemas",
|
|
10
|
+
"tables",
|
|
11
|
+
"columns",
|
|
12
|
+
"related",
|
|
13
|
+
"validate",
|
|
14
|
+
"sql",
|
|
15
|
+
"tool",
|
|
16
|
+
"tools",
|
|
17
|
+
"toolsets",
|
|
18
|
+
"completion",
|
|
19
|
+
];
|
|
20
|
+
/** System subcommands. */
|
|
21
|
+
const SYSTEM_SUBCOMMANDS = [
|
|
22
|
+
"list",
|
|
23
|
+
"show",
|
|
24
|
+
"add",
|
|
25
|
+
"remove",
|
|
26
|
+
"default",
|
|
27
|
+
"test",
|
|
28
|
+
"config-path",
|
|
29
|
+
];
|
|
30
|
+
/** Global options. */
|
|
31
|
+
const GLOBAL_OPTIONS = [
|
|
32
|
+
"--system",
|
|
33
|
+
"--format",
|
|
34
|
+
"--raw",
|
|
35
|
+
"--stream",
|
|
36
|
+
"--tools",
|
|
37
|
+
"--output",
|
|
38
|
+
"--watch",
|
|
39
|
+
"--no-color",
|
|
40
|
+
"--version",
|
|
41
|
+
"--help",
|
|
42
|
+
];
|
|
43
|
+
/** Format choices. */
|
|
44
|
+
const FORMAT_CHOICES = ["table", "json", "csv", "markdown"];
|
|
45
|
+
/**
|
|
46
|
+
* Generate a bash completion script.
|
|
47
|
+
*/
|
|
48
|
+
function generateBash() {
|
|
49
|
+
return `# bash completion for ibmi
|
|
50
|
+
# Add to ~/.bashrc: eval "$(ibmi completion bash)"
|
|
51
|
+
|
|
52
|
+
_ibmi_completions() {
|
|
53
|
+
local cur prev commands system_commands global_opts format_choices
|
|
54
|
+
COMPREPLY=()
|
|
55
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
56
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
57
|
+
|
|
58
|
+
commands="${COMMANDS.join(" ")}"
|
|
59
|
+
system_commands="${SYSTEM_SUBCOMMANDS.join(" ")}"
|
|
60
|
+
global_opts="${GLOBAL_OPTIONS.join(" ")}"
|
|
61
|
+
format_choices="${FORMAT_CHOICES.join(" ")}"
|
|
62
|
+
|
|
63
|
+
# Complete --format values
|
|
64
|
+
if [[ "\${prev}" == "--format" ]]; then
|
|
65
|
+
COMPREPLY=( $(compgen -W "\${format_choices}" -- "\${cur}") )
|
|
66
|
+
return 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Complete --system from config
|
|
70
|
+
if [[ "\${prev}" == "--system" ]]; then
|
|
71
|
+
local systems
|
|
72
|
+
if command -v yq &>/dev/null && [[ -f ~/.ibmi/config.yaml ]]; then
|
|
73
|
+
systems=$(yq -r '.systems | keys | .[]' ~/.ibmi/config.yaml 2>/dev/null)
|
|
74
|
+
elif command -v python3 &>/dev/null && [[ -f ~/.ibmi/config.yaml ]]; then
|
|
75
|
+
systems=$(python3 -c "import yaml; c=yaml.safe_load(open('$HOME/.ibmi/config.yaml')); print(' '.join(c.get('systems',{}).keys()))" 2>/dev/null)
|
|
76
|
+
fi
|
|
77
|
+
COMPREPLY=( $(compgen -W "\${systems}" -- "\${cur}") )
|
|
78
|
+
return 0
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Complete file paths for --file, --tools, --output
|
|
82
|
+
if [[ "\${prev}" == "--file" || "\${prev}" == "--tools" || "\${prev}" == "--output" ]]; then
|
|
83
|
+
COMPREPLY=( $(compgen -f -- "\${cur}") )
|
|
84
|
+
return 0
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Complete system subcommands
|
|
88
|
+
if [[ "\${COMP_WORDS[1]}" == "system" && \${COMP_CWORD} -eq 2 ]]; then
|
|
89
|
+
COMPREPLY=( $(compgen -W "\${system_commands}" -- "\${cur}") )
|
|
90
|
+
return 0
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
# Complete top-level commands
|
|
94
|
+
if [[ \${COMP_CWORD} -eq 1 ]]; then
|
|
95
|
+
COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )
|
|
96
|
+
return 0
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# Complete global options
|
|
100
|
+
if [[ "\${cur}" == -* ]]; then
|
|
101
|
+
COMPREPLY=( $(compgen -W "\${global_opts}" -- "\${cur}") )
|
|
102
|
+
return 0
|
|
103
|
+
fi
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
complete -F _ibmi_completions ibmi
|
|
107
|
+
`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Generate a zsh completion script.
|
|
111
|
+
*/
|
|
112
|
+
function generateZsh() {
|
|
113
|
+
return `#compdef ibmi
|
|
114
|
+
# zsh completion for ibmi
|
|
115
|
+
# Add to ~/.zshrc: eval "$(ibmi completion zsh)"
|
|
116
|
+
|
|
117
|
+
_ibmi() {
|
|
118
|
+
local -a commands system_commands format_choices global_opts
|
|
119
|
+
|
|
120
|
+
commands=(
|
|
121
|
+
${COMMANDS.map((c) => ` '${c}:${c} command'`).join("\n")}
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
system_commands=(
|
|
125
|
+
${SYSTEM_SUBCOMMANDS.map((c) => ` '${c}:${c}'`).join("\n")}
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
format_choices=(table json csv markdown)
|
|
129
|
+
|
|
130
|
+
global_opts=(
|
|
131
|
+
'--system[Target system name]:system name:'
|
|
132
|
+
'--format[Output format]:format:(table json csv markdown)'
|
|
133
|
+
'--raw[Output as JSON]'
|
|
134
|
+
'--stream[Stream results as NDJSON]'
|
|
135
|
+
'--tools[Path to YAML tool files]:file:_files'
|
|
136
|
+
'--output[Write output to file]:file:_files'
|
|
137
|
+
'--watch[Re-run at interval]:seconds:'
|
|
138
|
+
'--no-color[Disable colored output]'
|
|
139
|
+
'--help[Show help]'
|
|
140
|
+
'--version[Show version]'
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
_arguments -C \\
|
|
144
|
+
$global_opts \\
|
|
145
|
+
'1:command:->command' \\
|
|
146
|
+
'*::arg:->args'
|
|
147
|
+
|
|
148
|
+
case $state in
|
|
149
|
+
command)
|
|
150
|
+
_describe -t commands 'ibmi commands' commands
|
|
151
|
+
;;
|
|
152
|
+
args)
|
|
153
|
+
case $words[1] in
|
|
154
|
+
system)
|
|
155
|
+
_describe -t system_commands 'system subcommands' system_commands
|
|
156
|
+
;;
|
|
157
|
+
esac
|
|
158
|
+
;;
|
|
159
|
+
esac
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
_ibmi "$@"
|
|
163
|
+
`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Generate a fish completion script.
|
|
167
|
+
*/
|
|
168
|
+
function generateFish() {
|
|
169
|
+
const lines = [
|
|
170
|
+
"# fish completion for ibmi",
|
|
171
|
+
"# Add to fish config: ibmi completion fish | source",
|
|
172
|
+
"",
|
|
173
|
+
"# Disable file completions by default",
|
|
174
|
+
"complete -c ibmi -f",
|
|
175
|
+
"",
|
|
176
|
+
"# Top-level commands",
|
|
177
|
+
];
|
|
178
|
+
for (const cmd of COMMANDS) {
|
|
179
|
+
lines.push(`complete -c ibmi -n '__fish_use_subcommand' -a '${cmd}' -d '${cmd} command'`);
|
|
180
|
+
}
|
|
181
|
+
lines.push("", "# System subcommands");
|
|
182
|
+
for (const sub of SYSTEM_SUBCOMMANDS) {
|
|
183
|
+
lines.push(`complete -c ibmi -n '__fish_seen_subcommand_from system' -a '${sub}' -d '${sub}'`);
|
|
184
|
+
}
|
|
185
|
+
lines.push("", "# Global options");
|
|
186
|
+
lines.push("complete -c ibmi -l system -d 'Target system name' -x", "complete -c ibmi -l format -d 'Output format' -x -a 'table json csv markdown'", "complete -c ibmi -l raw -d 'Output as JSON'", "complete -c ibmi -l stream -d 'Stream results as NDJSON'", "complete -c ibmi -l tools -d 'Path to YAML tool files' -r -F", "complete -c ibmi -l output -d 'Write output to file' -r -F", "complete -c ibmi -l watch -d 'Re-run at interval (seconds)' -x", "complete -c ibmi -l no-color -d 'Disable colored output'");
|
|
187
|
+
return lines.join("\n") + "\n";
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Register `ibmi completion bash|zsh|fish`.
|
|
191
|
+
*/
|
|
192
|
+
export function registerCompletionCommand(program) {
|
|
193
|
+
program
|
|
194
|
+
.command("completion [shell]")
|
|
195
|
+
.description("Generate shell completion script (bash, zsh, fish)")
|
|
196
|
+
.action((shell) => {
|
|
197
|
+
const target = shell?.toLowerCase() ?? detectShell();
|
|
198
|
+
switch (target) {
|
|
199
|
+
case "bash":
|
|
200
|
+
process.stdout.write(generateBash());
|
|
201
|
+
break;
|
|
202
|
+
case "zsh":
|
|
203
|
+
process.stdout.write(generateZsh());
|
|
204
|
+
break;
|
|
205
|
+
case "fish":
|
|
206
|
+
process.stdout.write(generateFish());
|
|
207
|
+
break;
|
|
208
|
+
default:
|
|
209
|
+
process.stderr.write(`Unknown shell: ${target}. Supported: bash, zsh, fish\n`);
|
|
210
|
+
process.exitCode = ExitCode.USAGE;
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Auto-detect the current shell from the SHELL environment variable.
|
|
216
|
+
*/
|
|
217
|
+
function detectShell() {
|
|
218
|
+
const shell = process.env.SHELL ?? "";
|
|
219
|
+
if (shell.includes("zsh"))
|
|
220
|
+
return "zsh";
|
|
221
|
+
if (shell.includes("fish"))
|
|
222
|
+
return "fish";
|
|
223
|
+
return "bash";
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `ibmi sql "<sql>"` command — execute SQL queries.
|
|
3
|
+
* Supports inline SQL, --file, and stdin piping.
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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;AAoBpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgHzD"}
|