Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/de/platform/member/preferences.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ Die Zeile **Abmelden** unten im Profilmenü bestätigt mit einem Dialog, bevor s

## Wo das hingehört

Einstellungen sind die Linie zwischen dir und dem Rest der Organisation. Der Org-Admin setzt die Standardwerte — die Passwort-Richtlinie, welche Modelle erlaubt sind, welche Governance für einen Chat gilt — und deine Einstellungen überschreiben sie dort, wo Tale es zulässt. Eine persönliche Seite steht abseits dieses Sets: [Umgebungsvariablen & Geheimnisse](/de/platform/member/environment) hält Variablen und Anmeldedaten, die innerhalb einer einzelnen Organisation auf dich begrenzt sind, statt dir über Organisationen hinweg zu folgen — der Ort für den Provider-Schlüssel, den ein BYO-Agent benutzt. Die nächste Lektüre, die sich lohnt, ist [Mitglieds-Übersicht](/de/platform/member/overview) für die Karte des restlichen Mitglieder-Bereichs, oder [Als App installieren](/de/platform/member/install-as-app), wenn du willst, dass Tale in deinem Dock statt in deinen Browser-Tabs lebt.
Einstellungen sind die Linie zwischen dir und dem Rest der Organisation. Der Org-Admin setzt die Standardwerte — die Passwort-Richtlinie, welche Modelle erlaubt sind, welche Governance für einen Chat gilt — und deine Einstellungen überschreiben sie dort, wo Tale es zulässt. Die nächste Lektüre, die sich lohnt, ist [Mitglieds-Übersicht](/de/platform/member/overview) für die Karte des restlichen Mitglieder-Bereichs, oder [Als App installieren](/de/platform/member/install-as-app), wenn du willst, dass Tale in deinem Dock statt in deinen Browser-Tabs lebt.
2 changes: 1 addition & 1 deletion docs/en/platform/member/preferences.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ The **Log out** row at the bottom of the profile menu confirms with a dialog bef

## Where this fits

Preferences are the line between you and the rest of the org. The org Admin sets the defaults — the password policy, which models are allowed, what governance applies to a chat — and your preferences override them where Tale lets them. One personal page sits apart from this set: [Environment variables & secrets](/platform/member/environment) holds variables and credentials scoped to you within a single organisation rather than following you across them — the place to keep the provider key a bring-your-own agent uses. The next read worth queuing is [Member overview](/platform/member/overview) for the map of the rest of the Member surface, or [Install as app](/platform/member/install-as-app) if you want Tale to live in your dock rather than your browser tabs.
Preferences are the line between you and the rest of the org. The org Admin sets the defaults — the password policy, which models are allowed, what governance applies to a chat — and your preferences override them where Tale lets them. The next read worth queuing is [Member overview](/platform/member/overview) for the map of the rest of the Member surface, or [Install as app](/platform/member/install-as-app) if you want Tale to live in your dock rather than your browser tabs.
2 changes: 1 addition & 1 deletion docs/fr/platform/member/preferences.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ La ligne **Se déconnecter** en bas du menu de profil confirme via une boîte de

## Où cela s’inscrit

Les préférences sont la ligne entre toi et le reste de l’org. L’Administrateur de l’org pose les valeurs par défaut — la politique de mot de passe, les modèles autorisés, la gouvernance qui s’applique à un chat — et tes préférences les remplacent là où Tale le permet. Une page personnelle se tient à l’écart de cet ensemble : [Variables d’environnement et secrets](/fr/platform/member/environment) porte des variables et des identifiants cantonnés à toi au sein d’une seule organisation plutôt qu’ils ne te suivent d’une org à l’autre — l’endroit où garder la clé de fournisseur qu’utilise un agent BYO. La lecture suivante à mettre en file est [Vue d’ensemble Membre](/fr/platform/member/overview) pour la carte du reste de la surface Membre, ou [Installer en tant qu’app](/fr/platform/member/install-as-app) si tu veux que Tale vive dans ton dock plutôt que dans tes onglets de navigateur.
Les préférences sont la ligne entre toi et le reste de l’org. L’Administrateur de l’org pose les valeurs par défaut — la politique de mot de passe, les modèles autorisés, la gouvernance qui s’applique à un chat — et tes préférences les remplacent là où Tale le permet. La lecture suivante à mettre en file est [Vue d’ensemble Membre](/fr/platform/member/overview) pour la carte du reste de la surface Membre, ou [Installer en tant qu’app](/fr/platform/member/install-as-app) si tu veux que Tale vive dans ton dock plutôt que dans tes onglets de navigateur.
51 changes: 0 additions & 51 deletions services/platform/app/components/env/use-env-editor-controller.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ import { cn } from '@/lib/utils/cn';
* matched by asking whether a child CONTAINS a section;
* • a wrapper holding a section header plus its table: those children are
* not sections, so they get no line between them — the stray divider that
* appeared under Teams / Skills / Sandboxes / Branding / Trash and the
* environment page.
* appeared under Teams / Skills / Sandboxes / Branding / Trash.
*
* Dialogs and other children that render nothing where they sit never match
* either rule, so a page can no longer end on a divider with empty space.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ export function SettingsRail({
{ kind: 'leaf', labelKey: 'account', path: 'account' },
{ kind: 'leaf', labelKey: 'personalization', path: 'personalization' },
{ kind: 'leaf', labelKey: 'notifications', path: 'notifications' },
{ kind: 'leaf', labelKey: 'environment', path: 'environment' },
];
if (!showAccountTab) personal.shift();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import {
User,
Users,
UsersRound,
Variable,
type LucideIcon,
} from 'lucide-react';
import { useMemo } from 'react';
Expand Down Expand Up @@ -64,11 +63,6 @@ export function useSettingsMenuGroups(
icon: Bell,
path: 'notifications',
},
{
key: 'environment',
icon: Variable,
path: 'environment',
},
];

// Order mirrors the desktop rail: who we are (organization, teams,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,6 @@ describe('FeatureFlagsEditor', () => {
rules: [
{
scope: 'default',
webSearch: true,
codeExecution: false,
fileUpload: true,
maxContextTokens: 32768,
},
],
Expand All @@ -128,7 +125,49 @@ describe('FeatureFlagsEditor', () => {
render(<FeatureFlagsEditor organizationId="org_1" />);

expect(screen.getByText('default')).toBeInTheDocument();
expect(screen.getByText('\u2718')).toBeInTheDocument();
expect(screen.getByText(/32,768|32768/)).toBeInTheDocument();
});

// The webSearch / codeExecution / fileUpload toggles were retired — nothing
// ever enforced them. The rule dialog must not offer them, and a rule that
// still carries them from an older policy file must lose them on save.
describe('retired feature toggles', () => {
it('offers no toggle for web search, code execution, or file upload', async () => {
const { user } = render(<FeatureFlagsEditor organizationId="org_1" />);
await user.click(screen.getByRole('button', { name: /add rule/i }));

const dialog = screen.getByRole('dialog');
expect(dialog.querySelectorAll('[role="switch"]')).toHaveLength(0);
expect(screen.queryByText(/web search/i)).toBeNull();
expect(screen.queryByText(/code execution/i)).toBeNull();
expect(screen.queryByText(/file upload/i)).toBeNull();
});

it('drops the deprecated keys from a rule when it is saved', async () => {
setSectionOn([
{
scope: 'default',
webSearch: false,
codeExecution: false,
fileUpload: true,
maxContextTokens: 32768,
},
]);
const { user } = render(<FeatureFlagsEditor organizationId="org_1" />);
await user.click(screen.getByRole('button', { name: /edit rule 1/i }));
await user.click(screen.getByRole('button', { name: '8K' }));
await user.click(screen.getByRole('button', { name: /confirm/i }));

expect(saveMutateAsync).toHaveBeenCalledWith(
expect.objectContaining({
policyType: 'feature_flags',
config: {
enabled: true,
rules: [{ scope: 'default', maxContextTokens: 8192 }],
},
}),
);
});
});

it('renders add rule button', () => {
Expand Down Expand Up @@ -196,7 +235,7 @@ describe('FeatureFlagsEditor', () => {
// 3 placeholder rows in the body, each with the real column count.
const bodyRows = container.querySelectorAll('tbody tr');
expect(bodyRows).toHaveLength(3);
expect(bodyRows[0].querySelectorAll('td')).toHaveLength(7);
expect(bodyRows[0].querySelectorAll('td')).toHaveLength(4);
});
});

Expand Down Expand Up @@ -237,9 +276,10 @@ describe('FeatureFlagsEditor', () => {
expect(saveMutateAsync).toHaveBeenCalledWith(
expect.objectContaining({
policyType: 'feature_flags',
config: expect.objectContaining({
rules: [expect.objectContaining({ maxContextTokens: 8192 })],
}),
config: {
enabled: true,
rules: [{ scope: 'default', maxContextTokens: 8192 }],
},
}),
);
});
Expand Down
Loading
Loading