From 980937a20f747bae84f097d33fd0d0d2f64090b1 Mon Sep 17 00:00:00 2001 From: souvikghosh04 Date: Tue, 7 Apr 2026 21:39:46 +0530 Subject: [PATCH 1/2] fix: align CLI HelpText defaults and descriptions with JSON schema Fixes 14 issues where CLI option help text showed incorrect default values or descriptions that didn't match the JSON schema: ConfigureOptions.cs: - DML tool defaults: true -> false (7 tools: #3347-#3353) - multiple-mutations.create.enabled default: true -> false (#3354) - host.mode default: Development -> production (#3355) - set-session-context: removed misleading '(default)' text (#3356) - depth-limit default: infinity -> null (no limit) (#3357) - database-type: use lowercase values, add cosmosdb_postgresql (#3358) InitOptions.cs: - rest.request-body-strict default: false -> true (#3360) - database-type: remove dwsql (not in schema) (#3358) AddTelemetryOptions.cs: - Remove duplicate '(Default: X)' from HelpText where Default= attribute already displays the value (#3356) - Fix otel-service-name description from 'Headers' to 'Service name' dab.draft.schema.json: - aggregate-records object form .enabled default: true -> false to match top-level default (#3347) --- schemas/dab.draft.schema.json | 2 +- src/Cli/Commands/AddTelemetryOptions.cs | 8 ++++---- src/Cli/Commands/ConfigureOptions.cs | 24 ++++++++++++------------ src/Cli/Commands/InitOptions.cs | 4 ++-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/schemas/dab.draft.schema.json b/schemas/dab.draft.schema.json index cbb8013f3d..8106f174a8 100644 --- a/schemas/dab.draft.schema.json +++ b/schemas/dab.draft.schema.json @@ -341,7 +341,7 @@ "enabled": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the aggregate-records tool.", - "default": true + "default": false }, "query-timeout": { "type": "integer", diff --git a/src/Cli/Commands/AddTelemetryOptions.cs b/src/Cli/Commands/AddTelemetryOptions.cs index 8ec9313d14..9eedbb9125 100644 --- a/src/Cli/Commands/AddTelemetryOptions.cs +++ b/src/Cli/Commands/AddTelemetryOptions.cs @@ -44,7 +44,7 @@ public AddTelemetryOptions( public string? AppInsightsConnString { get; } // To specify whether Application Insights telemetry should be enabled. This flag is optional and default value is false. - [Option("app-insights-enabled", Default = CliBool.False, Required = false, HelpText = "(Default: false) Enable/Disable Application Insights")] + [Option("app-insights-enabled", Default = CliBool.False, Required = false, HelpText = "Enable/Disable Application Insights.")] public CliBool? AppInsightsEnabled { get; } // Connection string for the Open Telemetry resource to which telemetry data should be sent. @@ -53,7 +53,7 @@ public AddTelemetryOptions( public string? OpenTelemetryEndpoint { get; } // To specify whether Open Telemetry telemetry should be enabled. This flag is optional and default value is false. - [Option("otel-enabled", Default = CliBool.False, Required = false, HelpText = "(Default: false) Enable/Disable OTEL")] + [Option("otel-enabled", Default = CliBool.False, Required = false, HelpText = "Enable/Disable OTEL.")] public CliBool? OpenTelemetryEnabled { get; } // Headers for the Open Telemetry resource to which telemetry data should be sent. @@ -61,11 +61,11 @@ public AddTelemetryOptions( public string? OpenTelemetryHeaders { get; } // Specify the Open Telemetry protocol. This flag is optional and default value is grpc. - [Option("otel-protocol", Default = OtlpExportProtocol.Grpc, Required = false, HelpText = "(Default: grpc) Accepted: grpc/httpprotobuf")] + [Option("otel-protocol", Default = OtlpExportProtocol.Grpc, Required = false, HelpText = "Accepted: grpc/httpprotobuf.")] public OtlpExportProtocol? OpenTelemetryExportProtocol { get; } // Service Name for the Open Telemetry resource to which telemetry data should be sent. This flag is optional and default value is dab. - [Option("otel-service-name", Default = "dab", Required = false, HelpText = "(Default: dab) Headers for Open Telemetry for telemetry data")] + [Option("otel-service-name", Default = "dab", Required = false, HelpText = "Service name for Open Telemetry.")] public string? OpenTelemetryServiceName { get; } public int Handler(ILogger logger, FileSystemRuntimeConfigLoader loader, IFileSystem fileSystem) diff --git a/src/Cli/Commands/ConfigureOptions.cs b/src/Cli/Commands/ConfigureOptions.cs index be076d7983..f58a08fec8 100644 --- a/src/Cli/Commands/ConfigureOptions.cs +++ b/src/Cli/Commands/ConfigureOptions.cs @@ -149,7 +149,7 @@ public ConfigureOptions( ShowEffectivePermissions = showEffectivePermissions; } - [Option("data-source.database-type", Required = false, HelpText = "Database type. Allowed values: MSSQL, PostgreSQL, CosmosDB_NoSQL, MySQL.")] + [Option("data-source.database-type", Required = false, HelpText = "Database type. Allowed values: mssql, postgresql, cosmosdb_nosql, cosmosdb_postgresql, mysql.")] public string? DataSourceDatabaseType { get; } [Option("data-source.connection-string", Required = false, HelpText = "Connection string for the data source.")] @@ -164,7 +164,7 @@ public ConfigureOptions( [Option("data-source.options.schema", Required = false, HelpText = "Schema path for Cosmos DB for NoSql.")] public string? DataSourceOptionsSchema { get; } - [Option("data-source.options.set-session-context", Required = false, HelpText = "Enable session context. Allowed values: true (default), false.")] + [Option("data-source.options.set-session-context", Required = false, HelpText = "Enable session context. Allowed values: true, false.")] public bool? DataSourceOptionsSetSessionContext { get; } [Option("data-source.health.name", Required = false, HelpText = "Identifier for data source in health check report.")] @@ -176,7 +176,7 @@ public ConfigureOptions( [Option("data-source.user-delegated-auth.database-audience", Required = false, HelpText = "Database resource identifier for token acquisition (e.g., https://database.windows.net for Azure SQL).")] public string? DataSourceUserDelegatedAuthDatabaseAudience { get; } - [Option("runtime.graphql.depth-limit", Required = false, HelpText = "Max allowed depth of the nested query. Allowed values: (0,2147483647] inclusive. Default is infinity. Use -1 to remove limit.")] + [Option("runtime.graphql.depth-limit", Required = false, HelpText = "Max allowed depth of a nested query. Allowed values: (0,2147483647] inclusive. Default: null (no limit). Use -1 to remove limit.")] public int? DepthLimit { get; } [Option("runtime.graphql.enabled", Required = false, HelpText = "Enable DAB's GraphQL endpoint. Default: true (boolean).")] @@ -188,7 +188,7 @@ public ConfigureOptions( [Option("runtime.graphql.allow-introspection", Required = false, HelpText = "Allow/Deny GraphQL introspection requests in GraphQL Schema. Default: true (boolean).")] public bool? RuntimeGraphQLAllowIntrospection { get; } - [Option("runtime.graphql.multiple-mutations.create.enabled", Required = false, HelpText = "Enable/Disable multiple-mutation create operations on DAB's generated GraphQL schema. Default: true (boolean).")] + [Option("runtime.graphql.multiple-mutations.create.enabled", Required = false, HelpText = "Enable/Disable multiple-mutation create operations on DAB's generated GraphQL schema. Default: false (boolean).")] public bool? RuntimeGraphQLMultipleMutationsCreateEnabled { get; } [Option("runtime.rest.enabled", Required = false, HelpText = "Enable DAB's Rest endpoint. Default: true (boolean).")] @@ -212,25 +212,25 @@ public ConfigureOptions( [Option("runtime.mcp.dml-tools.enabled", Required = false, HelpText = "Enable DAB's MCP DML tools endpoint. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsEnabled { get; } - [Option("runtime.mcp.dml-tools.describe-entities.enabled", Required = false, HelpText = "Enable DAB's MCP describe entities tool. Default: true (boolean).")] + [Option("runtime.mcp.dml-tools.describe-entities.enabled", Required = false, HelpText = "Enable DAB's MCP describe entities tool. Default: false (boolean).")] public bool? RuntimeMcpDmlToolsDescribeEntitiesEnabled { get; } - [Option("runtime.mcp.dml-tools.create-record.enabled", Required = false, HelpText = "Enable DAB's MCP create record tool. Default: true (boolean).")] + [Option("runtime.mcp.dml-tools.create-record.enabled", Required = false, HelpText = "Enable DAB's MCP create record tool. Default: false (boolean).")] public bool? RuntimeMcpDmlToolsCreateRecordEnabled { get; } - [Option("runtime.mcp.dml-tools.read-records.enabled", Required = false, HelpText = "Enable DAB's MCP read record tool. Default: true (boolean).")] + [Option("runtime.mcp.dml-tools.read-records.enabled", Required = false, HelpText = "Enable DAB's MCP read record tool. Default: false (boolean).")] public bool? RuntimeMcpDmlToolsReadRecordsEnabled { get; } - [Option("runtime.mcp.dml-tools.update-record.enabled", Required = false, HelpText = "Enable DAB's MCP update record tool. Default: true (boolean).")] + [Option("runtime.mcp.dml-tools.update-record.enabled", Required = false, HelpText = "Enable DAB's MCP update record tool. Default: false (boolean).")] public bool? RuntimeMcpDmlToolsUpdateRecordEnabled { get; } - [Option("runtime.mcp.dml-tools.delete-record.enabled", Required = false, HelpText = "Enable DAB's MCP delete record tool. Default: true (boolean).")] + [Option("runtime.mcp.dml-tools.delete-record.enabled", Required = false, HelpText = "Enable DAB's MCP delete record tool. Default: false (boolean).")] public bool? RuntimeMcpDmlToolsDeleteRecordEnabled { get; } - [Option("runtime.mcp.dml-tools.execute-entity.enabled", Required = false, HelpText = "Enable DAB's MCP execute entity tool. Default: true (boolean).")] + [Option("runtime.mcp.dml-tools.execute-entity.enabled", Required = false, HelpText = "Enable DAB's MCP execute entity tool. Default: false (boolean).")] public bool? RuntimeMcpDmlToolsExecuteEntityEnabled { get; } - [Option("runtime.mcp.dml-tools.aggregate-records.enabled", Required = false, HelpText = "Enable DAB's MCP aggregate records tool. Default: true (boolean).")] + [Option("runtime.mcp.dml-tools.aggregate-records.enabled", Required = false, HelpText = "Enable DAB's MCP aggregate records tool. Default: false (boolean).")] public bool? RuntimeMcpDmlToolsAggregateRecordsEnabled { get; } [Option("runtime.mcp.dml-tools.aggregate-records.query-timeout", Required = false, HelpText = "Set the execution timeout in seconds for the aggregate-records MCP tool. Default: 30 (integer). Range: 1-600.")] @@ -245,7 +245,7 @@ public ConfigureOptions( [Option("runtime.compression.level", Required = false, HelpText = "Set the response compression level. Allowed values: optimal (default), fastest, none.")] public CompressionLevel? RuntimeCompressionLevel { get; } - [Option("runtime.host.mode", Required = false, HelpText = "Set the host running mode of DAB in Development or Production. Default: Development.")] + [Option("runtime.host.mode", Required = false, HelpText = "Set the host running mode of DAB in Development or Production. Default: production.")] public HostMode? RuntimeHostMode { get; } [Option("runtime.host.cors.origins", Required = false, HelpText = "Overwrite Allowed Origins in CORS. Default: [] (Space separated array of strings).")] diff --git a/src/Cli/Commands/InitOptions.cs b/src/Cli/Commands/InitOptions.cs index 9064bf1f4d..78a58984b1 100644 --- a/src/Cli/Commands/InitOptions.cs +++ b/src/Cli/Commands/InitOptions.cs @@ -72,7 +72,7 @@ public InitOptions( McpAggregateRecordsQueryTimeout = mcpAggregateRecordsQueryTimeout; } - [Option("database-type", Required = true, HelpText = "Type of database to connect. Supported values: mssql, cosmosdb_nosql, cosmosdb_postgresql, mysql, postgresql, dwsql")] + [Option("database-type", Required = true, HelpText = "Type of database to connect. Supported values: mssql, cosmosdb_nosql, cosmosdb_postgresql, mysql, postgresql")] public DatabaseType DatabaseType { get; } [Option("connection-string", Required = false, HelpText = "(Default: '') Connection details to connect to the database.")] @@ -136,7 +136,7 @@ public InitOptions( public CliBool McpEnabled { get; } // When true, DAB rejects extraneous/unmapped fields in the REST request body (strict mode). When false, extraneous fields are allowed and ignored. - [Option("rest.request-body-strict", Required = false, HelpText = "(Default: false) When true, rejects extraneous/unmapped fields in the REST request body. When false, allows and ignores them.")] + [Option("rest.request-body-strict", Required = false, HelpText = "(Default: true) When true, rejects extraneous/unmapped fields in the REST request body. When false, allows and ignores them.")] public CliBool RestRequestBodyStrict { get; } [Option("graphql.multiple-create.enabled", Required = false, HelpText = "(Default: false) Enables multiple create operation for GraphQL. Supported values: true, false.")] From 1f4dd75d7e6c9354407a3dc53fbf15ec0ba415ce Mon Sep 17 00:00:00 2001 From: souvikghosh04 Date: Wed, 8 Apr 2026 17:15:16 +0530 Subject: [PATCH 2/2] fix consistency in CLI and schema --- schemas/dab.draft.schema.json | 16 ++++++++-------- src/Cli/Commands/ConfigureOptions.cs | 14 +++++++------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/schemas/dab.draft.schema.json b/schemas/dab.draft.schema.json index 8106f174a8..980af8de08 100644 --- a/schemas/dab.draft.schema.json +++ b/schemas/dab.draft.schema.json @@ -299,32 +299,32 @@ "describe-entities": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the describe-entities tool.", - "default": false + "default": true }, "create-record": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the create-record tool.", - "default": false + "default": true }, "read-records": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the read-records tool.", - "default": false + "default": true }, "update-record": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the update-record tool.", - "default": false + "default": true }, "delete-record": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the delete-record tool.", - "default": false + "default": true }, "execute-entity": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the execute-entity tool.", - "default": false + "default": true }, "aggregate-records": { "description": "Enable/disable or configure the aggregate-records MCP tool.", @@ -341,7 +341,7 @@ "enabled": { "$ref": "#/$defs/boolean-or-string", "description": "Enable/disable the aggregate-records tool.", - "default": false + "default": true }, "query-timeout": { "type": "integer", @@ -353,7 +353,7 @@ } } ], - "default": false + "default": true } } } diff --git a/src/Cli/Commands/ConfigureOptions.cs b/src/Cli/Commands/ConfigureOptions.cs index f58a08fec8..cfea9ead03 100644 --- a/src/Cli/Commands/ConfigureOptions.cs +++ b/src/Cli/Commands/ConfigureOptions.cs @@ -212,25 +212,25 @@ public ConfigureOptions( [Option("runtime.mcp.dml-tools.enabled", Required = false, HelpText = "Enable DAB's MCP DML tools endpoint. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsEnabled { get; } - [Option("runtime.mcp.dml-tools.describe-entities.enabled", Required = false, HelpText = "Enable DAB's MCP describe entities tool. Default: false (boolean).")] + [Option("runtime.mcp.dml-tools.describe-entities.enabled", Required = false, HelpText = "Enable DAB's MCP describe entities tool. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsDescribeEntitiesEnabled { get; } - [Option("runtime.mcp.dml-tools.create-record.enabled", Required = false, HelpText = "Enable DAB's MCP create record tool. Default: false (boolean).")] + [Option("runtime.mcp.dml-tools.create-record.enabled", Required = false, HelpText = "Enable DAB's MCP create record tool. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsCreateRecordEnabled { get; } - [Option("runtime.mcp.dml-tools.read-records.enabled", Required = false, HelpText = "Enable DAB's MCP read record tool. Default: false (boolean).")] + [Option("runtime.mcp.dml-tools.read-records.enabled", Required = false, HelpText = "Enable DAB's MCP read record tool. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsReadRecordsEnabled { get; } - [Option("runtime.mcp.dml-tools.update-record.enabled", Required = false, HelpText = "Enable DAB's MCP update record tool. Default: false (boolean).")] + [Option("runtime.mcp.dml-tools.update-record.enabled", Required = false, HelpText = "Enable DAB's MCP update record tool. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsUpdateRecordEnabled { get; } - [Option("runtime.mcp.dml-tools.delete-record.enabled", Required = false, HelpText = "Enable DAB's MCP delete record tool. Default: false (boolean).")] + [Option("runtime.mcp.dml-tools.delete-record.enabled", Required = false, HelpText = "Enable DAB's MCP delete record tool. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsDeleteRecordEnabled { get; } - [Option("runtime.mcp.dml-tools.execute-entity.enabled", Required = false, HelpText = "Enable DAB's MCP execute entity tool. Default: false (boolean).")] + [Option("runtime.mcp.dml-tools.execute-entity.enabled", Required = false, HelpText = "Enable DAB's MCP execute entity tool. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsExecuteEntityEnabled { get; } - [Option("runtime.mcp.dml-tools.aggregate-records.enabled", Required = false, HelpText = "Enable DAB's MCP aggregate records tool. Default: false (boolean).")] + [Option("runtime.mcp.dml-tools.aggregate-records.enabled", Required = false, HelpText = "Enable DAB's MCP aggregate records tool. Default: true (boolean).")] public bool? RuntimeMcpDmlToolsAggregateRecordsEnabled { get; } [Option("runtime.mcp.dml-tools.aggregate-records.query-timeout", Required = false, HelpText = "Set the execution timeout in seconds for the aggregate-records MCP tool. Default: 30 (integer). Range: 1-600.")]