);
diff --git a/ui/desktop/src/components/recipes/shared/SubRecipeEditor.tsx b/ui/desktop/src/components/recipes/shared/SubRecipeEditor.tsx
index 844ce7b182c6..b5f2f692c6c9 100644
--- a/ui/desktop/src/components/recipes/shared/SubRecipeEditor.tsx
+++ b/ui/desktop/src/components/recipes/shared/SubRecipeEditor.tsx
@@ -10,11 +10,11 @@ import { defineMessages, useIntl } from '../../../i18n';
const i18n = defineMessages({
label: {
id: 'subRecipeEditor.label',
- defaultMessage: 'Subrecipes',
+ defaultMessage: 'Sub-workflows',
},
createNew: {
id: 'subRecipeEditor.createNew',
- defaultMessage: 'Create New Subrecipe',
+ defaultMessage: 'Create New Sub-workflow',
},
addExisting: {
id: 'subRecipeEditor.addExisting',
@@ -22,7 +22,8 @@ const i18n = defineMessages({
},
description: {
id: 'subRecipeEditor.description',
- defaultMessage: 'Subrecipes are recipes that can be called as tools during execution. They enable multi-step workflows and reusable components.',
+ defaultMessage:
+ 'Sub-workflows are workflows that can be called as tools during execution. They enable multi-step workflows and reusable components.',
},
sequential: {
id: 'subRecipeEditor.sequential',
@@ -34,11 +35,11 @@ const i18n = defineMessages({
},
editSubrecipe: {
id: 'subRecipeEditor.editSubrecipe',
- defaultMessage: 'Edit subrecipe {name}',
+ defaultMessage: 'Edit sub-workflow {name}',
},
deleteSubrecipe: {
id: 'subRecipeEditor.deleteSubrecipe',
- defaultMessage: 'Delete subrecipe {name}',
+ defaultMessage: 'Delete sub-workflow {name}',
},
duplicateName: {
id: 'subRecipeEditor.duplicateName',
@@ -46,7 +47,7 @@ const i18n = defineMessages({
},
duplicateNameMsg: {
id: 'subRecipeEditor.duplicateNameMsg',
- defaultMessage: 'A subrecipe named "{name}" already exists. Please use a unique name.',
+ defaultMessage: 'A sub-workflow named "{name}" already exists. Please use a unique name.',
},
});
@@ -118,7 +119,9 @@ export default function SubRecipeEditor({ subRecipes, onChange }: SubRecipeEdito
return (
-
+
-
- {intl.formatMessage(i18n.description)}
-
+
{intl.formatMessage(i18n.description)}
{subRecipes.length > 0 && (
@@ -170,7 +171,9 @@ export default function SubRecipeEditor({ subRecipes, onChange }: SubRecipeEdito
)}
{subRecipe.values && Object.keys(subRecipe.values).length > 0 && (
-
{intl.formatMessage(i18n.preconfiguredValues)}
+
+ {intl.formatMessage(i18n.preconfiguredValues)}
+
{Object.entries(subRecipe.values).map(([key, value]) => (
- {subRecipe ? intl.formatMessage(i18n.configureTitle) : intl.formatMessage(i18n.addTitle)}
+ {subRecipe
+ ? intl.formatMessage(i18n.configureTitle)
+ : intl.formatMessage(i18n.addTitle)}
-
- {intl.formatMessage(i18n.subtitle)}
-
+
{intl.formatMessage(i18n.subtitle)}
-
- {intl.formatMessage(i18n.nameHint)}
-
+ {intl.formatMessage(i18n.nameHint)}
{/* Path Field */}
@@ -246,9 +245,7 @@ export default function SubRecipeModal({
{intl.formatMessage(i18n.browse)}
-
- {intl.formatMessage(i18n.pathHint)}
-
+
{intl.formatMessage(i18n.pathHint)}
{/* Description Field */}
diff --git a/ui/desktop/src/components/recipes/shared/__tests__/RecipeFormFields.test.tsx b/ui/desktop/src/components/recipes/shared/__tests__/RecipeFormFields.test.tsx
index d941f521c75e..c97ff0b4d145 100644
--- a/ui/desktop/src/components/recipes/shared/__tests__/RecipeFormFields.test.tsx
+++ b/ui/desktop/src/components/recipes/shared/__tests__/RecipeFormFields.test.tsx
@@ -267,7 +267,7 @@ describe('RecipeFormFields', () => {
// Check that activity input exists
const messageInput = screen.getByPlaceholderText(
- 'Enter a user facing introduction message for your recipe (supports **bold**, *italic*, `code`, etc.)'
+ 'Enter a user facing introduction message for your workflow (supports **bold**, *italic*, `code`, etc.)'
);
expect(messageInput).toBeInTheDocument();
@@ -1019,9 +1019,9 @@ describe('RecipeFormFields', () => {
await expandAdvancedSection(user);
- expect(screen.getByText('Subrecipes')).toBeInTheDocument();
+ expect(screen.getByText('Sub-workflows')).toBeInTheDocument();
expect(screen.getByRole('button', { name: /add existing/i })).toBeInTheDocument();
- expect(screen.getByRole('button', { name: /create new subrecipe/i })).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: /create new sub-workflow/i })).toBeInTheDocument();
});
it('pre-fills subrecipes from initial values', async () => {
@@ -1100,7 +1100,7 @@ describe('RecipeFormFields', () => {
const addButton = screen.getByRole('button', { name: /add existing/i });
await user.click(addButton);
- expect(screen.getByRole('heading', { name: /add subrecipe/i })).toBeInTheDocument();
+ expect(screen.getByRole('heading', { name: /add sub-workflow/i })).toBeInTheDocument();
expect(screen.getByLabelText(/^name/i)).toBeInTheDocument();
expect(screen.getByLabelText(/^path/i)).toBeInTheDocument();
});
diff --git a/ui/desktop/src/components/recipes/shared/recipeNameUtils.ts b/ui/desktop/src/components/recipes/shared/recipeNameUtils.ts
index 5d8045f754a9..f4cf89e4e1ff 100644
--- a/ui/desktop/src/components/recipes/shared/recipeNameUtils.ts
+++ b/ui/desktop/src/components/recipes/shared/recipeNameUtils.ts
@@ -3,7 +3,7 @@ import { z } from 'zod';
/**
* Validation schema for recipe names
*/
-export const recipeNameSchema = z.string().min(3, 'Recipe name must be at least 3 characters');
+export const recipeNameSchema = z.string().min(3, 'Workflow name must be at least 3 characters');
/**
* Transform a string to a valid recipe name format:
diff --git a/ui/desktop/src/components/schedule/ScheduleDetailView.tsx b/ui/desktop/src/components/schedule/ScheduleDetailView.tsx
index 2cffe9f4160d..daf6525ca8ec 100644
--- a/ui/desktop/src/components/schedule/ScheduleDetailView.tsx
+++ b/ui/desktop/src/components/schedule/ScheduleDetailView.tsx
@@ -37,7 +37,7 @@ const i18n = defineMessages({
paused: { id: 'scheduleDetailView.paused', defaultMessage: 'Paused' },
scheduleLabel: { id: 'scheduleDetailView.scheduleLabel', defaultMessage: 'Schedule:' },
cronExpression: { id: 'scheduleDetailView.cronExpression', defaultMessage: 'Cron Expression:' },
- recipeSource: { id: 'scheduleDetailView.recipeSource', defaultMessage: 'Recipe Source:' },
+ recipeSource: { id: 'scheduleDetailView.recipeSource', defaultMessage: 'Workflow Source:' },
lastRun: { id: 'scheduleDetailView.lastRun', defaultMessage: 'Last Run:' },
currentSession: { id: 'scheduleDetailView.currentSession', defaultMessage: 'Current Session:' },
processStarted: { id: 'scheduleDetailView.processStarted', defaultMessage: 'Process Started:' },
diff --git a/ui/desktop/src/components/schedule/ScheduleModal.tsx b/ui/desktop/src/components/schedule/ScheduleModal.tsx
index 3b2f96f56320..8b9ac4e5f7f2 100644
--- a/ui/desktop/src/components/schedule/ScheduleModal.tsx
+++ b/ui/desktop/src/components/schedule/ScheduleModal.tsx
@@ -20,7 +20,7 @@ const i18n = defineMessages({
browseYaml: { id: 'scheduleModal.browseYaml', defaultMessage: 'Browse for YAML file...' },
selected: { id: 'scheduleModal.selected', defaultMessage: 'Selected: {path}' },
deepLinkPlaceholder: { id: 'scheduleModal.deepLinkPlaceholder', defaultMessage: 'Paste goose://recipe link here...' },
- recipeParsed: { id: 'scheduleModal.recipeParsed', defaultMessage: 'Recipe parsed successfully' },
+ recipeParsed: { id: 'scheduleModal.recipeParsed', defaultMessage: 'Workflow parsed successfully' },
recipeTitle: { id: 'scheduleModal.recipeTitle', defaultMessage: 'Title: {title}' },
recipeDescription: { id: 'scheduleModal.recipeDescription', defaultMessage: 'Description: {description}' },
scheduleLabel: { id: 'scheduleModal.scheduleLabel', defaultMessage: 'Schedule:' },
@@ -31,10 +31,10 @@ const i18n = defineMessages({
createSchedule: { id: 'scheduleModal.createSchedule', defaultMessage: 'Create Schedule' },
invalidDeepLink: { id: 'scheduleModal.invalidDeepLink', defaultMessage: 'Invalid deep link. Please use a goose://recipe link.' },
failedReadFile: { id: 'scheduleModal.failedReadFile', defaultMessage: 'Failed to read the selected file.' },
- failedParseRecipe: { id: 'scheduleModal.failedParseRecipe', defaultMessage: 'Failed to parse recipe from file.' },
+ failedParseRecipe: { id: 'scheduleModal.failedParseRecipe', defaultMessage: 'Failed to parse workflow from file.' },
invalidFileType: { id: 'scheduleModal.invalidFileType', defaultMessage: 'Invalid file type: Please select a YAML file (.yaml or .yml)' },
scheduleIdRequired: { id: 'scheduleModal.scheduleIdRequired', defaultMessage: 'Schedule ID is required.' },
- provideValidRecipe: { id: 'scheduleModal.provideValidRecipe', defaultMessage: 'Please provide a valid recipe source.' },
+ provideValidRecipe: { id: 'scheduleModal.provideValidRecipe', defaultMessage: 'Please provide a valid workflow source.' },
});
export interface NewSchedulePayload {
diff --git a/ui/desktop/src/components/schedule/SchedulesView.tsx b/ui/desktop/src/components/schedule/SchedulesView.tsx
index 4b4608b9ec45..7a0d6d6c3824 100644
--- a/ui/desktop/src/components/schedule/SchedulesView.tsx
+++ b/ui/desktop/src/components/schedule/SchedulesView.tsx
@@ -40,14 +40,14 @@ const i18n = defineMessages({
refreshing: { id: 'schedulesView.refreshing', defaultMessage: 'Refreshing...' },
refresh: { id: 'schedulesView.refresh', defaultMessage: 'Refresh' },
createSchedule: { id: 'schedulesView.createSchedule', defaultMessage: 'Create Schedule' },
- description: { id: 'schedulesView.description', defaultMessage: 'Create and manage scheduled tasks to run recipes automatically at specified times.' },
+ description: { id: 'schedulesView.description', defaultMessage: 'Create and manage scheduled tasks to run workflows automatically at specified times.' },
errorPrefix: { id: 'schedulesView.errorPrefix', defaultMessage: 'Error: {error}' },
noSchedules: { id: 'schedulesView.noSchedules', defaultMessage: 'No schedules yet' },
scheduleUpdated: { id: 'schedulesView.scheduleUpdated', defaultMessage: 'Schedule Updated' },
scheduleUpdatedMsg: { id: 'schedulesView.scheduleUpdatedMsg', defaultMessage: 'Successfully updated schedule "{id}"' },
confirmDelete: {
id: 'schedulesView.confirmDelete',
- defaultMessage: 'Remove schedule "{id}"? The recipe will be kept.',
+ defaultMessage: 'Remove schedule "{id}"? The workflow will be kept.',
},
schedulePaused: { id: 'schedulesView.schedulePaused', defaultMessage: 'Schedule Paused' },
schedulePausedMsg: { id: 'schedulesView.schedulePausedMsg', defaultMessage: 'Successfully paused schedule "{id}"' },
diff --git a/ui/desktop/src/components/settings/SettingsView.test.tsx b/ui/desktop/src/components/settings/SettingsView.test.tsx
new file mode 100644
index 000000000000..8854f23c9ac4
--- /dev/null
+++ b/ui/desktop/src/components/settings/SettingsView.test.tsx
@@ -0,0 +1,80 @@
+/**
+ * @vitest-environment jsdom
+ */
+import { render, screen, waitFor } from '@testing-library/react';
+import { vi, describe, expect, it } from 'vitest';
+import SettingsView from './SettingsView';
+import { IntlTestWrapper } from '../../i18n/test-utils';
+
+vi.mock('../../api/sdk.gen', () => ({
+ getTunnelStatus: vi.fn().mockResolvedValue({ data: { state: 'running' } }),
+}));
+
+vi.mock('../../utils/analytics', () => ({
+ trackSettingsTabViewed: vi.fn(),
+}));
+
+vi.mock('../Layout/MainPanelLayout', () => ({
+ MainPanelLayout: ({ children }: { children: React.ReactNode }) =>
{children}
,
+}));
+
+vi.mock('./models/ModelsSection', () => ({
+ default: () =>
Models section
,
+}));
+
+vi.mock('./chat/ChatSettingsSection', () => ({
+ default: () =>
Chat section
,
+}));
+
+vi.mock('./sessions/SessionSharingSection', () => ({
+ default: () =>
Session sharing section
,
+}));
+
+vi.mock('./app/ExternalBackendSection', () => ({
+ default: () =>
External backend section
,
+}));
+
+vi.mock('./tunnel/TunnelSection', () => ({
+ default: () =>
Tunnel section
,
+}));
+
+vi.mock('./gateways/GatewaySettingsSection', () => ({
+ default: () =>
Gateway settings section
,
+}));
+
+vi.mock('./PromptsSettingsSection', () => ({
+ default: () =>
Prompts section
,
+}));
+
+vi.mock('./keyboard/KeyboardShortcutsSection', () => ({
+ default: () =>
Keyboard section
,
+}));
+
+vi.mock('./app/AppSettingsSection', () => ({
+ default: () =>
App settings section
,
+}));
+
+vi.mock('./config/ConfigSettings', () => ({
+ default: () =>
Config settings section
,
+}));
+
+describe('SettingsView', () => {
+ it('hides local inference and mesh settings tabs from ApeCloud builds', async () => {
+ render(
+
,
+ { wrapper: IntlTestWrapper }
+ );
+
+ await waitFor(() => {
+ expect(screen.getByTestId('settings-models-tab')).toBeInTheDocument();
+ });
+
+ expect(screen.queryByTestId('settings-local-inference-tab')).not.toBeInTheDocument();
+ expect(screen.queryByTestId('settings-mesh-tab')).not.toBeInTheDocument();
+ expect(screen.getByText('Models section')).toBeInTheDocument();
+ });
+});
diff --git a/ui/desktop/src/components/settings/SettingsView.tsx b/ui/desktop/src/components/settings/SettingsView.tsx
index 312c37479bc3..267d7644f728 100644
--- a/ui/desktop/src/components/settings/SettingsView.tsx
+++ b/ui/desktop/src/components/settings/SettingsView.tsx
@@ -16,8 +16,6 @@ import {
MessageSquare,
FileText,
Keyboard,
- HardDrive,
- Network,
} from 'lucide-react';
import { useState, useEffect, useRef } from 'react';
import TunnelSection from './tunnel/TunnelSection';
@@ -25,11 +23,8 @@ import GatewaySettingsSection from './gateways/GatewaySettingsSection';
import { getTunnelStatus } from '../../api/sdk.gen';
import ChatSettingsSection from './chat/ChatSettingsSection';
import KeyboardShortcutsSection from './keyboard/KeyboardShortcutsSection';
-import LocalInferenceSection from './localInference/LocalInferenceSection';
-import MeshSection from './mesh/MeshSection';
import { CONFIGURATION_ENABLED } from '../../updates';
import { trackSettingsTabViewed } from '../../utils/analytics';
-import { useFeatures } from '../../contexts/FeaturesContext';
import { defineMessages, useIntl } from '../../i18n';
const i18n = defineMessages({
@@ -41,10 +36,6 @@ const i18n = defineMessages({
id: 'settingsView.tabModels',
defaultMessage: 'Models',
},
- tabLocalInference: {
- id: 'settingsView.tabLocalInference',
- defaultMessage: 'Local Inference',
- },
tabChat: {
id: 'settingsView.tabChat',
defaultMessage: 'Chat',
@@ -86,7 +77,6 @@ export default function SettingsView({
const [activeTab, setActiveTab] = useState('models');
const [tunnelDisabled, setTunnelDisabled] = useState(false);
const hasTrackedInitialTab = useRef(false);
- const { localInference } = useFeatures();
const intl = useIntl();
const handleTabChange = (tab: string) => {
@@ -110,30 +100,14 @@ export default function SettingsView({
prompts: 'prompts',
keyboard: 'keyboard',
gateway: 'sharing',
- 'local-inference': 'local-inference',
- mesh: 'mesh',
};
const targetTab = sectionToTab[viewOptions.section];
- if (
- targetTab &&
- (targetTab !== 'local-inference' || localInference) &&
- (targetTab !== 'mesh' || !tunnelDisabled)
- ) {
+ if (targetTab) {
setActiveTab(targetTab);
}
}
- }, [viewOptions.section, localInference, tunnelDisabled]);
-
- // Reset active tab if local-inference or mesh becomes unavailable
- useEffect(() => {
- if (!localInference && activeTab === 'local-inference') {
- setActiveTab('models');
- }
- if (tunnelDisabled && activeTab === 'mesh') {
- setActiveTab('models');
- }
- }, [localInference, tunnelDisabled, activeTab]);
+ }, [viewOptions.section]);
useEffect(() => {
if (!hasTrackedInitialTab.current) {
@@ -194,26 +168,6 @@ export default function SettingsView({
{intl.formatMessage(i18n.tabModels)}
- {localInference && (
-
-
- {intl.formatMessage(i18n.tabLocalInference)}
-
- )}
- {!tunnelDisabled && (
-
-
- Mesh
-
- )}
{intl.formatMessage(i18n.tabChat)}
@@ -257,24 +211,6 @@ export default function SettingsView({
- {localInference && (
-
-
-
- )}
-
- {!tunnelDisabled && (
-
-
-
- )}
-
= {
home: 'itemHome',
chat: 'itemChat',
recipes: 'itemRecipes',
- apps: 'itemApps',
scheduler: 'itemScheduler',
extensions: 'itemExtensions',
settings: 'itemSettings',
@@ -146,9 +142,7 @@ export const NavigationCustomizationSettings: React.FC
-
- {intl.formatMessage(i18n.dragInstructions)}
-
+
{intl.formatMessage(i18n.dragInstructions)}
- {preferences.itemOrder.map((itemId) => {
- const isEnabled = preferences.enabledItems.includes(itemId);
- const isDragging = draggedItem === itemId;
- const isDragOver = dragOverItem === itemId;
- const label = getItemLabel(itemId);
-
- return (
-
handleDragStart(e, itemId)}
- onDragOver={(e) => handleDragOver(e, itemId)}
- onDrop={(e) => handleDrop(e, itemId)}
- onDragEnd={handleDragEnd}
- className={cn(
- 'flex items-center gap-3 p-3 rounded-lg border transition-all',
- isDragging && 'opacity-50',
- isDragOver
- ? 'border-border-primary bg-background-tertiary'
- : 'border-border-secondary bg-background-primary',
- !isEnabled && 'opacity-50'
- )}
- >
-
-
{label}
-
+ );
+ })}
);
diff --git a/ui/desktop/src/components/ui/RecipeWarningModal.tsx b/ui/desktop/src/components/ui/RecipeWarningModal.tsx
index 279199d023e4..fb24cb35c5d7 100644
--- a/ui/desktop/src/components/ui/RecipeWarningModal.tsx
+++ b/ui/desktop/src/components/ui/RecipeWarningModal.tsx
@@ -20,24 +20,24 @@ const i18n = defineMessages({
},
newRecipeWarningTitle: {
id: 'recipeWarningModal.newRecipeWarningTitle',
- defaultMessage: '⚠️ New Recipe Warning',
+ defaultMessage: '⚠️ New Workflow Warning',
},
firstTimeDescription: {
id: 'recipeWarningModal.firstTimeDescription',
- defaultMessage: "You are about to execute a recipe that you haven't run before. ",
+ defaultMessage: "You are about to execute a workflow that you haven't run before. ",
},
trustSource: {
id: 'recipeWarningModal.trustSource',
- defaultMessage: 'Only proceed if you trust the source of this recipe.',
+ defaultMessage: 'Only proceed if you trust the source of this workflow.',
},
hiddenCharsWarning: {
id: 'recipeWarningModal.hiddenCharsWarning',
defaultMessage:
- 'This recipe contains hidden characters that will be ignored for your safety, as they could be used for malicious purposes.',
+ 'This workflow contains hidden characters that will be ignored for your safety, as they could be used for malicious purposes.',
},
recipePreview: {
id: 'recipeWarningModal.recipePreview',
- defaultMessage: 'Recipe Preview:',
+ defaultMessage: 'Workflow Preview:',
},
titleLabel: {
id: 'recipeWarningModal.titleLabel',
diff --git a/ui/desktop/src/hooks/useNavigationItems.ts b/ui/desktop/src/hooks/useNavigationItems.ts
index 8715c44f28cb..9672fb47cd07 100644
--- a/ui/desktop/src/hooks/useNavigationItems.ts
+++ b/ui/desktop/src/hooks/useNavigationItems.ts
@@ -1,13 +1,4 @@
-import {
- Home,
- MessageSquare,
- FileText,
- AppWindow,
- Clock,
- Puzzle,
- Settings,
- Zap,
-} from 'lucide-react';
+import { Home, MessageSquare, FileText, Clock, Puzzle, Settings, Zap } from 'lucide-react';
import type { LucideIcon } from 'lucide-react';
import { defineMessages, type IntlShape, type MessageDescriptor } from 'react-intl';
@@ -24,9 +15,8 @@ export interface NavItem {
export const NAV_ITEMS: NavItem[] = [
{ id: 'home', path: '/', label: 'Home', icon: Home },
{ id: 'chat', path: '/pair', label: 'Chat', icon: MessageSquare, hasSubItems: true },
- { id: 'recipes', path: '/recipes', label: 'Recipes', icon: FileText },
+ { id: 'recipes', path: '/recipes', label: 'Workflows', icon: FileText },
{ id: 'skills', path: '/skills', label: 'Skills', icon: Zap },
- { id: 'apps', path: '/apps', label: 'Apps', icon: AppWindow },
{ id: 'scheduler', path: '/schedules', label: 'Scheduler', icon: Clock },
{ id: 'extensions', path: '/extensions', label: 'Extensions', icon: Puzzle },
{ id: 'settings', path: '/settings', label: 'Settings', icon: Settings },
@@ -46,16 +36,12 @@ const navItemMessages = defineMessages({
},
recipes: {
id: 'navigationCustomization.itemRecipes',
- defaultMessage: 'Recipes',
+ defaultMessage: 'Workflows',
},
skills: {
id: 'navigationCustomization.itemSkills',
defaultMessage: 'Skills',
},
- apps: {
- id: 'navigationCustomization.itemApps',
- defaultMessage: 'Apps',
- },
scheduler: {
id: 'navigationCustomization.itemScheduler',
defaultMessage: 'Scheduler',
diff --git a/ui/desktop/src/i18n/messages/en.json b/ui/desktop/src/i18n/messages/en.json
index 438f5093fbdf..e554a899f452 100644
--- a/ui/desktop/src/i18n/messages/en.json
+++ b/ui/desktop/src/i18n/messages/en.json
@@ -63,7 +63,7 @@
"defaultMessage": "\"{title}\" has been saved and is ready to use."
},
"baseChat.recipeCreatedTitle": {
- "defaultMessage": "Recipe created successfully!"
+ "defaultMessage": "Workflow created successfully!"
},
"bottomMenuExtensionSelection.extensionToggleError": {
"defaultMessage": "Extension Toggle Error"
@@ -141,7 +141,7 @@
"defaultMessage": "Context window"
},
"chatInput.createRecipeFromSession": {
- "defaultMessage": "Create Recipe from Session"
+ "defaultMessage": "Create Workflow from Session"
},
"chatInput.dictationError": {
"defaultMessage": "Dictation Error"
@@ -183,7 +183,7 @@
"defaultMessage": "Unknown type"
},
"chatInput.viewEditRecipe": {
- "defaultMessage": "View/Edit Recipe"
+ "defaultMessage": "View/Edit Workflow"
},
"chatInput.viewExtensions": {
"defaultMessage": "View extensions"
@@ -333,13 +333,13 @@
"defaultMessage": "Copy this link to share with friends or paste directly in Chrome to open"
},
"createEditRecipe.createRecipeTitle": {
- "defaultMessage": "Create Recipe"
+ "defaultMessage": "Create Workflow"
},
"createEditRecipe.createSubtitle": {
- "defaultMessage": "Create a new recipe to define agent behavior and capabilities for reusable chat sessions."
+ "defaultMessage": "Create a new workflow to define agent behavior and capabilities for reusable chat sessions."
},
"createEditRecipe.editSubtitle": {
- "defaultMessage": "You can edit the recipe below to change the agent's behavior in a new session."
+ "defaultMessage": "You can edit the workflow below to change the agent's behavior in a new session."
},
"createEditRecipe.generatingDeeplink": {
"defaultMessage": "Generating deeplink..."
@@ -348,28 +348,28 @@
"defaultMessage": "Learn more"
},
"createEditRecipe.recipeSavedAndLaunchedMsg": {
- "defaultMessage": "Recipe saved and launched successfully"
+ "defaultMessage": "Workflow saved and launched successfully"
},
"createEditRecipe.recipeSavedMsg": {
- "defaultMessage": "Recipe saved successfully"
+ "defaultMessage": "Workflow saved successfully"
},
"createEditRecipe.saveAndRunFailed": {
"defaultMessage": "Save and Run Failed"
},
"createEditRecipe.saveAndRunFailedMsg": {
- "defaultMessage": "Failed to save and run recipe: {error}"
+ "defaultMessage": "Failed to save and run workflow: {error}"
},
"createEditRecipe.saveAndRunRecipe": {
- "defaultMessage": "Save & Run Recipe"
+ "defaultMessage": "Save & Run Workflow"
},
"createEditRecipe.saveFailed": {
"defaultMessage": "Save Failed"
},
"createEditRecipe.saveFailedMsg": {
- "defaultMessage": "Failed to save recipe: {error}"
+ "defaultMessage": "Failed to save workflow: {error}"
},
"createEditRecipe.saveRecipe": {
- "defaultMessage": "Save Recipe"
+ "defaultMessage": "Save Workflow"
},
"createEditRecipe.saving": {
"defaultMessage": "Saving..."
@@ -381,7 +381,7 @@
"defaultMessage": "Please fill in all required fields and ensure JSON schema is valid."
},
"createEditRecipe.viewEditRecipeTitle": {
- "defaultMessage": "View/edit recipe"
+ "defaultMessage": "View/edit workflow"
},
"createRecipeFromSession.analyzingTitle": {
"defaultMessage": "Analyzing your conversation"
@@ -390,10 +390,10 @@
"defaultMessage": "Cancel"
},
"createRecipeFromSession.createAndRunRecipe": {
- "defaultMessage": "Create & Run Recipe"
+ "defaultMessage": "Create & Run Workflow"
},
"createRecipeFromSession.createRecipe": {
- "defaultMessage": "Create Recipe"
+ "defaultMessage": "Create Workflow"
},
"createRecipeFromSession.creating": {
"defaultMessage": "Creating..."
@@ -402,10 +402,10 @@
"defaultMessage": "Extracting insights from your chat"
},
"createRecipeFromSession.failedToCreateDefaultMsg": {
- "defaultMessage": "An unexpected error occurred while creating the recipe. Please try again."
+ "defaultMessage": "An unexpected error occurred while creating the workflow. Please try again."
},
"createRecipeFromSession.failedToCreateTitle": {
- "defaultMessage": "Failed to create recipe"
+ "defaultMessage": "Failed to create workflow"
},
"createRecipeFromSession.stageComplete": {
"defaultMessage": "Complete!"
@@ -417,7 +417,7 @@
"defaultMessage": "Finalizing details..."
},
"createRecipeFromSession.stageGenerating": {
- "defaultMessage": "Generating recipe structure..."
+ "defaultMessage": "Generating workflow structure..."
},
"createRecipeFromSession.stageIdentifying": {
"defaultMessage": "Identifying key patterns..."
@@ -426,22 +426,22 @@
"defaultMessage": "Reading your conversation..."
},
"createRecipeFromSession.subtitle": {
- "defaultMessage": "Create a reusable recipe based on your current conversation."
+ "defaultMessage": "Create a reusable workflow based on your current conversation."
},
"createRecipeFromSession.title": {
- "defaultMessage": "Create Recipe from Session"
+ "defaultMessage": "Create Workflow from Session"
},
"createSubRecipeInline.cancel": {
"defaultMessage": "Cancel"
},
"createSubRecipeInline.closeModal": {
- "defaultMessage": "Close create subrecipe modal"
+ "defaultMessage": "Close create sub-workflow modal"
},
"createSubRecipeInline.createAndAdd": {
- "defaultMessage": "Create & Add Subrecipe"
+ "defaultMessage": "Create & Add Sub-workflow"
},
"createSubRecipeInline.createdSuccess": {
- "defaultMessage": "Subrecipe created successfully"
+ "defaultMessage": "Sub-workflow created successfully"
},
"createSubRecipeInline.creating": {
"defaultMessage": "Creating..."
@@ -450,13 +450,13 @@
"defaultMessage": "Duplicate Name"
},
"createSubRecipeInline.duplicateNameMsg": {
- "defaultMessage": "A subrecipe named \"{name}\" already exists. Please use a unique name."
+ "defaultMessage": "A sub-workflow named \"{name}\" already exists. Please use a unique name."
},
"createSubRecipeInline.instructionsLabel": {
"defaultMessage": "Instructions"
},
"createSubRecipeInline.instructionsPlaceholder": {
- "defaultMessage": "Instructions for the AI when this subrecipe is called..."
+ "defaultMessage": "Instructions for the AI when this sub-workflow is called..."
},
"createSubRecipeInline.nameHint": {
"defaultMessage": "Unique identifier used to generate the tool name"
@@ -471,16 +471,16 @@
"defaultMessage": "Pre-configured Values"
},
"createSubRecipeInline.preconfiguredValuesHint": {
- "defaultMessage": "Optional parameter values that are always passed to the subrecipe"
+ "defaultMessage": "Optional parameter values that are always passed to the sub-workflow"
},
"createSubRecipeInline.recipeDescriptionLabel": {
- "defaultMessage": "Recipe Description"
+ "defaultMessage": "Workflow Description"
},
"createSubRecipeInline.recipeDescriptionPlaceholder": {
- "defaultMessage": "What this recipe does when executed"
+ "defaultMessage": "What this workflow does when executed"
},
"createSubRecipeInline.recipeTitleLabel": {
- "defaultMessage": "Recipe Title"
+ "defaultMessage": "Workflow Title"
},
"createSubRecipeInline.recipeTitlePlaceholder": {
"defaultMessage": "e.g., Security Analysis Tool"
@@ -489,7 +489,7 @@
"defaultMessage": "Save Failed"
},
"createSubRecipeInline.saveFailedMsg": {
- "defaultMessage": "Failed to save subrecipe: {error}"
+ "defaultMessage": "Failed to save sub-workflow: {error}"
},
"createSubRecipeInline.sequentialHint": {
"defaultMessage": "(Forces sequential execution of multiple instances)"
@@ -498,10 +498,10 @@
"defaultMessage": "Sequential when repeated"
},
"createSubRecipeInline.subtitle": {
- "defaultMessage": "Create a simple recipe to use as a callable tool in your main recipe"
+ "defaultMessage": "Create a simple workflow to use as a callable tool in your main workflow"
},
"createSubRecipeInline.title": {
- "defaultMessage": "Create New Subrecipe"
+ "defaultMessage": "Create New Sub-workflow"
},
"createSubRecipeInline.toolDescriptionLabel": {
"defaultMessage": "Tool Description"
@@ -513,7 +513,7 @@
"defaultMessage": "Validation Failed"
},
"createSubRecipeInline.validationMsg": {
- "defaultMessage": "Name, title, recipe description, and instructions are required."
+ "defaultMessage": "Name, title, workflow description, and instructions are required."
},
"creditsExhaustedNotification.addCredits": {
"defaultMessage": "Add credits"
@@ -1169,9 +1169,6 @@
"extensionsSection.addExtension": {
"defaultMessage": "Add Extension"
},
- "extensionsSection.browseExtensions": {
- "defaultMessage": "Browse extensions"
- },
"extensionsSection.saveChanges": {
"defaultMessage": "Save Changes"
},
@@ -1184,9 +1181,6 @@
"extensionsView.addExtension": {
"defaultMessage": "Add Extension"
},
- "extensionsView.browseExtensions": {
- "defaultMessage": "Browse extensions"
- },
"extensionsView.defaultNote": {
"defaultMessage": "Extensions enabled here are used as the default for new chats. You can also toggle active extensions during chat."
},
@@ -1560,7 +1554,7 @@
"defaultMessage": "Cancel"
},
"importRecipeForm.deeplinkHint": {
- "defaultMessage": "Paste a recipe deeplink starting with \"goose://recipe?config=\""
+ "defaultMessage": "Paste a workflow deeplink starting with \"goose://recipe?config=\""
},
"importRecipeForm.deeplinkPlaceholder": {
"defaultMessage": "Paste your goose://recipe?config=... deeplink here"
@@ -1569,13 +1563,13 @@
"defaultMessage": "example"
},
"importRecipeForm.expectedRecipeStructure": {
- "defaultMessage": "Expected Recipe Structure"
+ "defaultMessage": "Expected Workflow Structure"
},
"importRecipeForm.importRecipeButton": {
- "defaultMessage": "Import Recipe"
+ "defaultMessage": "Import Workflow"
},
"importRecipeForm.importRecipeTitle": {
- "defaultMessage": "Import Recipe"
+ "defaultMessage": "Import Workflow"
},
"importRecipeForm.importing": {
"defaultMessage": "Importing..."
@@ -1584,16 +1578,16 @@
"defaultMessage": "OR"
},
"importRecipeForm.recipeDeeplinkLabel": {
- "defaultMessage": "Recipe Deeplink"
+ "defaultMessage": "Workflow Deeplink"
},
"importRecipeForm.recipeFileHint": {
- "defaultMessage": "Upload a YAML or JSON file containing the recipe structure"
+ "defaultMessage": "Upload a YAML or JSON file containing the workflow structure"
},
"importRecipeForm.recipeFileLabel": {
- "defaultMessage": "Recipe File"
+ "defaultMessage": "Workflow File"
},
"importRecipeForm.reviewWarning": {
- "defaultMessage": "Ensure you review contents of recipe files before adding them to ApeMind Agent."
+ "defaultMessage": "Ensure you review contents of workflow files before adding them to ApeMind Agent."
},
"importRecipeForm.schemaDescription": {
"defaultMessage": "Your YAML or JSON file should follow this structure. Required fields are: title, description, and either instructions or prompt."
@@ -2408,9 +2402,6 @@
"navigationCustomization.hideItem": {
"defaultMessage": "Hide item"
},
- "navigationCustomization.itemApps": {
- "defaultMessage": "Apps"
- },
"navigationCustomization.itemChat": {
"defaultMessage": "Chat"
},
@@ -2421,7 +2412,7 @@
"defaultMessage": "Home"
},
"navigationCustomization.itemRecipes": {
- "defaultMessage": "Recipes"
+ "defaultMessage": "Workflows"
},
"navigationCustomization.itemScheduler": {
"defaultMessage": "Scheduler"
@@ -2577,7 +2568,7 @@
"defaultMessage": "Cancel"
},
"parameterInputModal.cancelRecipeSetup": {
- "defaultMessage": "Cancel Recipe Setup"
+ "defaultMessage": "Cancel Workflow Setup"
},
"parameterInputModal.enterValue": {
"defaultMessage": "Enter value for {key}..."
@@ -2586,7 +2577,7 @@
"defaultMessage": "False"
},
"parameterInputModal.recipeParameters": {
- "defaultMessage": "Recipe Parameters"
+ "defaultMessage": "Workflow Parameters"
},
"parameterInputModal.select": {
"defaultMessage": "Select..."
@@ -2595,10 +2586,10 @@
"defaultMessage": "Select an option..."
},
"parameterInputModal.startNewChat": {
- "defaultMessage": "Start New Chat (No Recipe)"
+ "defaultMessage": "Start New Chat (No Workflow)"
},
"parameterInputModal.startRecipe": {
- "defaultMessage": "Start Recipe"
+ "defaultMessage": "Start Workflow"
},
"parameterInputModal.true": {
"defaultMessage": "True"
@@ -2982,13 +2973,13 @@
"defaultMessage": "Submit"
},
"recipeActivityEditor.activitiesDescription": {
- "defaultMessage": "The top-line prompts and activity buttons that will display in the recipe chat window."
+ "defaultMessage": "The top-line prompts and activity buttons that will display in the workflow chat window."
},
"recipeActivityEditor.activitiesLabel": {
"defaultMessage": "Activities"
},
"recipeActivityEditor.activityButtonsDescription": {
- "defaultMessage": "Clickable buttons that will appear below the message to help users interact with your recipe."
+ "defaultMessage": "Clickable buttons that will appear below the message to help users interact with your workflow."
},
"recipeActivityEditor.activityButtonsLabel": {
"defaultMessage": "Activity Buttons"
@@ -3000,16 +2991,16 @@
"defaultMessage": "Add new activity..."
},
"recipeActivityEditor.messageDescription": {
- "defaultMessage": "A formatted message that will appear at the top of the recipe. Supports markdown formatting."
+ "defaultMessage": "A formatted message that will appear at the top of the workflow. Supports markdown formatting."
},
"recipeActivityEditor.messageLabel": {
"defaultMessage": "Message"
},
"recipeActivityEditor.messagePlaceholder": {
- "defaultMessage": "Enter a user facing introduction message for your recipe (supports **bold**, *italic*, `code`, etc.)"
+ "defaultMessage": "Enter a user facing introduction message for your workflow (supports **bold**, *italic*, `code`, etc.)"
},
"recipeExtensionSelector.description": {
- "defaultMessage": "Select which extensions should be available when running this recipe. Leave empty to use default extensions."
+ "defaultMessage": "Select which extensions should be available when running this workflow. Leave empty to use default extensions."
},
"recipeExtensionSelector.extensionsSelected": {
"defaultMessage": "{count,plural,one{# extension selected} other{# extensions selected}}"
@@ -3033,13 +3024,13 @@
"defaultMessage": "Advanced Options"
},
"recipeFormFields.advancedOptionsHint": {
- "defaultMessage": "Activities, parameters, model, extensions, response schema, subrecipes"
+ "defaultMessage": "Activities, parameters, model, extensions, response schema, sub-workflows"
},
"recipeFormFields.descriptionLabel": {
"defaultMessage": "Description"
},
"recipeFormFields.descriptionPlaceholder": {
- "defaultMessage": "Brief description of what this recipe does"
+ "defaultMessage": "Brief description of what this workflow does"
},
"recipeFormFields.enterValueFor": {
"defaultMessage": "Enter value for {key}"
@@ -3069,7 +3060,7 @@
"defaultMessage": "(Optional - Instructions or Prompt are required)"
},
"recipeFormFields.promptPlaceholder": {
- "defaultMessage": "Pre-filled prompt when the recipe starts"
+ "defaultMessage": "Pre-filled prompt when the workflow starts"
},
"recipeFormFields.responseJsonSchema": {
"defaultMessage": "Response JSON Schema"
@@ -3078,16 +3069,16 @@
"defaultMessage": "Define the expected structure of the AI's response using JSON Schema format"
},
"recipeFormFields.templateVarHint": {
- "defaultMessage": "Use '{{parameter_name}}' to define parameters that can be filled in when running the recipe."
+ "defaultMessage": "Use '{{parameter_name}}' to define parameters that can be filled in when running the workflow."
},
"recipeFormFields.titleLabel": {
"defaultMessage": "Title"
},
"recipeFormFields.titlePlaceholder": {
- "defaultMessage": "Recipe title"
+ "defaultMessage": "Workflow title"
},
"recipeHeader.recipeLabel": {
- "defaultMessage": "Recipe"
+ "defaultMessage": "Workflow"
},
"recipeModelSelector.backToModelList": {
"defaultMessage": "Back to model list"
@@ -3126,7 +3117,7 @@
"defaultMessage": "Use default provider"
},
"recipeNameField.defaultLabel": {
- "defaultMessage": "Recipe Name"
+ "defaultMessage": "Workflow Name"
},
"recipeNameField.formatHint": {
"defaultMessage": "Will be automatically formatted (lowercase, dashes for spaces)"
@@ -3138,19 +3129,19 @@
"defaultMessage": "Description:"
},
"recipeWarningModal.firstTimeDescription": {
- "defaultMessage": "You are about to execute a recipe that you haven't run before."
+ "defaultMessage": "You are about to execute a workflow that you haven't run before."
},
"recipeWarningModal.hiddenCharsWarning": {
- "defaultMessage": "This recipe contains hidden characters that will be ignored for your safety, as they could be used for malicious purposes."
+ "defaultMessage": "This workflow contains hidden characters that will be ignored for your safety, as they could be used for malicious purposes."
},
"recipeWarningModal.instructionsLabel": {
"defaultMessage": "Instructions:"
},
"recipeWarningModal.newRecipeWarningTitle": {
- "defaultMessage": "⚠️ New Recipe Warning"
+ "defaultMessage": "⚠️ New Workflow Warning"
},
"recipeWarningModal.recipePreview": {
- "defaultMessage": "Recipe Preview:"
+ "defaultMessage": "Workflow Preview:"
},
"recipeWarningModal.securityWarningTitle": {
"defaultMessage": "⚠️ Security Warning"
@@ -3162,7 +3153,7 @@
"defaultMessage": "Trust and Execute"
},
"recipeWarningModal.trustSource": {
- "defaultMessage": "Only proceed if you trust the source of this recipe."
+ "defaultMessage": "Only proceed if you trust the source of this workflow."
},
"recipesView.addSchedule": {
"defaultMessage": "Add schedule"
@@ -3192,31 +3183,31 @@
"defaultMessage": "Copy YAML"
},
"recipesView.copyYamlFailedMsg": {
- "defaultMessage": "Failed to copy recipe YAML to clipboard"
+ "defaultMessage": "Failed to copy workflow YAML to clipboard"
},
"recipesView.createRecipe": {
- "defaultMessage": "Create Recipe"
+ "defaultMessage": "Create Workflow"
},
"recipesView.deeplinkCopiedMsg": {
- "defaultMessage": "Recipe deeplink has been copied to clipboard"
+ "defaultMessage": "Workflow deeplink has been copied to clipboard"
},
"recipesView.deeplinkCopiedTitle": {
"defaultMessage": "Deeplink copied"
},
"recipesView.deleteRecipe": {
- "defaultMessage": "Delete recipe"
+ "defaultMessage": "Delete workflow"
},
"recipesView.deleteRecipeConfirm": {
"defaultMessage": "Are you sure you want to delete \"{title}\"?"
},
"recipesView.deleteRecipeDetail": {
- "defaultMessage": "Recipe file will be deleted."
+ "defaultMessage": "Workflow file will be deleted."
},
"recipesView.deleteRecipeTitle": {
- "defaultMessage": "Delete Recipe"
+ "defaultMessage": "Delete Workflow"
},
"recipesView.editRecipe": {
- "defaultMessage": "Edit recipe"
+ "defaultMessage": "Edit workflow"
},
"recipesView.editSchedule": {
"defaultMessage": "Edit schedule"
@@ -3225,46 +3216,46 @@
"defaultMessage": "Edit slash command"
},
"recipesView.errorLoadingRecipes": {
- "defaultMessage": "Error Loading Recipes"
+ "defaultMessage": "Error Loading Workflows"
},
"recipesView.exportFailedMsg": {
- "defaultMessage": "Failed to export recipe to file"
+ "defaultMessage": "Failed to export workflow to file"
},
"recipesView.exportFailedTitle": {
"defaultMessage": "Export failed"
},
"recipesView.exportRecipeDialogTitle": {
- "defaultMessage": "Export Recipe"
+ "defaultMessage": "Export Workflow"
},
"recipesView.exportToFile": {
"defaultMessage": "Export to File"
},
"recipesView.noMatchingRecipes": {
- "defaultMessage": "No matching recipes found"
+ "defaultMessage": "No matching workflows found"
},
"recipesView.noSavedRecipes": {
- "defaultMessage": "No saved recipes"
+ "defaultMessage": "No saved workflows"
},
"recipesView.noSavedRecipesDescription": {
- "defaultMessage": "Recipe saved from chats will show up here."
+ "defaultMessage": "Workflow saved from chats will show up here."
},
"recipesView.openInNewWindow": {
"defaultMessage": "Open in new window"
},
"recipesView.recipeDeletedSuccess": {
- "defaultMessage": "Recipe deleted successfully"
+ "defaultMessage": "Workflow deleted successfully"
},
"recipesView.recipeExportedMsg": {
- "defaultMessage": "Recipe saved to {filePath}"
+ "defaultMessage": "Workflow saved to {filePath}"
},
"recipesView.recipeExportedTitle": {
- "defaultMessage": "Recipe exported"
+ "defaultMessage": "Workflow exported"
},
"recipesView.recipesDescription": {
- "defaultMessage": "View and manage your saved recipes to quickly start new sessions with predefined configurations. {shortcut} to search."
+ "defaultMessage": "View and manage your saved workflows to quickly start new sessions with predefined configurations. {shortcut} to search."
},
"recipesView.recipesTitle": {
- "defaultMessage": "Recipes"
+ "defaultMessage": "Workflows"
},
"recipesView.remove": {
"defaultMessage": "Remove"
@@ -3282,37 +3273,37 @@
"defaultMessage": "{action} Schedule"
},
"recipesView.scheduleRemovedMsg": {
- "defaultMessage": "Recipe will no longer run automatically"
+ "defaultMessage": "Workflow will no longer run automatically"
},
"recipesView.scheduleRemovedTitle": {
"defaultMessage": "Schedule removed"
},
"recipesView.scheduleSavedMsg": {
- "defaultMessage": "Recipe will run {schedule}"
+ "defaultMessage": "Workflow will run {schedule}"
},
"recipesView.scheduleSavedTitle": {
"defaultMessage": "Schedule saved"
},
"recipesView.searchRecipesPlaceholder": {
- "defaultMessage": "Search recipes..."
+ "defaultMessage": "Search workflows..."
},
"recipesView.shareRecipe": {
- "defaultMessage": "Share recipe"
+ "defaultMessage": "Share workflow"
},
"recipesView.slashCommandDescription": {
- "defaultMessage": "Set a slash command to quickly run this recipe from any chat"
+ "defaultMessage": "Set a slash command to quickly run this workflow from any chat"
},
"recipesView.slashCommandPlaceholder": {
"defaultMessage": "command-name"
},
"recipesView.slashCommandRemovedMsg": {
- "defaultMessage": "Recipe slash command has been removed"
+ "defaultMessage": "Workflow slash command has been removed"
},
"recipesView.slashCommandRemovedTitle": {
"defaultMessage": "Slash command removed"
},
"recipesView.slashCommandSavedMsg": {
- "defaultMessage": "Use /{command} to run this recipe"
+ "defaultMessage": "Use /{command} to run this workflow"
},
"recipesView.slashCommandSavedTitle": {
"defaultMessage": "Slash command saved"
@@ -3321,16 +3312,16 @@
"defaultMessage": "Slash Command"
},
"recipesView.slashCommandUsageHint": {
- "defaultMessage": "Use /{command} in any chat to run this recipe"
+ "defaultMessage": "Use /{command} in any chat to run this workflow"
},
"recipesView.tryAgain": {
"defaultMessage": "Try Again"
},
"recipesView.useRecipe": {
- "defaultMessage": "Use recipe"
+ "defaultMessage": "Use workflow"
},
"recipesView.yamlCopiedMsg": {
- "defaultMessage": "Recipe YAML has been copied to clipboard"
+ "defaultMessage": "Workflow YAML has been copied to clipboard"
},
"recipesView.yamlCopiedTitle": {
"defaultMessage": "YAML copied"
@@ -3459,7 +3450,7 @@
"defaultMessage": "Recent Sessions"
},
"scheduleDetailView.recipeSource": {
- "defaultMessage": "Recipe Source:"
+ "defaultMessage": "Workflow Source:"
},
"scheduleDetailView.runScheduleError": {
"defaultMessage": "Run Schedule Error"
@@ -3540,7 +3531,7 @@
"defaultMessage": "Edit Schedule"
},
"scheduleModal.failedParseRecipe": {
- "defaultMessage": "Failed to parse recipe from file."
+ "defaultMessage": "Failed to parse workflow from file."
},
"scheduleModal.failedReadFile": {
"defaultMessage": "Failed to read the selected file."
@@ -3558,13 +3549,13 @@
"defaultMessage": "e.g., daily-summary-job"
},
"scheduleModal.provideValidRecipe": {
- "defaultMessage": "Please provide a valid recipe source."
+ "defaultMessage": "Please provide a valid workflow source."
},
"scheduleModal.recipeDescription": {
"defaultMessage": "Description: {description}"
},
"scheduleModal.recipeParsed": {
- "defaultMessage": "Recipe parsed successfully"
+ "defaultMessage": "Workflow parsed successfully"
},
"scheduleModal.recipeTitle": {
"defaultMessage": "Title: {title}"
@@ -3591,13 +3582,13 @@
"defaultMessage": "YAML"
},
"schedulesView.confirmDelete": {
- "defaultMessage": "Remove schedule \"{id}\"? The recipe will be kept."
+ "defaultMessage": "Remove schedule \"{id}\"? The workflow will be kept."
},
"schedulesView.createSchedule": {
"defaultMessage": "Create Schedule"
},
"schedulesView.description": {
- "defaultMessage": "Create and manage scheduled tasks to run recipes automatically at specified times."
+ "defaultMessage": "Create and manage scheduled tasks to run workflows automatically at specified times."
},
"schedulesView.edit": {
"defaultMessage": "Edit"
@@ -4187,9 +4178,6 @@
"settingsView.tabKeyboard": {
"defaultMessage": "Keyboard"
},
- "settingsView.tabLocalInference": {
- "defaultMessage": "Local Inference"
- },
"settingsView.tabModels": {
"defaultMessage": "Models"
},
@@ -4290,25 +4278,25 @@
"defaultMessage": "Add Existing"
},
"subRecipeEditor.createNew": {
- "defaultMessage": "Create New Subrecipe"
+ "defaultMessage": "Create New Sub-workflow"
},
"subRecipeEditor.deleteSubrecipe": {
- "defaultMessage": "Delete subrecipe {name}"
+ "defaultMessage": "Delete sub-workflow {name}"
},
"subRecipeEditor.description": {
- "defaultMessage": "Subrecipes are recipes that can be called as tools during execution. They enable multi-step workflows and reusable components."
+ "defaultMessage": "Sub-workflows are workflows that can be called as tools during execution. They enable multi-step workflows and reusable components."
},
"subRecipeEditor.duplicateName": {
"defaultMessage": "Duplicate Name"
},
"subRecipeEditor.duplicateNameMsg": {
- "defaultMessage": "A subrecipe named \"{name}\" already exists. Please use a unique name."
+ "defaultMessage": "A sub-workflow named \"{name}\" already exists. Please use a unique name."
},
"subRecipeEditor.editSubrecipe": {
- "defaultMessage": "Edit subrecipe {name}"
+ "defaultMessage": "Edit sub-workflow {name}"
},
"subRecipeEditor.label": {
- "defaultMessage": "Subrecipes"
+ "defaultMessage": "Sub-workflows"
},
"subRecipeEditor.preconfiguredValues": {
"defaultMessage": "Pre-configured values:"
@@ -4317,7 +4305,7 @@
"defaultMessage": "Sequential"
},
"subRecipeModal.addTitle": {
- "defaultMessage": "Add Subrecipe"
+ "defaultMessage": "Add Sub-workflow"
},
"subRecipeModal.apply": {
"defaultMessage": "Apply"
@@ -4329,16 +4317,16 @@
"defaultMessage": "Cancel"
},
"subRecipeModal.closeModal": {
- "defaultMessage": "Close subrecipe modal"
+ "defaultMessage": "Close sub-workflow modal"
},
"subRecipeModal.configureTitle": {
- "defaultMessage": "Configure Subrecipe"
+ "defaultMessage": "Configure Sub-workflow"
},
"subRecipeModal.descriptionLabel": {
"defaultMessage": "Description"
},
"subRecipeModal.descriptionPlaceholder": {
- "defaultMessage": "Optional description of what this subrecipe does..."
+ "defaultMessage": "Optional description of what this sub-workflow does..."
},
"subRecipeModal.invalidFile": {
"defaultMessage": "Invalid File"
@@ -4356,28 +4344,28 @@
"defaultMessage": "e.g., security_scan"
},
"subRecipeModal.pathHint": {
- "defaultMessage": "Browse for an existing recipe file or enter a path manually"
+ "defaultMessage": "Browse for an existing workflow file or enter a path manually"
},
"subRecipeModal.pathLabel": {
"defaultMessage": "Path"
},
"subRecipeModal.pathPlaceholder": {
- "defaultMessage": "e.g., ./subrecipes/security-analysis.yaml"
+ "defaultMessage": "e.g., ./sub-workflows/security-analysis.yaml"
},
"subRecipeModal.preconfiguredValues": {
"defaultMessage": "Pre-configured Values"
},
"subRecipeModal.preconfiguredValuesHint": {
- "defaultMessage": "Optional parameter values that are always passed to the subrecipe"
+ "defaultMessage": "Optional parameter values that are always passed to the sub-workflow"
},
"subRecipeModal.sequentialHint": {
- "defaultMessage": "(Forces sequential execution of multiple subrecipe instances)"
+ "defaultMessage": "(Forces sequential execution of multiple sub-workflow instances)"
},
"subRecipeModal.sequentialLabel": {
"defaultMessage": "Sequential when repeated"
},
"subRecipeModal.subtitle": {
- "defaultMessage": "Configure a subrecipe that can be called as a tool during recipe execution"
+ "defaultMessage": "Configure a sub-workflow that can be called as a tool during workflow execution"
},
"switchModelModal.backToModelList": {
"defaultMessage": "Back to model list"
diff --git a/ui/desktop/src/i18n/messages/zh-CN.json b/ui/desktop/src/i18n/messages/zh-CN.json
index 833240c50185..0f71d2033b33 100644
--- a/ui/desktop/src/i18n/messages/zh-CN.json
+++ b/ui/desktop/src/i18n/messages/zh-CN.json
@@ -63,7 +63,7 @@
"defaultMessage": "“{title}”已保存,可以使用了。"
},
"baseChat.recipeCreatedTitle": {
- "defaultMessage": "配方创建成功!"
+ "defaultMessage": "工作流创建成功!"
},
"bottomMenuExtensionSelection.extensionToggleError": {
"defaultMessage": "扩展开关错误"
@@ -123,7 +123,7 @@
"defaultMessage": "上下文窗口"
},
"chatInput.createRecipeFromSession": {
- "defaultMessage": "从会话创建配方"
+ "defaultMessage": "从会话创建工作流"
},
"chatInput.dictationError": {
"defaultMessage": "语音输入错误"
@@ -165,7 +165,7 @@
"defaultMessage": "未知类型"
},
"chatInput.viewEditRecipe": {
- "defaultMessage": "查看/编辑配方"
+ "defaultMessage": "查看/编辑工作流"
},
"chatInput.viewExtensions": {
"defaultMessage": "查看扩展"
@@ -318,13 +318,13 @@
"defaultMessage": "复制此链接分享给好友,或直接粘贴到 Chrome 打开"
},
"createEditRecipe.createRecipeTitle": {
- "defaultMessage": "创建配方"
+ "defaultMessage": "创建工作流"
},
"createEditRecipe.createSubtitle": {
- "defaultMessage": "创建新配方,为可复用的聊天会话定义 agent 行为和能力。"
+ "defaultMessage": "创建新工作流,为可复用的聊天会话定义 agent 行为和能力。"
},
"createEditRecipe.editSubtitle": {
- "defaultMessage": "你可以在下方编辑配方,以改变新会话中 agent 的行为。"
+ "defaultMessage": "你可以在下方编辑工作流,以改变新会话中 agent 的行为。"
},
"createEditRecipe.generatingDeeplink": {
"defaultMessage": "正在生成深层链接…"
@@ -333,28 +333,28 @@
"defaultMessage": "了解更多"
},
"createEditRecipe.recipeSavedAndLaunchedMsg": {
- "defaultMessage": "配方保存并启动成功"
+ "defaultMessage": "工作流保存并启动成功"
},
"createEditRecipe.recipeSavedMsg": {
- "defaultMessage": "配方保存成功"
+ "defaultMessage": "工作流保存成功"
},
"createEditRecipe.saveAndRunFailed": {
"defaultMessage": "保存并运行失败"
},
"createEditRecipe.saveAndRunFailedMsg": {
- "defaultMessage": "保存并运行配方失败:{error}"
+ "defaultMessage": "保存并运行工作流失败:{error}"
},
"createEditRecipe.saveAndRunRecipe": {
- "defaultMessage": "保存并运行配方"
+ "defaultMessage": "保存并运行工作流"
},
"createEditRecipe.saveFailed": {
"defaultMessage": "保存失败"
},
"createEditRecipe.saveFailedMsg": {
- "defaultMessage": "保存配方失败:{error}"
+ "defaultMessage": "保存工作流失败:{error}"
},
"createEditRecipe.saveRecipe": {
- "defaultMessage": "保存配方"
+ "defaultMessage": "保存工作流"
},
"createEditRecipe.saving": {
"defaultMessage": "保存中…"
@@ -366,7 +366,7 @@
"defaultMessage": "请填写所有必填字段并确保 JSON Schema 合法。"
},
"createEditRecipe.viewEditRecipeTitle": {
- "defaultMessage": "查看/编辑配方"
+ "defaultMessage": "查看/编辑工作流"
},
"createRecipeFromSession.analyzingTitle": {
"defaultMessage": "正在分析你的对话"
@@ -375,10 +375,10 @@
"defaultMessage": "取消"
},
"createRecipeFromSession.createAndRunRecipe": {
- "defaultMessage": "创建并运行配方"
+ "defaultMessage": "创建并运行工作流"
},
"createRecipeFromSession.createRecipe": {
- "defaultMessage": "创建配方"
+ "defaultMessage": "创建工作流"
},
"createRecipeFromSession.creating": {
"defaultMessage": "创建中…"
@@ -387,10 +387,10 @@
"defaultMessage": "正在从你的聊天中提取要点"
},
"createRecipeFromSession.failedToCreateDefaultMsg": {
- "defaultMessage": "创建配方时发生意外错误,请重试。"
+ "defaultMessage": "创建工作流时发生意外错误,请重试。"
},
"createRecipeFromSession.failedToCreateTitle": {
- "defaultMessage": "创建配方失败"
+ "defaultMessage": "创建工作流失败"
},
"createRecipeFromSession.stageComplete": {
"defaultMessage": "完成!"
@@ -402,7 +402,7 @@
"defaultMessage": "正在敲定细节…"
},
"createRecipeFromSession.stageGenerating": {
- "defaultMessage": "正在生成配方结构…"
+ "defaultMessage": "正在生成工作流结构…"
},
"createRecipeFromSession.stageIdentifying": {
"defaultMessage": "正在识别关键模式…"
@@ -411,22 +411,22 @@
"defaultMessage": "正在阅读你的对话…"
},
"createRecipeFromSession.subtitle": {
- "defaultMessage": "基于当前对话创建一份可复用的配方。"
+ "defaultMessage": "基于当前对话创建一份可复用的工作流。"
},
"createRecipeFromSession.title": {
- "defaultMessage": "从会话创建配方"
+ "defaultMessage": "从会话创建工作流"
},
"createSubRecipeInline.cancel": {
"defaultMessage": "取消"
},
"createSubRecipeInline.closeModal": {
- "defaultMessage": "关闭创建子配方弹窗"
+ "defaultMessage": "关闭创建子工作流弹窗"
},
"createSubRecipeInline.createAndAdd": {
- "defaultMessage": "创建并添加子配方"
+ "defaultMessage": "创建并添加子工作流"
},
"createSubRecipeInline.createdSuccess": {
- "defaultMessage": "子配方创建成功"
+ "defaultMessage": "子工作流创建成功"
},
"createSubRecipeInline.creating": {
"defaultMessage": "创建中…"
@@ -435,13 +435,13 @@
"defaultMessage": "名称重复"
},
"createSubRecipeInline.duplicateNameMsg": {
- "defaultMessage": "已存在名为“{name}”的子配方,请使用唯一名称。"
+ "defaultMessage": "已存在名为“{name}”的子工作流,请使用唯一名称。"
},
"createSubRecipeInline.instructionsLabel": {
"defaultMessage": "指令"
},
"createSubRecipeInline.instructionsPlaceholder": {
- "defaultMessage": "当此子配方被调用时给 AI 的指令…"
+ "defaultMessage": "当此子工作流被调用时给 AI 的指令…"
},
"createSubRecipeInline.nameHint": {
"defaultMessage": "用于生成工具名的唯一标识符"
@@ -456,16 +456,16 @@
"defaultMessage": "预设参数值"
},
"createSubRecipeInline.preconfiguredValuesHint": {
- "defaultMessage": "始终传给子配方的可选参数值"
+ "defaultMessage": "始终传给子工作流的可选参数值"
},
"createSubRecipeInline.recipeDescriptionLabel": {
- "defaultMessage": "配方描述"
+ "defaultMessage": "工作流描述"
},
"createSubRecipeInline.recipeDescriptionPlaceholder": {
- "defaultMessage": "此配方执行时的作用"
+ "defaultMessage": "此工作流执行时的作用"
},
"createSubRecipeInline.recipeTitleLabel": {
- "defaultMessage": "配方标题"
+ "defaultMessage": "工作流标题"
},
"createSubRecipeInline.recipeTitlePlaceholder": {
"defaultMessage": "例如:Security Analysis Tool"
@@ -474,7 +474,7 @@
"defaultMessage": "保存失败"
},
"createSubRecipeInline.saveFailedMsg": {
- "defaultMessage": "保存子配方失败:{error}"
+ "defaultMessage": "保存子工作流失败:{error}"
},
"createSubRecipeInline.sequentialHint": {
"defaultMessage": "(强制多个实例按顺序执行)"
@@ -483,10 +483,10 @@
"defaultMessage": "重复调用时按顺序执行"
},
"createSubRecipeInline.subtitle": {
- "defaultMessage": "创建一个简单配方,作为主配方中可调用的工具"
+ "defaultMessage": "创建一个简单工作流,作为主工作流中可调用的工具"
},
"createSubRecipeInline.title": {
- "defaultMessage": "创建新子配方"
+ "defaultMessage": "创建新子工作流"
},
"createSubRecipeInline.toolDescriptionLabel": {
"defaultMessage": "工具描述"
@@ -498,7 +498,7 @@
"defaultMessage": "校验失败"
},
"createSubRecipeInline.validationMsg": {
- "defaultMessage": "名称、标题、配方描述和指令均为必填项。"
+ "defaultMessage": "名称、标题、工作流描述和指令均为必填项。"
},
"creditsExhaustedNotification.addCredits": {
"defaultMessage": "充值额度"
@@ -1503,7 +1503,7 @@
"defaultMessage": "取消"
},
"importRecipeForm.deeplinkHint": {
- "defaultMessage": "粘贴以“goose://recipe?config=”开头的配方深层链接"
+ "defaultMessage": "粘贴以“goose://recipe?config=”开头的工作流深层链接"
},
"importRecipeForm.deeplinkPlaceholder": {
"defaultMessage": "在此粘贴你的 goose://recipe?config=... 深层链接"
@@ -1512,13 +1512,13 @@
"defaultMessage": "示例"
},
"importRecipeForm.expectedRecipeStructure": {
- "defaultMessage": "期望的配方结构"
+ "defaultMessage": "期望的工作流结构"
},
"importRecipeForm.importRecipeButton": {
- "defaultMessage": "导入配方"
+ "defaultMessage": "导入工作流"
},
"importRecipeForm.importRecipeTitle": {
- "defaultMessage": "导入配方"
+ "defaultMessage": "导入工作流"
},
"importRecipeForm.importing": {
"defaultMessage": "导入中…"
@@ -1527,16 +1527,16 @@
"defaultMessage": "或"
},
"importRecipeForm.recipeDeeplinkLabel": {
- "defaultMessage": "配方深层链接"
+ "defaultMessage": "工作流深层链接"
},
"importRecipeForm.recipeFileHint": {
- "defaultMessage": "上传包含配方结构的 YAML 或 JSON 文件"
+ "defaultMessage": "上传包含工作流结构的 YAML 或 JSON 文件"
},
"importRecipeForm.recipeFileLabel": {
- "defaultMessage": "配方文件"
+ "defaultMessage": "工作流文件"
},
"importRecipeForm.reviewWarning": {
- "defaultMessage": "在将配方文件添加到 ApeMind Agent 之前,请务必先审查其内容。"
+ "defaultMessage": "在将工作流文件添加到 ApeMind Agent 之前,请务必先审查其内容。"
},
"importRecipeForm.schemaDescription": {
"defaultMessage": "你的 YAML 或 JSON 文件应遵循此结构。必填字段:title、description,以及 instructions 或 prompt 之一。"
@@ -2351,9 +2351,6 @@
"navigationCustomization.hideItem": {
"defaultMessage": "隐藏项"
},
- "navigationCustomization.itemApps": {
- "defaultMessage": "应用"
- },
"navigationCustomization.itemChat": {
"defaultMessage": "聊天"
},
@@ -2364,7 +2361,7 @@
"defaultMessage": "首页"
},
"navigationCustomization.itemRecipes": {
- "defaultMessage": "配方"
+ "defaultMessage": "工作流"
},
"navigationCustomization.itemScheduler": {
"defaultMessage": "调度"
@@ -2520,7 +2517,7 @@
"defaultMessage": "取消"
},
"parameterInputModal.cancelRecipeSetup": {
- "defaultMessage": "取消配方设置"
+ "defaultMessage": "取消工作流设置"
},
"parameterInputModal.enterValue": {
"defaultMessage": "为 {key} 输入值…"
@@ -2529,7 +2526,7 @@
"defaultMessage": "False"
},
"parameterInputModal.recipeParameters": {
- "defaultMessage": "配方参数"
+ "defaultMessage": "工作流参数"
},
"parameterInputModal.select": {
"defaultMessage": "请选择…"
@@ -2538,10 +2535,10 @@
"defaultMessage": "选择一个选项…"
},
"parameterInputModal.startNewChat": {
- "defaultMessage": "开始新聊天(不使用配方)"
+ "defaultMessage": "开始新聊天(不使用工作流)"
},
"parameterInputModal.startRecipe": {
- "defaultMessage": "启动配方"
+ "defaultMessage": "启动工作流"
},
"parameterInputModal.true": {
"defaultMessage": "True"
@@ -2925,13 +2922,13 @@
"defaultMessage": "提交"
},
"recipeActivityEditor.activitiesDescription": {
- "defaultMessage": "将在配方聊天窗口中显示的顶部提示和活动按钮。"
+ "defaultMessage": "将在工作流聊天窗口中显示的顶部提示和活动按钮。"
},
"recipeActivityEditor.activitiesLabel": {
"defaultMessage": "活动"
},
"recipeActivityEditor.activityButtonsDescription": {
- "defaultMessage": "将出现在消息下方、帮助用户与你的配方交互的可点击按钮。"
+ "defaultMessage": "将出现在消息下方、帮助用户与你的工作流交互的可点击按钮。"
},
"recipeActivityEditor.activityButtonsLabel": {
"defaultMessage": "活动按钮"
@@ -2943,16 +2940,16 @@
"defaultMessage": "添加新活动…"
},
"recipeActivityEditor.messageDescription": {
- "defaultMessage": "将出现在配方顶部的格式化消息。支持 markdown 格式。"
+ "defaultMessage": "将出现在工作流顶部的格式化消息。支持 markdown 格式。"
},
"recipeActivityEditor.messageLabel": {
"defaultMessage": "消息"
},
"recipeActivityEditor.messagePlaceholder": {
- "defaultMessage": "为你的配方输入面向用户的介绍消息(支持 **加粗**、*斜体*、`代码` 等)"
+ "defaultMessage": "为你的工作流输入面向用户的介绍消息(支持 **加粗**、*斜体*、`代码` 等)"
},
"recipeExtensionSelector.description": {
- "defaultMessage": "选择运行此配方时可用的扩展。留空将使用默认扩展。"
+ "defaultMessage": "选择运行此工作流时可用的扩展。留空将使用默认扩展。"
},
"recipeExtensionSelector.extensionsSelected": {
"defaultMessage": "{count,plural,one{已选 # 个扩展} other{已选 # 个扩展}}"
@@ -2976,13 +2973,13 @@
"defaultMessage": "高级选项"
},
"recipeFormFields.advancedOptionsHint": {
- "defaultMessage": "活动、参数、模型、扩展、响应 schema、子配方"
+ "defaultMessage": "活动、参数、模型、扩展、响应 schema、子工作流"
},
"recipeFormFields.descriptionLabel": {
"defaultMessage": "描述"
},
"recipeFormFields.descriptionPlaceholder": {
- "defaultMessage": "此配方功能的简要描述"
+ "defaultMessage": "此工作流功能的简要描述"
},
"recipeFormFields.enterValueFor": {
"defaultMessage": "为 {key} 输入值"
@@ -3012,7 +3009,7 @@
"defaultMessage": "(可选 - instructions 或 prompt 至少填一项)"
},
"recipeFormFields.promptPlaceholder": {
- "defaultMessage": "配方启动时预填的提示词"
+ "defaultMessage": "工作流启动时预填的提示词"
},
"recipeFormFields.responseJsonSchema": {
"defaultMessage": "响应 JSON Schema"
@@ -3021,16 +3018,16 @@
"defaultMessage": "使用 JSON Schema 格式定义 AI 响应的期望结构"
},
"recipeFormFields.templateVarHint": {
- "defaultMessage": "使用 '{{parameter_name}}' 定义运行配方时可填入的参数。"
+ "defaultMessage": "使用 '{{parameter_name}}' 定义运行工作流时可填入的参数。"
},
"recipeFormFields.titleLabel": {
"defaultMessage": "标题"
},
"recipeFormFields.titlePlaceholder": {
- "defaultMessage": "配方标题"
+ "defaultMessage": "工作流标题"
},
"recipeHeader.recipeLabel": {
- "defaultMessage": "配方"
+ "defaultMessage": "工作流"
},
"recipeModelSelector.backToModelList": {
"defaultMessage": "返回模型列表"
@@ -3069,7 +3066,7 @@
"defaultMessage": "使用默认提供商"
},
"recipeNameField.defaultLabel": {
- "defaultMessage": "配方名称"
+ "defaultMessage": "工作流名称"
},
"recipeNameField.formatHint": {
"defaultMessage": "将自动格式化(小写字母,空格转为短横线)"
@@ -3081,19 +3078,19 @@
"defaultMessage": "描述:"
},
"recipeWarningModal.firstTimeDescription": {
- "defaultMessage": "你即将执行一个从未运行过的配方。"
+ "defaultMessage": "你即将执行一个从未运行过的工作流。"
},
"recipeWarningModal.hiddenCharsWarning": {
- "defaultMessage": "此配方包含隐藏字符,为了你的安全这些字符会被忽略,因为它们可能被用于恶意目的。"
+ "defaultMessage": "此工作流包含隐藏字符,为了你的安全这些字符会被忽略,因为它们可能被用于恶意目的。"
},
"recipeWarningModal.instructionsLabel": {
"defaultMessage": "指令:"
},
"recipeWarningModal.newRecipeWarningTitle": {
- "defaultMessage": "⚠️ 新配方警告"
+ "defaultMessage": "⚠️ 新工作流警告"
},
"recipeWarningModal.recipePreview": {
- "defaultMessage": "配方预览:"
+ "defaultMessage": "工作流预览:"
},
"recipeWarningModal.securityWarningTitle": {
"defaultMessage": "⚠️ 安全警告"
@@ -3105,7 +3102,7 @@
"defaultMessage": "信任并执行"
},
"recipeWarningModal.trustSource": {
- "defaultMessage": "只有在你信任此配方来源的情况下才应继续。"
+ "defaultMessage": "只有在你信任此工作流来源的情况下才应继续。"
},
"recipesView.addSchedule": {
"defaultMessage": "添加计划"
@@ -3135,31 +3132,31 @@
"defaultMessage": "复制 YAML"
},
"recipesView.copyYamlFailedMsg": {
- "defaultMessage": "复制配方 YAML 到剪贴板失败"
+ "defaultMessage": "复制工作流 YAML 到剪贴板失败"
},
"recipesView.createRecipe": {
- "defaultMessage": "创建配方"
+ "defaultMessage": "创建工作流"
},
"recipesView.deeplinkCopiedMsg": {
- "defaultMessage": "配方深层链接已复制到剪贴板"
+ "defaultMessage": "工作流深层链接已复制到剪贴板"
},
"recipesView.deeplinkCopiedTitle": {
"defaultMessage": "深层链接已复制"
},
"recipesView.deleteRecipe": {
- "defaultMessage": "删除配方"
+ "defaultMessage": "删除工作流"
},
"recipesView.deleteRecipeConfirm": {
"defaultMessage": "确定要删除“{title}”吗?"
},
"recipesView.deleteRecipeDetail": {
- "defaultMessage": "配方文件将被删除。"
+ "defaultMessage": "工作流文件将被删除。"
},
"recipesView.deleteRecipeTitle": {
- "defaultMessage": "删除配方"
+ "defaultMessage": "删除工作流"
},
"recipesView.editRecipe": {
- "defaultMessage": "编辑配方"
+ "defaultMessage": "编辑工作流"
},
"recipesView.editSchedule": {
"defaultMessage": "编辑计划"
@@ -3168,46 +3165,46 @@
"defaultMessage": "编辑斜杠命令"
},
"recipesView.errorLoadingRecipes": {
- "defaultMessage": "加载配方出错"
+ "defaultMessage": "加载工作流出错"
},
"recipesView.exportFailedMsg": {
- "defaultMessage": "导出配方到文件失败"
+ "defaultMessage": "导出工作流到文件失败"
},
"recipesView.exportFailedTitle": {
"defaultMessage": "导出失败"
},
"recipesView.exportRecipeDialogTitle": {
- "defaultMessage": "导出配方"
+ "defaultMessage": "导出工作流"
},
"recipesView.exportToFile": {
"defaultMessage": "导出到文件"
},
"recipesView.noMatchingRecipes": {
- "defaultMessage": "未找到匹配的配方"
+ "defaultMessage": "未找到匹配的工作流"
},
"recipesView.noSavedRecipes": {
- "defaultMessage": "暂无已保存的配方"
+ "defaultMessage": "暂无已保存的工作流"
},
"recipesView.noSavedRecipesDescription": {
- "defaultMessage": "从聊天中保存的配方会显示在这里。"
+ "defaultMessage": "从聊天中保存的工作流会显示在这里。"
},
"recipesView.openInNewWindow": {
"defaultMessage": "在新窗口中打开"
},
"recipesView.recipeDeletedSuccess": {
- "defaultMessage": "配方删除成功"
+ "defaultMessage": "工作流删除成功"
},
"recipesView.recipeExportedMsg": {
- "defaultMessage": "配方已保存到 {filePath}"
+ "defaultMessage": "工作流已保存到 {filePath}"
},
"recipesView.recipeExportedTitle": {
- "defaultMessage": "配方已导出"
+ "defaultMessage": "工作流已导出"
},
"recipesView.recipesDescription": {
- "defaultMessage": "查看并管理已保存的配方,以快速用预置配置开启新会话。按 {shortcut} 搜索。"
+ "defaultMessage": "查看并管理已保存的工作流,以快速用预置配置开启新会话。按 {shortcut} 搜索。"
},
"recipesView.recipesTitle": {
- "defaultMessage": "配方"
+ "defaultMessage": "工作流"
},
"recipesView.remove": {
"defaultMessage": "移除"
@@ -3225,37 +3222,37 @@
"defaultMessage": "{action}计划"
},
"recipesView.scheduleRemovedMsg": {
- "defaultMessage": "配方将不再自动运行"
+ "defaultMessage": "工作流将不再自动运行"
},
"recipesView.scheduleRemovedTitle": {
"defaultMessage": "计划已移除"
},
"recipesView.scheduleSavedMsg": {
- "defaultMessage": "配方将按 {schedule} 运行"
+ "defaultMessage": "工作流将按 {schedule} 运行"
},
"recipesView.scheduleSavedTitle": {
"defaultMessage": "计划已保存"
},
"recipesView.searchRecipesPlaceholder": {
- "defaultMessage": "搜索配方…"
+ "defaultMessage": "搜索工作流…"
},
"recipesView.shareRecipe": {
- "defaultMessage": "分享配方"
+ "defaultMessage": "分享工作流"
},
"recipesView.slashCommandDescription": {
- "defaultMessage": "设置斜杠命令,以便在任何聊天中快速运行此配方"
+ "defaultMessage": "设置斜杠命令,以便在任何聊天中快速运行此工作流"
},
"recipesView.slashCommandPlaceholder": {
"defaultMessage": "command-name"
},
"recipesView.slashCommandRemovedMsg": {
- "defaultMessage": "配方的斜杠命令已被移除"
+ "defaultMessage": "工作流的斜杠命令已被移除"
},
"recipesView.slashCommandRemovedTitle": {
"defaultMessage": "斜杠命令已移除"
},
"recipesView.slashCommandSavedMsg": {
- "defaultMessage": "使用 /{command} 运行此配方"
+ "defaultMessage": "使用 /{command} 运行此工作流"
},
"recipesView.slashCommandSavedTitle": {
"defaultMessage": "斜杠命令已保存"
@@ -3264,16 +3261,16 @@
"defaultMessage": "斜杠命令"
},
"recipesView.slashCommandUsageHint": {
- "defaultMessage": "在任何聊天中使用 /{command} 即可运行此配方"
+ "defaultMessage": "在任何聊天中使用 /{command} 即可运行此工作流"
},
"recipesView.tryAgain": {
"defaultMessage": "重试"
},
"recipesView.useRecipe": {
- "defaultMessage": "使用配方"
+ "defaultMessage": "使用工作流"
},
"recipesView.yamlCopiedMsg": {
- "defaultMessage": "配方 YAML 已复制到剪贴板"
+ "defaultMessage": "工作流 YAML 已复制到剪贴板"
},
"recipesView.yamlCopiedTitle": {
"defaultMessage": "YAML 已复制"
@@ -3402,7 +3399,7 @@
"defaultMessage": "近期会话"
},
"scheduleDetailView.recipeSource": {
- "defaultMessage": "配方来源:"
+ "defaultMessage": "工作流来源:"
},
"scheduleDetailView.runScheduleError": {
"defaultMessage": "运行计划错误"
@@ -3483,7 +3480,7 @@
"defaultMessage": "编辑计划"
},
"scheduleModal.failedParseRecipe": {
- "defaultMessage": "从文件解析配方失败。"
+ "defaultMessage": "从文件解析工作流失败。"
},
"scheduleModal.failedReadFile": {
"defaultMessage": "读取所选文件失败。"
@@ -3501,13 +3498,13 @@
"defaultMessage": "例如:daily-summary-job"
},
"scheduleModal.provideValidRecipe": {
- "defaultMessage": "请提供有效的配方来源。"
+ "defaultMessage": "请提供有效的工作流来源。"
},
"scheduleModal.recipeDescription": {
"defaultMessage": "描述:{description}"
},
"scheduleModal.recipeParsed": {
- "defaultMessage": "配方解析成功"
+ "defaultMessage": "工作流解析成功"
},
"scheduleModal.recipeTitle": {
"defaultMessage": "标题:{title}"
@@ -3540,7 +3537,7 @@
"defaultMessage": "创建计划"
},
"schedulesView.description": {
- "defaultMessage": "创建和管理定时任务,在指定时间自动运行配方。"
+ "defaultMessage": "创建和管理定时任务,在指定时间自动运行工作流。"
},
"schedulesView.edit": {
"defaultMessage": "编辑"
@@ -4094,9 +4091,6 @@
"settingsView.tabKeyboard": {
"defaultMessage": "键盘"
},
- "settingsView.tabLocalInference": {
- "defaultMessage": "本地推理"
- },
"settingsView.tabModels": {
"defaultMessage": "模型"
},
@@ -4197,25 +4191,25 @@
"defaultMessage": "添加已有"
},
"subRecipeEditor.createNew": {
- "defaultMessage": "创建新子配方"
+ "defaultMessage": "创建新子工作流"
},
"subRecipeEditor.deleteSubrecipe": {
- "defaultMessage": "删除子配方 {name}"
+ "defaultMessage": "删除子工作流 {name}"
},
"subRecipeEditor.description": {
- "defaultMessage": "子配方是可在执行过程中作为工具调用的配方。它们支持多步工作流和可复用组件。"
+ "defaultMessage": "子工作流是可在执行过程中作为工具调用的工作流。它们支持多步工作流和可复用组件。"
},
"subRecipeEditor.duplicateName": {
"defaultMessage": "名称重复"
},
"subRecipeEditor.duplicateNameMsg": {
- "defaultMessage": "已存在名为“{name}”的子配方,请使用唯一名称。"
+ "defaultMessage": "已存在名为“{name}”的子工作流,请使用唯一名称。"
},
"subRecipeEditor.editSubrecipe": {
- "defaultMessage": "编辑子配方 {name}"
+ "defaultMessage": "编辑子工作流 {name}"
},
"subRecipeEditor.label": {
- "defaultMessage": "子配方"
+ "defaultMessage": "子工作流"
},
"subRecipeEditor.preconfiguredValues": {
"defaultMessage": "预设参数值:"
@@ -4224,7 +4218,7 @@
"defaultMessage": "按顺序"
},
"subRecipeModal.addTitle": {
- "defaultMessage": "添加子配方"
+ "defaultMessage": "添加子工作流"
},
"subRecipeModal.apply": {
"defaultMessage": "应用"
@@ -4236,16 +4230,16 @@
"defaultMessage": "取消"
},
"subRecipeModal.closeModal": {
- "defaultMessage": "关闭子配方弹窗"
+ "defaultMessage": "关闭子工作流弹窗"
},
"subRecipeModal.configureTitle": {
- "defaultMessage": "配置子配方"
+ "defaultMessage": "配置子工作流"
},
"subRecipeModal.descriptionLabel": {
"defaultMessage": "描述"
},
"subRecipeModal.descriptionPlaceholder": {
- "defaultMessage": "此子配方功能的可选描述…"
+ "defaultMessage": "此子工作流功能的可选描述…"
},
"subRecipeModal.invalidFile": {
"defaultMessage": "文件无效"
@@ -4263,7 +4257,7 @@
"defaultMessage": "例如:security_scan"
},
"subRecipeModal.pathHint": {
- "defaultMessage": "浏览现有配方文件,或手动输入路径"
+ "defaultMessage": "浏览现有工作流文件,或手动输入路径"
},
"subRecipeModal.pathLabel": {
"defaultMessage": "路径"
@@ -4275,16 +4269,16 @@
"defaultMessage": "预设参数值"
},
"subRecipeModal.preconfiguredValuesHint": {
- "defaultMessage": "始终传给子配方的可选参数值"
+ "defaultMessage": "始终传给子工作流的可选参数值"
},
"subRecipeModal.sequentialHint": {
- "defaultMessage": "(强制多个子配方实例按顺序执行)"
+ "defaultMessage": "(强制多个子工作流实例按顺序执行)"
},
"subRecipeModal.sequentialLabel": {
"defaultMessage": "重复调用时按顺序执行"
},
"subRecipeModal.subtitle": {
- "defaultMessage": "配置一个可在配方执行过程中作为工具调用的子配方"
+ "defaultMessage": "配置一个可在工作流执行过程中作为工具调用的子工作流"
},
"switchModelModal.backToModelList": {
"defaultMessage": "返回模型列表"
diff --git a/ui/desktop/src/recipe/index.ts b/ui/desktop/src/recipe/index.ts
index 031eb2db96c2..4d52ad140f72 100644
--- a/ui/desktop/src/recipe/index.ts
+++ b/ui/desktop/src/recipe/index.ts
@@ -33,7 +33,6 @@ export async function encodeRecipe(recipe: Recipe): Promise
{
}
export async function decodeRecipe(deeplink: string): Promise {
-
try {
const response = await apiDecodeRecipe({
body: { deeplink },
@@ -130,16 +129,16 @@ export async function parseDeeplink(deeplink: string): Promise {
const recipeEncoded = cleanLink.replace('goose://recipe?config=', '');
if (!recipeEncoded) {
- throw new Error('No recipe configuration found in deeplink');
+ throw new Error('No workflow configuration found in deeplink');
}
const recipe = await decodeRecipe(recipeEncoded);
if (!recipe.title || !recipe.description) {
- throw new Error('Recipe is missing required fields (title, description)');
+ throw new Error('Workflow is missing required fields (title, description)');
}
if (!recipe.instructions && !recipe.prompt) {
- throw new Error('Recipe must have either instructions or prompt');
+ throw new Error('Workflow must have either instructions or prompt');
}
return recipe;
diff --git a/ui/desktop/src/recipe/validation.ts b/ui/desktop/src/recipe/validation.ts
index 431cb4ce5b03..32d731e9d731 100644
--- a/ui/desktop/src/recipe/validation.ts
+++ b/ui/desktop/src/recipe/validation.ts
@@ -129,8 +129,8 @@ export function getRecipeJsonSchema() {
return {
$schema: 'http://json-schema.org/draft-07/schema#',
type: 'object',
- title: 'Recipe',
- description: 'Recipe schema not found in OpenAPI specification',
+ title: 'Workflow',
+ description: 'Workflow schema not found in OpenAPI specification',
required: ['title', 'description'],
properties: {
title: { type: 'string' },
@@ -149,9 +149,9 @@ export function getRecipeJsonSchema() {
return {
$schema: 'http://json-schema.org/draft-07/schema#',
...resolvedSchema,
- title: resolvedSchema.title || 'Recipe',
+ title: resolvedSchema.title || 'Workflow',
description:
resolvedSchema.description ||
- 'A Recipe represents a personalized, user-generated agent configuration that defines specific behaviors and capabilities within the Goose system.',
+ 'A Workflow represents a personalized, user-generated agent configuration that defines specific behaviors and capabilities within ApeMind Agent.',
};
}