Skip to content

Releases: epam/ai-dial-quickapps-backend

0.9.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 10:26

Features

  • [Preview] Lazy on-demand attachment strategy for the orchestrator — admin context files and user uploads are exposed as metadata via internal_attachments_available_context / internal_attachments_get_content, and bytes reach the model only when it requests a specific file; opt in per-app with orchestrator.attachment_strategy.type = "lazy_on_demand" #228 (#309)
  • [Preview] Folder contexts — admins attach a DIAL folder once and its files and subfolders expand automatically into internal_attachments_available_context (with new / updated / removed membership tracking), instead of one FileContextConfig per file; recursion bounded by max_depth #65 (#362)
  • [Preview] Offload large tool responses to DIAL files — responses exceeding a byte threshold are uploaded to file storage and replaced in history with a notice the model reads back on demand, protecting the context window; a DIAL Files sub-feature configured via features.dial_files.tool_call_result_offload with TOOL_CALL_RESULT_OFFLOAD__* env defaults #64 (#234)
  • [Preview] Hook result reuse via a refresh_condition TTL — a (ASSISTANT/tool_calls, TOOL) hook can reuse its last result from conversation history until ttl_minutes elapses, then re-fetch, sparing repeated tool calls for slowly-changing data #363 (#364)
  • [Preview] Validate tools referenced in hooks config and surface an error on the stage when a referenced tool does not exist #333 (#349)
  • External http(s) URLs as first-class file references — deployment-tool attachments, REST/MCP file:base64:: / file:text::, and Python-interpreter input now accept external URLs, gated by a two-tier egress policy (admin EXTERNAL_URL_FETCH_* env caps, per-app features.external_url_fetch narrows) #258 (#279)
  • Find and search across the DIAL files workspace — search now scans folder subtrees (output_mode, name_filter, max_depth, configurable max_files_scanned) and a new find tool locates files by name/path glob via metadata only; part of the now-GA DIAL files toolkit (see #377) #342 (#352)
  • Render file-tool stage content verbatim — reuse the format field on FormattedParameterConfig to wrap values in auto-sized fenced code blocks (so markdown content shows literal text, not a rendered document) and add an order field so long params like content render after short ones like path #353 (#365)
  • Support the tool_choice parameter on chat completion requests, mirroring DIAL Core's tool_choice (string or named-tool-choice object) #182 (#367)
  • Deployment-wide stage display override via the new DEFAULT_STAGE_DISPLAY_LEVEL env variable — error / info / debug (case-insensitive); when set, wins over every app's features.stage_display.level #334 (#340)
  • Graduate the DIAL files tools to GA — list / read_lines / search / find / write / edit / delete / copy / move and the features.dial_files config field are no longer gated by ENABLE_PREVIEW_FEATURES; the tool_call_result_offload sub-feature stays behind the preview flag (#377)

Fixes

  • Friendlier DIAL file-tool error handling — normalize service-layer 404s to "file/folder not found" instead of leaking raw exceptions, list the agent home root as (empty folder) when nothing is written yet, show relative display paths instead of internal files/{bucket}/… URLs, and make write_file overwrite=true create-or-replace in a single upload #345 (#354)
  • Resolve recursive $defs references in MCP tool input schemas — preserve the local jsonref fallback when FastMCP's dereference_refs() leaves circular refs unresolved, so tool initialization no longer fails with Unresolved $ref '#/$defs/...'; also pins FastMCP to PyPI 3.4.2 (#379)
  • Prevent nested code fences from breaking skill and file-tool stage rendering — wrap arbitrary tool/response content with a fence one backtick longer than the longest run inside it (shared fenced_code_block helper), so embedded ``` no longer closes the wrapper early in skill, MCP, REST, and init-error stages (#371)
  • Patch HIGH-severity CVEs in transitive deps blocking the Docker build (Trivy gate) — cryptography → 49.0.0 (GHSA-537c-gmf6-5ccf), pyjwt → 2.13.0 (CVE-2026-48526), python-multipart → 0.0.32 (CVE-2026-53539), starlette → 1.3.1 (CVE-2026-54283); poetry.lock-only (#370)

Other

  • Bump starlette from 1.0.0 to 1.0.1 — picks up a fix to ignore a malformed Host header when constructing request.url (#355)
  • Bump pydantic-settings from 2.13.1 to 2.14.2 — security patch release that prevents NestedSecretsSettingsSource from following symlinks outside secrets_dir (#381)

Deployment Changes

New environment variables

Variable Default Description
DEFAULT_STAGE_DISPLAY_LEVEL unset Deployment-wide override for the stage visibility threshold (error, info, debug; case-insensitive). When set, wins over every app's features.stage_display.level. Unset defers to the per-app config (which defaults to info).
EXTERNAL_URL_FETCH_ENABLED false Admin cap on fetching external (non-DIAL) URLs. When false, no app may fetch external URLs regardless of its manifest; the deployment-handoff branch (deployments with features.url_attachments) is unaffected. Apps can opt out per-app via features.external_url_fetch.enabled.
EXTERNAL_URL_FETCH_HOST_ALLOWLIST Comma-separated allowlist of host patterns for external URL fetches. Unset means no admin-level host restriction. Patterns: exact host (example.com) or *.example.com. Re-checked on every redirect hop. Per-app features.external_url_fetch.host_allowlist narrows (intersection).
EXTERNAL_URL_FETCH_MAX_REDIRECTS 5 Maximum HTTP redirects on external URL fetches (0 ≤ x ≤ 10). Each hop is SSRF-checked.
EXTERNAL_URL_FETCH_CONNECT_TIMEOUT_SECONDS 5.0 TCP connect timeout (seconds, > 0) for external URL fetches. Read/write/pool timeouts use the resolved tool timeout.
TOOL_CALL_RESULT_OFFLOAD__ENABLED_BY_DEFAULT true Default value of the per-app enabled flag (features.dial_files.tool_call_result_offload.enabled); apps set enabled: false to disable offload.
TOOL_CALL_RESULT_OFFLOAD__SIZE_THRESHOLD 40000 Default byte threshold above which a tool-call response is offloaded to a DIAL file. Apps override per-app via features.dial_files.tool_call_result_offload.size_threshold.
TOOL_CALL_RESULT_OFFLOAD__EXCLUDED_TOOLS [] Default JSON list of additional tool names exempt from offloading. The read-back tools (internal_file_read_lines, internal_file_search) are always excluded so a read-back slice is never re-offloaded. Apps add more per-app.

Behavioral changes

Note

The DIAL files tools have graduated to GA and are now active regardless of ENABLE_PREVIEW_FEATURES:

  • DIAL files toolslist / read_lines / search / find / write / edit / delete / copy / move and the features.dial_files config field (#377)

The tool_call_result_offload sub-feature (features.dial_files.tool_call_result_offload, with its TOOL_CALL_RESULT_OFFLOAD__* env defaults) remains preview-gated.

0.9.0-rc.2

0.9.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Jun 16:01

Fixes

  • [Preview] Resolve external http(s) attachment URLs in orchestrator-loaded attachments; external URLs are now fetched and promoted to durable DIAL files on both the synthetic-injector and explicit internal_attachments_get_content paths #387 (#388)

0.9.0-rc.1

0.9.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Jun 07:26

Features

  • Graduate the DIAL files tools to GA — list / read_lines / search / find / write / edit / delete / copy / move and the features.dial_files config field are no longer gated by ENABLE_PREVIEW_FEATURES; the tool_call_result_offload sub-feature stays behind the preview flag (#377)
  • [Preview] Folder contexts — admins attach a DIAL folder once and its files and subfolders expand automatically into internal_attachments_available_context (with new / updated / removed membership tracking), instead of one FileContextConfig per file; recursion bounded by max_depth #65 (#362)
  • Support the tool_choice parameter on chat completion requests, mirroring DIAL Core's tool_choice (string or named-tool-choice object) #182 (#367)
  • [Preview] Hook result reuse via a refresh_condition TTL — a (ASSISTANT/tool_calls, TOOL) hook can reuse its last result from conversation history until ttl_minutes elapses, then re-fetch, sparing repeated tool calls for slowly-changing data #363 (#364)

Fixes

  • Resolve recursive $defs references in MCP tool input schemas — preserve the local jsonref fallback when FastMCP's dereference_refs() leaves circular refs unresolved, so tool initialization no longer fails with Unresolved $ref '#/$defs/...'; also pins FastMCP to PyPI 3.4.2 (#379)
  • Patch HIGH-severity CVEs in transitive deps blocking the Docker build (Trivy gate) — cryptography → 49.0.0 (GHSA-537c-gmf6-5ccf), pyjwt → 2.13.0 (CVE-2026-48526), python-multipart → 0.0.32 (CVE-2026-53539), starlette → 1.3.1 (CVE-2026-54283); poetry.lock-only (#370)
  • Prevent nested code fences from breaking skill and file-tool stage rendering — wrap arbitrary tool/response content with a fence one backtick longer than the longest run inside it (shared fenced_code_block helper), so embedded ``` no longer closes the wrapper early in skill, MCP, REST, and init-error stages (#371)

Other

  • Bump pydantic-settings from 2.13.1 to 2.14.2 — security patch release that prevents NestedSecretsSettingsSource from following symlinks outside secrets_dir (#381)

Deployment Changes

Behavioral changes

Note

The DIAL files tools have graduated to GA and are now active regardless of ENABLE_PREVIEW_FEATURES:

  • DIAL files toolslist / read_lines / search / find / write / edit / delete / copy / move and the features.dial_files config field (#377)

The tool_call_result_offload sub-feature (features.dial_files.tool_call_result_offload, with its TOOL_CALL_RESULT_OFFLOAD__* env defaults) remains preview-gated.

0.8.1

Choose a tag to compare

@github-actions github-actions released this 23 Jun 14:27

Fixes

  • Resolve circular $ref left unresolved by FastMCP's dereference_refs() — falls back to jsonref.replace_refs() so recursive MCP tool input schemas (e.g. a conditions array referencing #/$defs/condition) no longer fail tool initialization (backport #379)

Other

0.7.1

Choose a tag to compare

@github-actions github-actions released this 23 Jun 10:23

Fixes

  • Resolve circular $ref left unresolved by FastMCP's dereference_refs() — falls back to jsonref.replace_refs() so recursive MCP tool input schemas (e.g. a conditions array referencing #/$defs/condition) no longer fail tool initialization (backport #379)

Other

0.9.0-rc.0

0.9.0-rc.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Jun 10:11

Features

  • [Preview] Lazy on-demand attachment strategy for the orchestrator — admin context files and user uploads are exposed as metadata via internal_attachments_available_context / internal_attachments_get_content, and bytes reach the model only when it requests a specific file; opt in per-app with orchestrator.attachment_strategy.type = "lazy_on_demand" #228 (#309)
  • External http(s) URLs as first-class file references — deployment-tool attachments, REST/MCP file:base64:: / file:text::, and Python-interpreter input now accept external URLs, gated by a two-tier egress policy (admin EXTERNAL_URL_FETCH_* env caps, per-app features.external_url_fetch narrows) #258 (#279)
  • [Preview] Offload large tool responses to DIAL files — responses exceeding a byte threshold are uploaded to file storage and replaced in history with a notice the model reads back on demand, protecting the context window; a DIAL Files sub-feature configured via features.dial_files.tool_call_result_offload with TOOL_CALL_RESULT_OFFLOAD__* env defaults #64 (#234)
  • [Preview] Workspace-wide file discovery in the DIAL files toolkit — search now scans folder subtrees (output_mode, name_filter, max_depth, configurable max_files_scanned) and a new find tool locates files by name/path glob via metadata only #342 (#352)
  • Deployment-wide stage display override via the new DEFAULT_STAGE_DISPLAY_LEVEL env variable — error / info / debug (case-insensitive); when set, wins over every app's features.stage_display.level #334 (#340)
  • [Preview] Validate tools referenced in hooks config and surface an error on the stage when a referenced tool does not exist #333 (#349)
  • [Preview] Render file-tool stage content verbatim — reuse the format field on FormattedParameterConfig to wrap values in auto-sized fenced code blocks (so markdown content shows literal text, not a rendered document) and add an order field so long params like content render after short ones like path #353 (#365)

Fixes

  • [Preview] Friendlier DIAL file-tool error handling — normalize service-layer 404s to "file/folder not found" instead of leaking raw exceptions, list the agent home root as (empty folder) when nothing is written yet, show relative display paths instead of internal files/{bucket}/… URLs, and make write_file overwrite=true create-or-replace in a single upload #345 (#354)

Other

  • Bump starlette from 1.0.0 to 1.0.1 — picks up a fix to ignore a malformed Host header when constructing request.url (#355)

Deployment Changes

New environment variables

Variable Default Description
DEFAULT_STAGE_DISPLAY_LEVEL unset Deployment-wide override for the stage visibility threshold (error, info, debug; case-insensitive). When set, wins over every app's features.stage_display.level. Unset defers to the per-app config (which defaults to info).
EXTERNAL_URL_FETCH_ENABLED false Admin cap on fetching external (non-DIAL) URLs. When false, no app may fetch external URLs regardless of its manifest; the deployment-handoff branch (deployments with features.url_attachments) is unaffected. Apps can opt out per-app via features.external_url_fetch.enabled.
EXTERNAL_URL_FETCH_HOST_ALLOWLIST Comma-separated allowlist of host patterns for external URL fetches. Unset means no admin-level host restriction. Patterns: exact host (example.com) or *.example.com. Re-checked on every redirect hop. Per-app features.external_url_fetch.host_allowlist narrows (intersection).
EXTERNAL_URL_FETCH_MAX_REDIRECTS 5 Maximum HTTP redirects on external URL fetches (0 ≤ x ≤ 10). Each hop is SSRF-checked.
EXTERNAL_URL_FETCH_CONNECT_TIMEOUT_SECONDS 5.0 TCP connect timeout (seconds, > 0) for external URL fetches. Read/write/pool timeouts use the resolved tool timeout.
TOOL_CALL_RESULT_OFFLOAD__ENABLED_BY_DEFAULT true Default value of the per-app enabled flag (features.dial_files.tool_call_result_offload.enabled); apps set enabled: false to disable offload.
TOOL_CALL_RESULT_OFFLOAD__SIZE_THRESHOLD 40000 Default byte threshold above which a tool-call response is offloaded to a DIAL file. Apps override per-app via features.dial_files.tool_call_result_offload.size_threshold.
TOOL_CALL_RESULT_OFFLOAD__EXCLUDED_TOOLS [] Default JSON list of additional tool names exempt from offloading. The read-back tools (internal_file_read_lines, internal_file_search) are always excluded so a read-back slice is never re-offloaded. Apps add more per-app.

0.8.0

Choose a tag to compare

@github-actions github-actions released this 02 Jun 14:58

Features

  • New dial-app toolset — given a DIAL deployment id, routes transparently to either MCP (when the deployment advertises features.mcp == true) or chat completion (otherwise); a transport: "auto" | "mcp" | "chat-completion" field (default "auto") lets admins pin the choice #215 (#243)
  • [Preview] New DIAL files toolset — exposes list_files, read_file_lines, search_in_file, write_file, edit_file, delete_file, copy_file, move_file against an agent_home_dir (default files/{appdata}/); per-app opt-in via features.dial_files with optional enabled_tools allowlist #256 (#257)
  • Per-app overrides for predefined tool and toolset templates via a new optional override field carrying a JSON Merge Patch (RFC 7396) — ChatHub variants can swap a deployment, tweak a tool description, or disable a single tool per-app without forking templates globally or duplicating inline JSON #14 #273 (#269)
  • Layered predefined default application configuration for the QuickApps builder — operators ship a default_configuration.json at each predefined content layer (built-in + PREDEFINED_EXTRA_PATHS), shallow-merged in layer order, exposed to the UI via the new GET /v1/configuration-support/default-configuration endpoint with tool_sets resolved server-side #120 (#323)
  • Generic synthetic tool-call injector (v2) — replaces the bespoke read-files plumbing with a reusable mechanism for injecting synthetic tool calls into message history #235 (#255)
  • [Preview] Config-driven synthetic tool-call injection (hooks) — declare (ASSISTANT/tool_calls, TOOL) injections in the app manifest's new hooks array without writing Python; on_request_start event with always / append_if_changed frequency (#275)
  • Default orchestrator deployment via the new DEFAULT_ORCHESTRATOR_DEPLOYMENT_ID env variable — applied at runtime when an app manifest omits orchestrator.deployment, and surfaced as the JSON-schema default so DIAL Core can pre-fill new manifests #315 (#316)
  • Per-app features.stage_display.levelerror / info (default) / debug thresholds for which tool-execution stages surface in the DIAL UI; debug reveals synthetic/system stages for manifest authors; deprecates display.stage.show = false (still honored at info with a warning) #293 (#307)
  • Pass orchestrator deployment's native configuration tools alongside QuickApps tools — enables Gemini 3+ native function-calling features (e.g. Google Search, code execution) when the orchestrator deployment declares them #104 (#301)
  • Type-scoped DIAL Core routes for /v1/configuration-support/* — co-located with the QuickApps application type via dial:applicationTypeRoutes instead of a detached global route, and dial:attachmentPaths lets DIAL Core enforce ACL on prompt URLs in skills/validate request bodies #318 (#319)
  • Trust custom corporate root CAs via the new USE_SYSTEM_CA_CERTS opt-in — merges *.crt files mounted under /certificates/ with the Alpine system bundle at container startup and exports SSL_CERT_FILE so outbound httpx calls succeed behind TLS-intercepting proxies #335 (#336)
  • Lenient skill frontmatter parsing aligned with the Agent Skills spec — tolerates BOM, CRLF, leading whitespace, trailing fences, and unquoted-colon descriptions; cosmetic violations become warnings instead of skipping the skill; affects both predefined and DIAL-prompt-sourced skills #313 (#314)
  • Configurable agent file-download size limit — replaces the hardcoded 10 MiB cap in DialFileService with DEFAULT_FILE_LOADING_SIZE_LIMIT (deployment-wide) and features.file_loading.size_limit (per-app override) (#274)
  • Graduate Time Awareness feature to GA — features.timestamp is no longer gated by ENABLE_PREVIEW_FEATURES #288 (#290)
  • Graduate DIAL Prompt Skills feature to GA — the skills config field and DialPromptSkillsModule are no longer gated by ENABLE_PREVIEW_FEATURES #289 (#291)

Fixes

  • Apply the configured fallback strategy when an MCP tool result carries IsError: true — previously the error path skipped the fallback and surfaced the raw failure to the model #328 (#329)
  • Propagate DIAL field-level markers (dial:resource, dial:file, format) to deprecated legacy-alias properties — manifests stored under a legacy key were validating but DIAL Core's schema-driven auto-share couldn't key off the missing markers, surfacing as 403 Forbidden on referenced resources #311 (#312)
  • Render Agent skill stage content as a fenced code block and drop the redundant parameters chunk — embedded #/## headings in skill bodies no longer render as oversized bold text when the stage is expanded #320 (#322)
  • Enrich synthetic tool results with metadata — synthetic tool messages now flow through the same ToolCallResultEnricher pipeline as real tool results, so message state (e.g. timestamp) is attached consistently #296 (#297)
  • Restore OTEL trace_id / span_id / resource.service.name / trace_sampled in QuickApps logs via a new OtelAwareFormatter that matches adapter-openai's wire format when correlation is on and renders nothing otherwise #284 (#285)
  • Preserve millisecond precision in TimestampMetadata.response_timestamp — Pydantic's default datetime.isoformat() was dropping fractional digits on whole-second boundaries, leaving downstream consumers (UI, analytics, persistence) with inconsistent sub-second precision #278 (#281)
  • Align integration test modules after recent refactors (#276)

Other

  • Normalize DIAL deployment-id field naming — DialDeploymentConfig.namedeployment_id and DialMCPToolSet.dial_iddeployment_id; legacy keys keep validating via validation_alias, and the published JSON schema retains deprecated siblings under an anyOf so existing manifests stay valid #286 (#287)
  • Refresh integration coverage for the current model lineup — add Claude 4.6 tests, update Claude 4.5 model name, add ChatHub configs for the new models (#277); remove GPT-4.1 tool cache files and Claude 3.7/4 references (#283) (#294)
  • Enhance issue templates and add a 🛠️ Tech debt template (#292)
  • Drop venv-activation hints from CLAUDE.mdmake targets already run via poetry run (#272)
  • Bump authlib from 1.6.11 to 1.6.12 — picks up a fix for redirecting to an unvalidated redirect_uri on InvalidScopeError in OIDC implicit/hybrid grants (#299)
  • Bump idna from 3.11 to 3.15 — picks up CVE-2026-45409 mitigation hardening from 3.14 (#321)
  • Bump python-multipart from 0.0.26 to 0.0.27 (#280)
  • Bump urllib3 from 2.6.3 to 2.7.0 (#295)

Deployment Changes

New environment variables

Variable Default Description
DEFAULT_ORCHESTRATOR_DEPLOYMENT_ID Default DIAL deployment id used as the orchestrator model when a QuickApp manifest omits orchestrator.deployment. Also surfaces as the JSON-schema default for that field so DIAL Core can pre-fill new manifests. Apps can override per-app.
DEFAULT_FILE_LOADING_SIZE_LIMIT 10485760 Deployment-wide cap (bytes, > 0; default 10 MiB) on files the agent downloads. Overridden per-app by features.file_loading.size_limit in the manifest.
USE_SYSTEM_CA_CERTS unset When set to 1, merges every *.crt file under /certificates/ with the Alpine system CA bundle at container startup and exports SSL_CERT_FILE to the merged path so outbound HTTP calls trust private/corporate root CAs. Opt-in; unset keeps existing behaviour.

Behavioral changes

Note

Two preview-gated features have graduated to GA and are now active regardless of ENABLE_PREVIEW_FEATURES:

  • Time Awarenessfeatures.timestamp (#290)
  • DIAL Prompt Skills — the skills config field and DialPromptSkillsModule (#291)

DIAL Configuration changes

Important

Operators must update DIAL Core's configuration when upgrading to this release. The /v1/configuration-support/* endpoints are no longer served via a global DIAL Core routes entry — they are declared on the QuickApps application type itself.

Required migration (#319):

  1. Remove any quick_apps2-style entry from DIAL Core's global routes block (it will be ignored from now on).
  2. Add the new dial:applicationTypeRoutes block to the QuickApps entry under applicationTypeSchemas — apply the schema snippet from PR #319 verbatim.

Schema deprecations

Caution

Still accepted in app manifests, but will be removed in future versions (#287).

Legacy key Replacement Affected config model
name (deployment field) deployment_id DialDeploymentConfig
dial_id deployment_id DialMCPToolSet

0.8.0-rc.2

0.8.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 May 15:31

Features

  • Trust custom corporate root CAs via the new USE_SYSTEM_CA_CERTS opt-in — merges *.crt files mounted under /certificates/ with the Alpine system bundle at container startup and exports SSL_CERT_FILE so outbound httpx calls succeed behind TLS-intercepting proxies #335 (#336)
  • Layered predefined default application configuration for the QuickApps builder — operators ship a default_configuration.json at each predefined content layer (built-in + PREDEFINED_EXTRA_PATHS), shallow-merged in layer order, exposed to the UI via the new GET /v1/configuration-support/default-configuration endpoint with tool_sets resolved server-side #120 (#323)

Deployment Changes

New environment variables

Variable Default Description
USE_SYSTEM_CA_CERTS unset When set to 1, merges every *.crt file under /certificates/ with the Alpine system CA bundle at container startup and exports SSL_CERT_FILE to the merged path so outbound HTTP calls trust private/corporate root CAs. Opt-in; unset keeps existing behaviour.

0.8.0-rc.1

0.8.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 May 18:06

Features

  • [Preview] New DIAL files toolset — exposes list_files, read_file_lines, search_in_file, write_file, edit_file, delete_file, copy_file, move_file against an agent_home_dir (default files/{appdata}/); per-app opt-in via features.dial_files with optional enabled_tools allowlist #256 (#257)
  • [Preview] Config-driven synthetic tool-call injection (hooks) — declare (ASSISTANT/tool_calls, TOOL) injections in the app manifest's new hooks array without writing Python; on_request_start event with always / append_if_changed frequency (#275)
  • Default orchestrator deployment via the new DEFAULT_ORCHESTRATOR_DEPLOYMENT_ID env variable — applied at runtime when an app manifest omits orchestrator.deployment, and surfaced as the JSON-schema default so DIAL Core can pre-fill new manifests #315 (#316)
  • Per-app features.stage_display.levelerror / info (default) / debug thresholds for which tool-execution stages surface in the DIAL UI; debug reveals synthetic/system stages for manifest authors; deprecates display.stage.show = false (still honored at info with a warning) #293 (#307)
  • Pass orchestrator deployment's native configuration tools alongside QuickApps tools — enables Gemini 3+ native function-calling features (e.g. Google Search, code execution) when the orchestrator deployment declares them #104 (#301)
  • Type-scoped DIAL Core routes for /v1/configuration-support/* — co-located with the QuickApps application type via dial:applicationTypeRoutes instead of a detached global route, and dial:attachmentPaths lets DIAL Core enforce ACL on prompt URLs in skills/validate request bodies #318 (#319)
  • Lenient skill frontmatter parsing aligned with the Agent Skills spec — tolerates BOM, CRLF, leading whitespace, trailing fences, and unquoted-colon descriptions; cosmetic violations become warnings instead of skipping the skill; affects both predefined and DIAL-prompt-sourced skills #313 (#314)

Fixes

  • Apply the configured fallback strategy when an MCP tool result carries IsError: true — previously the error path skipped the fallback and surfaced the raw failure to the model #328 (#329)
  • Propagate DIAL field-level markers (dial:resource, dial:file, format) to deprecated legacy-alias properties — manifests stored under a legacy key were validating but DIAL Core's schema-driven auto-share couldn't key off the missing markers, surfacing as 403 Forbidden on referenced resources #311 (#312)
  • Render Agent skill stage content as a fenced code block and drop the redundant parameters chunk — embedded #/## headings in skill bodies no longer render as oversized bold text when the stage is expanded #320 (#322)

Other

  • Bump authlib from 1.6.11 to 1.6.12 — picks up a fix for redirecting to an unvalidated redirect_uri on InvalidScopeError in OIDC implicit/hybrid grants (#299)
  • Bump idna from 3.11 to 3.15 — picks up CVE-2026-45409 mitigation hardening from 3.14 (#321)

Deployment Changes

New environment variables

Variable Default Description
DEFAULT_ORCHESTRATOR_DEPLOYMENT_ID Default DIAL deployment id used as the orchestrator model when a QuickApp manifest omits orchestrator.deployment. Also surfaces as the JSON-schema default for that field so DIAL Core can pre-fill new manifests. Apps can override per-app.

DIAL Configuration changes

Important

Operators must update DIAL Core's configuration when upgrading to this release. The /v1/configuration-support/* endpoints are no longer served via a global DIAL Core routes entry — they are declared on the QuickApps application type itself.

Required migration (#319):

  1. Remove any quick_apps2-style entry from DIAL Core's global routes block (it will be ignored from now on).
  2. Add the new dial:applicationTypeRoutes block to the QuickApps entry under applicationTypeSchemas — apply the schema snippet from PR #319 verbatim.

0.8.0-rc.0

0.8.0-rc.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 May 08:33

Features

  • New dial-app toolset — given a DIAL deployment id, routes transparently to either MCP (when the deployment advertises features.mcp == true) or chat completion (otherwise); a transport: "auto" | "mcp" | "chat-completion" field (default "auto") lets admins pin the choice #215 (#243)
  • Per-app overrides for predefined tool and toolset templates via a new optional override field carrying a JSON Merge Patch (RFC 7396) — ChatHub variants can swap a deployment, tweak a tool description, or disable a single tool per-app without forking templates globally or duplicating inline JSON #14 #273 (#269)
  • Generic synthetic tool-call injector (v2) — replaces the bespoke read-files plumbing with a reusable mechanism for injecting synthetic tool calls into message history #235 (#255)
  • Configurable agent file-download size limit — replaces the hardcoded 10 MiB cap in DialFileService with DEFAULT_FILE_LOADING_SIZE_LIMIT (deployment-wide) and features.file_loading.size_limit (per-app override) (#274)
  • Graduate Time Awareness feature to GA — features.timestamp is no longer gated by ENABLE_PREVIEW_FEATURES #288 (#290)
  • Graduate DIAL Prompt Skills feature to GA — the skills config field and DialPromptSkillsModule are no longer gated by ENABLE_PREVIEW_FEATURES #289 (#291)

Fixes

  • Enrich synthetic tool results with metadata — synthetic tool messages now flow through the same ToolCallResultEnricher pipeline as real tool results, so message state (e.g. timestamp) is attached consistently #296 (#297)
  • Restore OTEL trace_id / span_id / resource.service.name / trace_sampled in QuickApps logs via a new OtelAwareFormatter that matches adapter-openai's wire format when correlation is on and renders nothing otherwise #284 (#285)
  • Preserve millisecond precision in TimestampMetadata.response_timestamp — Pydantic's default datetime.isoformat() was dropping fractional digits on whole-second boundaries, leaving downstream consumers (UI, analytics, persistence) with inconsistent sub-second precision #278 (#281)
  • Align integration test modules after recent refactors (#276)

Other

  • Normalize DIAL deployment-id field naming — DialDeploymentConfig.namedeployment_id and DialMCPToolSet.dial_iddeployment_id; legacy keys keep validating via validation_alias, and the published JSON schema retains deprecated siblings under an anyOf so existing manifests stay valid #286 (#287)
  • Refresh integration coverage for the current model lineup — add Claude 4.6 tests, update Claude 4.5 model name, add ChatHub configs for the new models (#277); remove GPT-4.1 tool cache files and Claude 3.7/4 references #283 (#294)
  • Enhance issue templates and add a 🛠️ Tech debt template (#292)
  • Drop venv-activation hints from CLAUDE.mdmake targets already run via poetry run (#272)
  • Bump python-multipart from 0.0.26 to 0.0.27 (#280)
  • Bump urllib3 from 2.6.3 to 2.7.0 (#295)

Schema deprecations

Caution

Still accepted in app manifests, but will be removed in future versions (#287).

Legacy key Replacement Affected config model
name (deployment field) deployment_id DialDeploymentConfig
dial_id deployment_id DialMCPToolSet

Deployment Changes

New environment variables

Variable Default Description
DEFAULT_FILE_LOADING_SIZE_LIMIT 10485760 Deployment-wide cap (bytes, > 0; default 10 MiB) on files the agent downloads. Overridden per-app by features.file_loading.size_limit in the manifest.

Behavioral changes

Note

Two preview-gated features have graduated to GA and are now active regardless of ENABLE_PREVIEW_FEATURES:

  • Time Awarenessfeatures.timestamp (#290)
  • DIAL Prompt Skills — the skills config field and DialPromptSkillsModule (#291)