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
1 change: 0 additions & 1 deletion configs/platform/custom/governance/chat-filter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@ enabled: false
maskReplacement: '[BLOCKED]'
appliesTo:
- input
preferNonStreamingForFiltering: false
configVersion: 1
categories: []
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/claude-code/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -155,4 +155,3 @@ subscription:
kind: env
tokenVar: ANTHROPIC_AUTH_TOKEN
baseUrlVar: ANTHROPIC_BASE_URL
pinnedVersion: 2.1.173
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/codex/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,3 @@ exec:
CODEX_HOME: /agent/.runtime/home/.codex
managed:
TALE_GATEWAY_TOKEN: '${gateway.token}'
pinnedVersion: 0.142.5
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/cursor/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ capabilities:
# would silently drop. Declared off until the exec vocabulary carries a
# delivery channel for it.
mcp: false
pinnedVersion: 2026.03.20-44cb435
parser: cursor-jsonl
exec:
bin: agent
Expand Down
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/gemini/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,3 @@ exec:
subscription:
kind: staged-file
path: .runtime/home/.gemini/oauth_creds.json
pinnedVersion: 0.49.0
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/hermes/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,3 @@ subscription:
kind: env
tokenVar: OPENAI_API_KEY
baseUrlVar: OPENAI_BASE_URL
pinnedVersion: 0.18.0
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/openclaw/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -146,4 +146,3 @@ exec:
OPENCLAW_STATE_DIR: /agent/.runtime/home/.openclaw
managed:
TALE_GATEWAY_TOKEN: '${gateway.token}'
pinnedVersion: 2026.6.11
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/opencode/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,3 @@ exec:
bridgeEnv:
TALE_CONNECTORS_URL: '${bridgeUrl}'
TALE_CONNECTORS_TOKEN: '{env:TALE_GATEWAY_TOKEN}'
pinnedVersion: 1.17.3
1 change: 0 additions & 1 deletion configs/platform/system/harnesses/pi/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,3 @@ exec:
env:
managed:
TALE_GATEWAY_TOKEN: '${gateway.token}'
pinnedVersion: 0.80.3
4 changes: 0 additions & 4 deletions configs/platform/system/harnesses/qwen-code/harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,3 @@ exec:
OPENAI_BASE_URL: '${gateway.baseUrl}/openai/v1'
OPENAI_API_KEY: '${gateway.token}'
TALE_GATEWAY_TOKEN: '${gateway.token}'
# Pin chosen from the fork's release line at authoring time; the pin MUST be
# re-verified against the qwen-code releases before the sandbox image bakes
# the CLI in.
pinnedVersion: 0.10.3
2 changes: 1 addition & 1 deletion docs/de/platform/automations/catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Diese Seite behandelt, woher Automatisierungen kommen und was ein hochgeladenes

## Was die Liste zeigt

Jede Zeile ist eine Automatisierung: ihr Name, wie viele Versionen sie hat, und entweder die Live-Version oder **Nicht live**. Die Suche filtert die Liste. **Neue Automatisierung** sitzt in der Tabellenleiste wie auf den anderen Listen — **Aus einem Ziel**, **Leer (Trigger + Agent)** oder **Paket hochladen**. Das Zeilenmenü bietet **Löschen**, ohne den Editor zu öffnen. Die Org-Seite listet Automatisierungen auf Organisationsebene; eine Automatisierung, die zu einem Projekt gehört, lebt stattdessen im **Automatisierungen**-Tab dieses Projekts — wo eine Automatisierung erscheint, entscheidet ihr erster Save, und danach zieht sie nie um. Klicke eine Zeile an und du landest auf der Seite der Automatisierung, wie [Der Workflow-Editor](/de/platform/automations/editor) sie beschreibt.
Jede Zeile ist eine Automatisierung: ihr Name — samt Symbol und Katalog-Chips, wenn ihr Paket welche mitbringt —, wie viele Versionen sie hat, und entweder die Live-Version oder **Nicht live**. Die Suche filtert die Liste. **Neue Automatisierung** sitzt in der Tabellenleiste wie auf den anderen Listen — **Aus einem Ziel**, **Leer (Trigger + Agent)** oder **Paket hochladen**. Das Zeilenmenü bietet **Löschen**, ohne den Editor zu öffnen. Die Org-Seite listet Automatisierungen auf Organisationsebene; eine Automatisierung, die zu einem Projekt gehört, lebt stattdessen im **Automatisierungen**-Tab dieses Projekts — wo eine Automatisierung erscheint, entscheidet ihr erster Save, und danach zieht sie nie um. Klicke eine Zeile an und du landest auf der Seite der Automatisierung, wie [Der Workflow-Editor](/de/platform/automations/editor) sie beschreibt.

**Automatisierung erstellen** bietet zwei Wege, bei null zu starten: **Aus einem Ziel** übergibt deine Beschreibung dem Builder, der die Nodes für dich baut; **Leer (Trigger + Agent)** legt eine Ein-Agent-Automatisierung an, die du selbst verdrahtest — benenne sie, wähle das Modell des Agenten, und den Rest (Prompt, gewährte Tools und Secrets, Trigger) setzt du auf dem Canvas. Die mitgelieferten Packs brauchen gar keinen Installationsschritt: Jede Organisation wird bei ihrer Anlage damit ausgestattet, bereit zum Deployen.

Expand Down
2 changes: 1 addition & 1 deletion docs/de/self-hosted/configuration/environment-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ Optionale Schalter für Features, die standardmässig nicht aktiviert sind. Jede
| `TRUSTED_NAME_HEADER` | `Remote-Name` | Name des Request-Headers mit dem Anzeigenamen. Fehlt er, nimmt Tale den lokalen Teil der E-Mail-Adresse. |
| `TRUSTED_ROLE_HEADER` | `Remote-Role` | Name des Request-Headers mit der Organisationsrolle, mit der die Session handelt (`member`, wenn der Header fehlt). |
| `TRUSTED_TEAMS_HEADER` | `Remote-Teams` | Name des Request-Headers mit den Team-Zugehörigkeiten als kommagetrennte `id:name`-Einträge. Fehlt er, bleiben Teams unangetastet; ist er gesetzt, gilt die Liste des Proxys für die von ihm vergebenen Zugehörigkeiten (leer entzieht sie). |
| `FILE_EVENTS_ENABLED` | `false` | Aktiviert Datei-Watching-Events für die OneDrive-Sync-Connector. |
| `TALE_FILE_EVENTS` | `false` | Streamt Änderungen an Config-Dateien unter `TALE_CONFIG_DIR` an offene Browser-Tabs (`/events/file`): Eine auf der Platte bearbeitete Agent-, Skill- oder Branding-Datei erscheint ohne Reload. Im Dev-Compose an, in Produktion aus. |
| `TALE_DEPLOYMENT_CONFIG_ADMINS` | unset | Kommagetrennte E-Mail-Allowlist der Operatoren, die die Datenresidenz bearbeiten dürfen. Leer/nicht gesetzt = nur lesend für alle Admins. |

## RAG-Retrieval-Tuning
Expand Down
2 changes: 1 addition & 1 deletion docs/en/platform/automations/catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This page covers where automations come from and what an uploaded package may co

## What the list shows

Each row is one automation: its name, how many versions it has, and either the live version or **Not deployed**. Search filters the list. **New automation** sits in the table toolbar with the other list pages — **From a goal**, **Blank (trigger + agent)**, or **Upload package**. The row menu offers **Delete** without opening the editor. The org page lists organization-level automations; an automation that belongs to a project lives on that project's **Automations** tab instead — where an automation appears is decided once, by its first save, and never moves. Click a row to land on the automation's page and work with it as [The workflow editor](/platform/automations/editor) describes.
Each row is one automation: its name — with the glyph and the catalog chips its pack declared, when it came from one — how many versions it has, and either the live version or **Not deployed**. Search filters the list. **New automation** sits in the table toolbar with the other list pages — **From a goal**, **Blank (trigger + agent)**, or **Upload package**. The row menu offers **Delete** without opening the editor. The org page lists organization-level automations; an automation that belongs to a project lives on that project's **Automations** tab instead — where an automation appears is decided once, by its first save, and never moves. Click a row to land on the automation's page and work with it as [The workflow editor](/platform/automations/editor) describes.

**Create automation** offers two ways to start from scratch: **From a goal** hands your description to the builder, which authors the nodes for you; **Blank (trigger + agent)** scaffolds a one-agent automation you wire yourself — name it, pick the agent's model, and the rest (the prompt, the granted tools and secrets, the trigger) is yours to set on the canvas. The shipped packs need no install step at all: every organization is seeded with them at creation, ready to deploy.

Expand Down
2 changes: 1 addition & 1 deletion docs/en/self-hosted/configuration/environment-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ Optional toggles for features not enabled by default. Each flag turns one featur
| `TRUSTED_NAME_HEADER` | `Remote-Name` | Name of the request header carrying the display name. Falls back to the local part of the email. |
| `TRUSTED_ROLE_HEADER` | `Remote-Role` | Name of the request header carrying the organization role the session acts with (`member` when the header is absent). |
| `TRUSTED_TEAMS_HEADER` | `Remote-Teams` | Name of the request header carrying team memberships as comma-separated `id:name` entries. Absent = teams untouched; present = the proxy's list is authoritative for the memberships it granted (empty revokes them). |
| `FILE_EVENTS_ENABLED` | `false` | Enables file-watching events for the OneDrive-sync connector. |
| `TALE_FILE_EVENTS` | `false` | Streams config-file changes under `TALE_CONFIG_DIR` to open browser tabs (`/events/file`), so an agent, skill, or branding file edited on disk shows up without a reload. On in the dev compose, off in production. |
| `TALE_DEPLOYMENT_CONFIG_ADMINS` | unset | Comma-separated email allowlist of operators allowed to edit deployment data residency. Empty/unset = read-only for all admins. |

## RAG retrieval tuning
Expand Down
2 changes: 1 addition & 1 deletion docs/fr/platform/automations/catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Cette page couvre la provenance des automatisations et ce qu’un paquet télév

## Ce que montre la liste

Chaque ligne est une automatisation : son nom, son nombre de versions, et soit la version en service, soit **Pas en service**. La recherche filtre la liste. **Nouvelle automatisation** se trouve dans la barre d’outils du tableau, comme sur les autres listes — **À partir d’un objectif**, **Vierge (trigger + agent)** ou **Téléverser un paquet**. Le menu de la ligne propose **Supprimer** sans ouvrir l’éditeur. La page de l’org liste les automatisations au niveau de l’organisation ; une automatisation qui appartient à un projet vit dans l’onglet **Automatisations** de ce projet — l’endroit où elle apparaît se décide une fois, à son premier enregistrement, et ne bouge plus. Clique une ligne pour arriver sur la page de l’automatisation, que décrit [L’éditeur de workflow](/fr/platform/automations/editor).
Chaque ligne est une automatisation : son nom — avec l’icône et les puces de catalogue que son paquet déclare, s’il en déclare —, son nombre de versions, et soit la version en service, soit **Pas en service**. La recherche filtre la liste. **Nouvelle automatisation** se trouve dans la barre d’outils du tableau, comme sur les autres listes — **À partir d’un objectif**, **Vierge (trigger + agent)** ou **Téléverser un paquet**. Le menu de la ligne propose **Supprimer** sans ouvrir l’éditeur. La page de l’org liste les automatisations au niveau de l’organisation ; une automatisation qui appartient à un projet vit dans l’onglet **Automatisations** de ce projet — l’endroit où elle apparaît se décide une fois, à son premier enregistrement, et ne bouge plus. Clique une ligne pour arriver sur la page de l’automatisation, que décrit [L’éditeur de workflow](/fr/platform/automations/editor).

**Créer une automatisation** propose deux façons de partir de zéro : **À partir d’un objectif** confie ta description au builder, qui construit les nœuds pour toi ; **Vierge (trigger + agent)** échafaude une automatisation à un seul agent que tu câbles toi-même — nomme-la, choisis le modèle de l’agent, et le reste (le prompt, les outils et secrets accordés, le trigger) est à toi de le poser sur le canvas. Les packs livrés ne demandent aucune installation : chaque organisation en est équipée à sa création, prêts à déployer.

Expand Down
2 changes: 1 addition & 1 deletion docs/fr/self-hosted/configuration/environment-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ Bascules optionnelles pour des fonctionnalités non activées par défaut. Chaqu
| `TRUSTED_NAME_HEADER` | `Remote-Name` | Nom de l'en-tête de requête qui porte le nom affiché. S'il manque, Tale prend la partie locale de l'e-mail. |
| `TRUSTED_ROLE_HEADER` | `Remote-Role` | Nom de l'en-tête de requête qui porte le rôle d'organisation avec lequel la session agit (`member` si l'en-tête manque). |
| `TRUSTED_TEAMS_HEADER` | `Remote-Teams` | Nom de l'en-tête de requête qui porte les appartenances aux équipes, en entrées `id:name` séparées par des virgules. Absent, les équipes ne bougent pas ; présent, la liste du proxy fait foi pour les appartenances qu'il a accordées (vide les révoque). |
| `FILE_EVENTS_ENABLED` | `false` | Active les événements de surveillance de fichiers pour le connector OneDrive-sync. |
| `TALE_FILE_EVENTS` | `false` | Diffuse les changements des fichiers de config sous `TALE_CONFIG_DIR` aux onglets ouverts (`/events/file`) : un fichier d’agent, de skill ou de branding modifié sur disque apparaît sans recharger. Actif dans le compose de dev, inactif en production. |
| `TALE_DEPLOYMENT_CONFIG_ADMINS` | non défini | Allowlist de courriels (séparés par des virgules) des opérateurs autorisés à modifier la résidence des données du déploiement. Vide/non défini = lecture seule pour tous les admins. |

## Réglage du retrieval RAG
Expand Down
9 changes: 1 addition & 8 deletions knip.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,22 +119,16 @@ export default {
'lib/pii/**',
'lib/connectors/natives/**',
// Shared contract layer: types declared for the parked consumers
// above (schemas, platform run/render vocabulary, provider catalog
// shapes). Same debt, same exit.
// above (schemas, provider catalog shapes). Same debt, same exit.
'lib/shared/schemas/skills.ts',
'lib/shared/config/registry.ts',
'lib/shared/constants/system-message-tags.ts',
'lib/shared/file-types.ts',
'lib/shared/metrics-window.ts',
'lib/shared/platform/**',
'lib/shared/providers/attribution.ts',
'lib/shared/schemas/agents.ts',
'lib/shared/schemas/enterprise_sso.ts',
'lib/shared/schemas/governance.ts',
'lib/shared/schemas/connectors.ts',
'lib/shared/schemas/pii.ts',
'lib/shared/schemas/providers.ts',
'lib/shared/text-matching/**',
// E2E helper for the parked chat specs.
'tests/e2e/helpers/chat.ts',
],
Expand Down Expand Up @@ -164,7 +158,6 @@ export default {
'@types/seedrandom',
'@types/turndown',
'bcryptjs',
'chokidar',
'cron-parser',
'diff',
'hast-util-to-html',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ let automationsData:
latest: number;
projectIds: string[];
deployedVersion?: number;
presentation?: unknown;
}>
| undefined;
vi.mock('../hooks/queries', () => ({
Expand Down Expand Up @@ -139,6 +140,41 @@ describe('AutomationsList', () => {
});
});

describe('AutomationsList presentation', () => {
it('shows the pack s declared glyph and catalog chips beside the name', () => {
automationsData = [
{
name: 'gmail/triage-inbox',
latest: 1,
projectIds: [],
presentation: {
name: 'Triage the Gmail inbox',
icon: 'mail',
labels: ['Email', 'Gmail'],
},
},
];
const { container } = render(<AutomationsList organizationId="org-1" />);

expect(screen.getByText('Triage the Gmail inbox')).toBeInTheDocument();
expect(screen.getByText('Email')).toBeInTheDocument();
expect(screen.getByText('Gmail')).toBeInTheDocument();
// The bundled lucide set resolves offline: the declared glyph renders as
// an Iconify svg, not the neutral fallback.
expect(container.querySelector('svg.iconify--lucide')).not.toBeNull();
expect(container.querySelector('svg.lucide-sparkles')).toBeNull();
});

it('falls back to the neutral glyph and no chips without a presentation', () => {
automationsData = [{ name: 'weekly-report', latest: 1, projectIds: [] }];
const { container } = render(<AutomationsList organizationId="org-1" />);

expect(screen.getByText('Weekly report')).toBeInTheDocument();
expect(container.querySelector('svg.iconify--lucide')).toBeNull();
expect(container.querySelector('svg.lucide-sparkles')).not.toBeNull();
});
});

describe('AutomationsList create menu', () => {
it('offers the create lanes from the toolbar button when the list is empty', async () => {
automationsData = [];
Expand Down
Loading
Loading