In explicit chart auto mode, the filter at agent/index.ts removed
render_chart whenever the user message lacked chart keywords. This
caused failures when a user manually selected the built-in chart skill
with a message like "analyze message trends" — the skill prompt
instructed the AI to produce charts but the tool was unavailable.
Add an isExplicitChartSkill guard so the filter is skipped when
skillCtx.skillDef.id === CHART_CAPABILITY_SKILL_ID.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace `containLabel: true` with `outerBoundsMode: 'same'` in
EChartLine, EChartBar, EChartHeatmap to suppress the ECharts 6
deprecation warning; `outerBoundsMode: 'same'` is the semantic
equivalent (outer boundary equals the grid rect, labels fit inside)
- In EChartPie, auto-hide the right-side legend when outer labels
(indicator lines + text) are already visible, and center the chart
accordingly to avoid redundant information
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AISettingsTab: move 对话偏好 above 工具设置 in left nav to match content order
- Rename i18n key skillSettings → chatPreferences across all locales and
components; the section covers general chat preferences, not just skills
- SubTabs: add whitespace-nowrap + shrink-0 to tab buttons and overflow-x-auto
to horizontal container so labels never wrap at narrow desktop widths
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- agent-stream-runner: add fallback allowedBuiltinTools in explicit chart
auto-skill path so unrestricted assistants still load analysis tools when
skill menu advertises skills that require them
- aiChat: guard updatePlanBlockStatus('done') with !hasStreamError in both
SSE and edit-stream handlers so failed plans stay visibly failed instead
of being overwritten by the terminal done event
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add optional `rows` parameter to render_chart so AI can pass pre-fetched
data arrays (e.g. from get_time_stats, member_stats) directly instead of
rewriting SQL from scratch. Update chart capability prompts and all locale
files to guide AI to check high-level tools first before falling back to SQL.
Remove debug console.debug log from agent-core thinkingLevel resolution.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sqlQueryTool (execute_sql) was listed in BUILTIN_TOOL_CATALOG and
available in the CLI AGENT_TOOL_REGISTRY, but was never imported or
registered in the Electron-specific TOOL_REGISTRY. Users who enabled
the tool via the assistant config panel would trigger a missing-tool
error at inference time.
Add sqlQueryTool to the Electron registry following the same
adaptSharedTool pattern used by all other analysis tools. Add a
catalog/registry drift guard test (name + category) covering all
BUILTIN_TOOL_CATALOG entries, enabled via
--experimental-test-module-mocks to mock Electron runtime deps.
Document the general-over-specific assertion rule in AGENTS.md.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
thinkingLevels was excluded from the mergeDefaults whitelist in
PreferencesManager, so user choices were silently dropped on every
save/load cycle and never written to preferences.json.
Add the field to the Preferences interface, DEFAULTS, and mergeDefaults
so the existing backendPersist → savePreferences pipeline can write and
restore it correctly. Adds regression tests covering the save/load
round-trip, multi-save merge, and legacy-file backward compatibility.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
MCP server checks the gate at startup and exits before opening stdio if
the data directory requires a newer runtime. Desktop HTTP API maps
DataDirCompatibilityError (including wrapped causes) to a 409 response
so the renderer can surface a clear upgrade prompt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Harden the startup migration path: fail fast and show an error dialog if
schema migration cannot complete. Repair the gate retroactively for
databases that were already migrated before the gate system existed.
Raise the gate after every import path (full import, incremental import,
stream import) and after opening any database that already carries a
current-segment schema. Centralise gate-raising inside DatabaseManager so
call sites cannot accidentally skip it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Use the packaged app version (not Electron's dev-mode 0.0.0) across all
compatibility checks. Make DatabaseManager require a RuntimeIdentity so
every gate write carries a verified version and kind.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>