Configure a persisted output-language setting and apply it across AI-authored task text and workflow summaries. - Add project/global output-language settings with defaults, validation, UI controls, translations, and documentation. - Propagate the selected language through planning, execution, review, summaries, and task creation. - Add focused coverage for language resolution and update affected dashboard, engine, and localization tests. Files changed: .changeset/fn-037-task-output-language.md | 7 ++ docs/settings-reference.md | 4 + docs/task-management.md | 4 + .../core/src/__tests__/ai-output-language.test.ts | 21 +++++ packages/core/src/ai/ai-output-language.ts | 42 +++++++++ packages/core/src/ai/ai-summarize.ts | 16 +++- packages/core/src/config/settings-schema.ts | 2 + packages/core/src/index.gate.ts | 2 + packages/core/src/index.ts | 2 + packages/core/src/task-store/settings-ops.ts | 7 ++ packages/core/src/task-store/task-creation.ts | 4 + packages/core/src/types/settings/settings-scope.ts | 2 + .../app/__tests__/settings-sections.test.tsx | 21 +++-- .../__tests__/SettingsModal.models-auth.test.tsx | 10 +- .../app/components/settings/section-keys.ts | 2 +- .../sections/ProjectModelsSection.search.ts | 13 ++- .../settings/sections/ProjectModelsSection.tsx | 28 ++++-- .../settings-default-descriptions.test.tsx | 4 +- .../src/__tests__/github-tracking.test.ts | 4 +- .../__tests__/planning-prompt-resolution.test.ts | 29 ++++-- .../src/__tests__/routes-planning.test.ts | 32 ++++++- packages/dashboard/src/ai-session-store.ts | 15 ++- packages/dashboard/src/github-tracking.ts | 3 + packages/dashboard/src/planning.ts | 75 +++++++++++++-- .../routes/register-ai-text-assistant-routes.ts | 11 ++- .../src/routes/register-planning-subtask-routes.ts | 6 +- .../src/routes/register-task-workflow-routes.ts | 9 +- packages/dashboard/src/shared/settings-sections.ts | 2 +- .../__tests__/ce-workflow-step-executor.test.ts | 45 ++++++++- .../__tests__/executor-review-artifacts.test.ts | 65 +++++++++++++ packages/engine/src/__tests__/triage.test.ts | 7 +- .../src/__tests__/workflow-task-runtime.test.ts | 23 +++++ .../create-authoritative-workflow-primitives.ts | 14 ++- .../create-authoritative-workflow-seams.ts | 17 +++- .../engine/src/executor/execute-workflow-graph.ts | 19 +++- .../engine/src/executor/execute-workflow-step.ts | 13 ++- packages/engine/src/executor/execution-prompt.ts | 10 +- .../engine/src/executor/handoff-task-to-review.ts | 10 +- .../engine/src/executor/run-graph-custom-node.ts | 6 +- .../src/executor/task-executor-graph-facades.ts | 8 +- packages/engine/src/triage.ts | 35 ++----- .../src/workflows/workflow-completion-summary.ts | 101 ++++++++++++++++++--- .../engine/src/workflows/workflow-task-runtime.ts | 12 +++ packages/i18n/locales/en/app.json | 7 +- packages/i18n/locales/es/app.json | 7 +- packages/i18n/locales/fr/app.json | 7 +- packages/i18n/locales/ko/app.json | 7 +- packages/i18n/locales/pt-BR/app.json | 14 ++- packages/i18n/locales/zh-CN/app.json | 7 +- packages/i18n/locales/zh-TW/app.json | 7 +- packages/i18n/src/resources.d.ts | 13 ++- 51 files changed, 680 insertions(+), 151 deletions(-) Fusion-Task-Id: FN-037 Fusion-Task-Lineage: 968a707e-7ffe-43ba-b983-d679b031f7a5 Co-authored-by: Fusion <noreply@runfusion.ai>
103 lines
6.1 KiB
TypeScript
103 lines
6.1 KiB
TypeScript
/**
|
|
* Search entries for the Project Models section.
|
|
*
|
|
* FNXC:SettingsSearch 2026-07-15-17:35:
|
|
* One entry per descriptor row the section renders, co-located so a setting and its index entry change in the same edit. Labels and help mirror the section's `t()` calls verbatim: the index matches on the copy operators actually read, so a paraphrase here would make search miss the words on screen.
|
|
* This section is the reason the index was rewritten. Operators searched "summarize" and Project Models did not surface, because the old index was a hand-written keyword list per nav entry; it was patched twice (FN-7907, then again 2026-07-14) and still only covered whatever someone had thought to type. `autoSummarizeTitles` now carries NO keywords on purpose — "Auto-summarize" is in its own label and "summarization" in its help, and both are indexed automatically. Adding "summarize" back as a keyword would restate the label and re-create the list that rotted.
|
|
* Absent by design: the model-lane pickers, the Chat default target picker, preset CRUD and its per-size grid, and the workflow lane rows. They are bespoke widgets, not descriptor rows — there is no `data-settings-key` anchor for a result to jump to.
|
|
*/
|
|
import type { SettingsSearchEntry } from "../search/types";
|
|
|
|
export const projectModelsSearchEntries: SettingsSearchEntry[] = [
|
|
{
|
|
sectionId: "project-models",
|
|
key: "executorEscalationModel",
|
|
labelKey: "settings.projectModels.executorEscalationModel",
|
|
labelFallback: "Executor Escalation Model",
|
|
helpKey: "settings.projectModels.executorEscalationModelHelp",
|
|
helpFallback:
|
|
"Alternate model used once tool-failure retries are exhausted. No default — unset means no alternate model; configure escalation policy and an optional node target in Scheduling.",
|
|
keywords: ["tool failure", "alternate model", "retry model", "provider", "executor"],
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "tokenCap",
|
|
labelKey: "settings.projectModels.tokenCap",
|
|
labelFallback: "Token Cap",
|
|
helpKey: "settings.projectModels.automaticallyCompactContextWhenApproachingThisTokenCount",
|
|
helpFallback:
|
|
"Automatically compact context when approaching this token count. Leave empty for no cap (compact only on overflow errors). Set a number to proactively compact when reaching this token count. No default — unset (no cap).",
|
|
keywords: ["context window", "limit", "budget"],
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "chatNewSessionMode",
|
|
labelKey: "settings.projectModels.chatNewSessionMode",
|
|
labelFallback: "New Chat behavior",
|
|
helpKey: "settings.projectModels.chatNewSessionModeHelp",
|
|
helpFallback:
|
|
"Prompt mode opens New Chat with this default preselected. Always-default mode skips the dialog when the configured default is complete.",
|
|
keywords: ["direct chat", "skip dialog"],
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "autoSelectModelPreset",
|
|
labelKey: "settings.projectModels.autoSelectPresetBasedOnTaskSize",
|
|
labelFallback: " Auto-select preset based on task size ",
|
|
helpKey: "settings.projectModels.autoSelectModelPresetHint",
|
|
helpFallback: "Default: disabled.",
|
|
/*
|
|
FNXC:SettingsSearch 2026-07-15-17:35:
|
|
The help is just "Default: disabled.", so this row's only indexable copy is its label. The sizes it selects between (S/M/L) live in the grid below, which is bespoke and unindexed, hence the size keywords here.
|
|
*/
|
|
keywords: ["small", "medium", "large", "S M L"],
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "taskOutputLanguage",
|
|
labelKey: "settings.projectModels.taskOutputLanguage",
|
|
labelFallback: "AI-authored task language",
|
|
helpKey: "settings.projectModels.taskOutputLanguageHelp",
|
|
helpFallback: "Choose the language for AI-authored task plans, titles, steps, summaries, and recommendations. No stored default — unset resolves English. Changes apply to new generation sessions only.",
|
|
keywords: ["task", "output", "language", "English", "input", "interface", "plans", "summaries"],
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "autoSummarizeTitles",
|
|
labelKey: "settings.projectModels.autoSummarizeLongDescriptionsAsTitles",
|
|
labelFallback: " Auto-summarize task titles ",
|
|
helpKey: "settings.projectModels.whenEnabledTasksCreatedWithoutATitleBut",
|
|
helpFallback:
|
|
" When enabled, every non-empty task description created without a title receives an AI-generated title (max 60 characters). Explicit titles are preserved, and manual or explicit force requests remain available when this is disabled. The same model is also used for merge commit summaries and GitHub tracking issue titles. Default: disabled. ",
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "useAiMergeCommitSummary",
|
|
labelKey: "settings.projectModels.aIMergeCommitSummaries",
|
|
labelFallback: " AI merge commit summaries ",
|
|
helpKey: "settings.projectModels.whenEnabledMergeCommitMessagesIncludeAnAI",
|
|
helpFallback:
|
|
" When enabled, merge commit messages include an AI-generated subject plus body summary (narrative + bullets + diff-stat) instead of just listing step commit subjects. Uses the title summarization model. Default: enabled. ",
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "prTitlePromptInstructions",
|
|
labelKey: "settings.projectModels.prTitlePromptInstructions",
|
|
labelFallback: "PR title prompt guidance",
|
|
helpKey: "settings.projectModels.prTitlePromptInstructionsHelp",
|
|
helpFallback:
|
|
"Guides the AI-generated Create PR title. Leave blank to use the default PR metadata prompt. No default — unset.",
|
|
keywords: ["pull request", "conventional commit"],
|
|
},
|
|
{
|
|
sectionId: "project-models",
|
|
key: "prDescriptionPromptInstructions",
|
|
labelKey: "settings.projectModels.prDescriptionPromptInstructions",
|
|
labelFallback: "PR description prompt guidance",
|
|
helpKey: "settings.projectModels.prDescriptionPromptInstructionsHelp",
|
|
helpFallback:
|
|
"Guides the AI-generated Create PR summary, changes, and testing sections. Leave blank to use the default PR metadata prompt. No default — unset.",
|
|
keywords: ["pull request", "body"],
|
|
},
|
|
];
|