From 4f18b4292ce255e8978755ba84e1b00b09f57f3c Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sun, 12 Apr 2026 00:21:23 +0000 Subject: [PATCH] chore(i18n): refresh pl translations --- docs/pl/channels/msteams.md | 523 +++++++++++++++++---------- docs/pl/plugins/sdk-agent-harness.md | 127 ++++--- docs/pl/providers/openai.md | 235 ++++++------ 3 files changed, 539 insertions(+), 346 deletions(-) diff --git a/docs/pl/channels/msteams.md b/docs/pl/channels/msteams.md index 8b0ed8524..2b481e9db 100644 --- a/docs/pl/channels/msteams.md +++ b/docs/pl/channels/msteams.md @@ -1,13 +1,13 @@ --- read_when: - Praca nad funkcjami kanału Microsoft Teams -summary: Stan obsługi, możliwości i konfiguracja bota Microsoft Teams +summary: Stan obsługi bota Microsoft Teams, możliwości i konfiguracja title: Microsoft Teams x-i18n: - generated_at: "2026-04-05T13:47:23Z" + generated_at: "2026-04-12T00:18:56Z" model: gpt-5.4 provider: openai - source_hash: 99fc6e136893ec65dc85d3bc0c0d92134069a2f3b8cb4fcf66c14674399b3eaf + source_hash: 3e6841a618fb030e4c2029b3652d45dedd516392e2ae17309ff46b93648ffb79 source_path: channels/msteams.md workflow: 15 --- @@ -16,15 +16,16 @@ x-i18n: > „Porzućcie wszelką nadzieję, wy, którzy tu wchodzicie.” -Zaktualizowano: 2026-01-21 +Zaktualizowano: 2026-03-25 -Stan: obsługiwane są tekst + załączniki DM; wysyłanie plików do kanałów/grup wymaga `sharePointSiteId` + uprawnień Graph (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)). Ankiety są wysyłane przez Adaptive Cards. Akcje wiadomości udostępniają jawne `upload-file` dla wysyłek rozpoczynających się od pliku. +Stan: obsługiwane są tekst oraz załączniki DM; wysyłanie plików na kanałach/w grupach wymaga `sharePointSiteId` i uprawnień Graph (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)). Ankiety są wysyłane przez Adaptive Cards. Akcje wiadomości udostępniają jawne `upload-file` dla wysyłek rozpoczynających się od pliku. ## Bundled plugin -Microsoft Teams jest dostarczany jako bundled plugin w bieżących wydaniach OpenClaw, więc w standardowym spakowanym buildzie nie jest wymagana osobna instalacja. +Microsoft Teams jest dostarczany jako bundled plugin w bieżących wydaniach OpenClaw, więc +w standardowej paczkowanej kompilacji nie jest wymagana osobna instalacja. -Jeśli używasz starszego builda lub niestandardowej instalacji bez bundled Teams, +Jeśli używasz starszej kompilacji lub niestandardowej instalacji bez dołączonego Teams, zainstaluj go ręcznie: ```bash @@ -37,19 +38,19 @@ Lokalny checkout (podczas uruchamiania z repozytorium git): openclaw plugins install ./path/to/local/msteams-plugin ``` -Szczegóły: [Plugins](/tools/plugin) +Szczegóły: [Plugins](/pl/tools/plugin) ## Szybka konfiguracja (dla początkujących) 1. Upewnij się, że plugin Microsoft Teams jest dostępny. - - Bieżące spakowane wydania OpenClaw już go zawierają. + - Bieżące paczkowane wydania OpenClaw zawierają go już domyślnie. - Starsze/niestandardowe instalacje mogą dodać go ręcznie za pomocą powyższych poleceń. 2. Utwórz **Azure Bot** (App ID + client secret + tenant ID). 3. Skonfiguruj OpenClaw przy użyciu tych poświadczeń. 4. Udostępnij `/api/messages` (domyślnie port 3978) przez publiczny URL lub tunel. 5. Zainstaluj pakiet aplikacji Teams i uruchom gateway. -Minimalna konfiguracja: +Minimalna konfiguracja (client secret): ```json5 { @@ -65,19 +66,21 @@ Minimalna konfiguracja: } ``` -Uwaga: czaty grupowe są domyślnie blokowane (`channels.msteams.groupPolicy: "allowlist"`). Aby zezwolić na odpowiedzi w grupach, ustaw `channels.msteams.groupAllowFrom` (lub użyj `groupPolicy: "open"`, aby zezwolić każdemu członkowi, z bramkowaniem wzmianką). +W środowiskach produkcyjnych rozważ użycie [uwierzytelniania federacyjnego](#federated-authentication-certificate--managed-identity) (certyfikat lub managed identity) zamiast client secret. + +Uwaga: czaty grupowe są domyślnie blokowane (`channels.msteams.groupPolicy: "allowlist"`). Aby zezwolić na odpowiedzi w grupach, ustaw `channels.msteams.groupAllowFrom` (lub użyj `groupPolicy: "open"`, aby zezwolić dowolnemu członkowi, z bramkowaniem wzmianką). ## Cele -- Rozmawiać z OpenClaw przez DM-y Teams, czaty grupowe lub kanały. -- Zachować deterministyczne routowanie: odpowiedzi zawsze wracają do kanału, z którego przyszły. -- Domyślnie stosować bezpieczne zachowanie kanału (wzmianki wymagane, chyba że skonfigurowano inaczej). +- Rozmawiaj z OpenClaw przez Teams DM, czaty grupowe lub kanały. +- Zachowaj deterministyczny routing: odpowiedzi zawsze wracają do kanału, z którego przyszły. +- Domyślnie stosuj bezpieczne zachowanie kanałów (wzmianki są wymagane, chyba że skonfigurowano inaczej). ## Zapisy konfiguracji Domyślnie Microsoft Teams może zapisywać aktualizacje konfiguracji wywołane przez `/config set|unset` (wymaga `commands.config: true`). -Wyłącz przez: +Wyłącz za pomocą: ```json5 { @@ -85,20 +88,20 @@ Wyłącz przez: } ``` -## Kontrola dostępu (DM-y + grupy) +## Kontrola dostępu (DM + grupy) -**Dostęp DM** +**Dostęp do DM** -- Domyślnie: `channels.msteams.dmPolicy = "pairing"`. Nieznani nadawcy są ignorowani do momentu zatwierdzenia. +- Domyślnie: `channels.msteams.dmPolicy = "pairing"`. Nadawcy nieznani systemowi są ignorowani do momentu zatwierdzenia. - `channels.msteams.allowFrom` powinno używać stabilnych identyfikatorów obiektów AAD. -- UPN-y/nazwy wyświetlane są zmienne; bezpośrednie dopasowanie jest domyślnie wyłączone i włączane tylko przez `channels.msteams.dangerouslyAllowNameMatching: true`. -- Kreator może rozwiązywać nazwy na identyfikatory przez Microsoft Graph, jeśli poświadczenia na to pozwalają. +- UPN-y/nazwy wyświetlane są zmienne; bezpośrednie dopasowywanie jest domyślnie wyłączone i włączane tylko przez `channels.msteams.dangerouslyAllowNameMatching: true`. +- Kreator może rozwiązywać nazwy do identyfikatorów przez Microsoft Graph, jeśli poświadczenia na to pozwalają. -**Dostęp grupowy** +**Dostęp do grup** -- Domyślnie: `channels.msteams.groupPolicy = "allowlist"` (zablokowane, dopóki nie dodasz `groupAllowFrom`). Użyj `channels.defaults.groupPolicy`, aby nadpisać wartość domyślną, gdy nie jest ustawiona. -- `channels.msteams.groupAllowFrom` kontroluje, którzy nadawcy mogą wywoływać działanie w czatach grupowych/kanałach (zapasowo używa `channels.msteams.allowFrom`). -- Ustaw `groupPolicy: "open"`, aby zezwolić każdemu członkowi (domyślnie nadal z bramkowaniem wzmianką). +- Domyślnie: `channels.msteams.groupPolicy = "allowlist"` (zablokowane, dopóki nie dodasz `groupAllowFrom`). Użyj `channels.defaults.groupPolicy`, aby zastąpić domyślną wartość, gdy nie jest ustawiona. +- `channels.msteams.groupAllowFrom` określa, którzy nadawcy mogą wyzwalać działania w czatach grupowych/kanałach (z fallbackiem do `channels.msteams.allowFrom`). +- Ustaw `groupPolicy: "open"`, aby zezwolić dowolnemu członkowi (nadal z domyślnym bramkowaniem wzmianką). - Aby nie zezwalać na **żadne kanały**, ustaw `channels.msteams.groupPolicy: "disabled"`. Przykład: @@ -114,14 +117,14 @@ Przykład: } ``` -**Teams + allowlista kanałów** +**Teams + lista dozwolonych kanałów** - Ogranicz odpowiedzi w grupach/kanałach, podając zespoły i kanały w `channels.msteams.teams`. - Klucze powinny używać stabilnych identyfikatorów zespołów i identyfikatorów konwersacji kanałów. -- Gdy `groupPolicy="allowlist"` i obecna jest allowlista zespołów, akceptowane są tylko wymienione zespoły/kanały (z bramkowaniem wzmianką). +- Gdy `groupPolicy="allowlist"` i lista dozwolonych zespołów jest obecna, akceptowane są tylko wymienione zespoły/kanały (z bramkowaniem wzmianką). - Kreator konfiguracji akceptuje wpisy `Team/Channel` i zapisuje je za Ciebie. -- Przy uruchamianiu OpenClaw rozwiązuje nazwy zespołów/kanałów i użytkowników z allowlisty na identyfikatory (gdy pozwalają na to uprawnienia Graph) - i zapisuje mapowanie w logach; nierozwiązane nazwy zespołów/kanałów są zachowywane tak, jak zostały wpisane, ale domyślnie ignorowane przy routowaniu, chyba że włączono `channels.msteams.dangerouslyAllowNameMatching: true`. +- Przy uruchomieniu OpenClaw rozwiązuje nazwy zespołów/kanałów oraz nazwy na liście dozwolonych użytkowników do identyfikatorów (gdy pozwalają na to uprawnienia Graph) + i zapisuje mapowanie w logach; nierozwiązane nazwy zespołów/kanałów są zachowywane w podanej postaci, ale domyślnie ignorowane przy routingu, chyba że włączono `channels.msteams.dangerouslyAllowNameMatching: true`. Przykład: @@ -145,13 +148,13 @@ Przykład: ## Jak to działa 1. Upewnij się, że plugin Microsoft Teams jest dostępny. - - Bieżące spakowane wydania OpenClaw już go zawierają. + - Bieżące paczkowane wydania OpenClaw zawierają go już domyślnie. - Starsze/niestandardowe instalacje mogą dodać go ręcznie za pomocą powyższych poleceń. 2. Utwórz **Azure Bot** (App ID + secret + tenant ID). 3. Zbuduj **pakiet aplikacji Teams**, który odwołuje się do bota i zawiera poniższe uprawnienia RSC. -4. Prześlij/zainstaluj aplikację Teams w zespole (lub w zakresie osobistym dla DM-ów). +4. Prześlij/zainstaluj aplikację Teams w zespole (lub w zakresie osobistym dla DM). 5. Skonfiguruj `msteams` w `~/.openclaw/openclaw.json` (lub przez zmienne środowiskowe) i uruchom gateway. -6. Gateway domyślnie nasłuchuje ruchu webhook Bot Framework pod adresem `/api/messages`. +6. Gateway domyślnie nasłuchuje ruchu webhook Bot Framework na `/api/messages`. ## Konfiguracja Azure Bot (wymagania wstępne) @@ -162,16 +165,16 @@ Przed skonfigurowaniem OpenClaw musisz utworzyć zasób Azure Bot. 1. Przejdź do [Create Azure Bot](https://portal.azure.com/#create/Microsoft.AzureBot) 2. Wypełnij kartę **Basics**: - | Pole | Wartość | - | ------------------ | ------------------------------------------------------- | + | Pole | Wartość | + | ------------------ | -------------------------------------------------------- | | **Bot handle** | Nazwa Twojego bota, np. `openclaw-msteams` (musi być unikalna) | - | **Subscription** | Wybierz swoją subskrypcję Azure | - | **Resource group** | Utwórz nową lub użyj istniejącej | + | **Subscription** | Wybierz swoją subskrypcję Azure | + | **Resource group** | Utwórz nową lub użyj istniejącej | | **Pricing tier** | **Free** do developmentu/testów | - | **Type of App** | **Single Tenant** (zalecane — patrz uwaga poniżej) | - | **Creation type** | **Create new Microsoft App ID** | + | **Type of App** | **Single Tenant** (zalecane - zobacz uwagę poniżej) | + | **Creation type** | **Create new Microsoft App ID** | -> **Powiadomienie o wycofaniu:** Tworzenie nowych botów wielodostępnych zostało wycofane po 2025-07-31. Dla nowych botów używaj **Single Tenant**. +> **Informacja o wycofaniu:** Tworzenie nowych botów wielodzierżawowych zostało wycofane po 2025-07-31. Dla nowych botów używaj **Single Tenant**. 3. Kliknij **Review + create** → **Create** (poczekaj ~1-2 minuty) @@ -179,16 +182,16 @@ Przed skonfigurowaniem OpenClaw musisz utworzyć zasób Azure Bot. 1. Przejdź do zasobu Azure Bot → **Configuration** 2. Skopiuj **Microsoft App ID** → to jest Twoje `appId` -3. Kliknij **Manage Password** → przejdź do App Registration +3. Kliknij **Manage Password** → przejdź do rejestracji aplikacji 4. W sekcji **Certificates & secrets** → **New client secret** → skopiuj **Value** → to jest Twoje `appPassword` 5. Przejdź do **Overview** → skopiuj **Directory (tenant) ID** → to jest Twoje `tenantId` -### Krok 3: Skonfiguruj Messaging Endpoint +### Krok 3: Skonfiguruj endpoint wiadomości 1. W Azure Bot → **Configuration** 2. Ustaw **Messaging endpoint** na URL webhooka: - Produkcja: `https://your-domain.com/api/messages` - - Local dev: użyj tunelu (zobacz [Local Development](#local-development-tunneling) poniżej) + - Lokalny development: użyj tunelu (zobacz poniżej [Local Development](#local-development-tunneling)) ### Krok 4: Włącz kanał Teams @@ -196,9 +199,151 @@ Przed skonfigurowaniem OpenClaw musisz utworzyć zasób Azure Bot. 2. Kliknij **Microsoft Teams** → Configure → Save 3. Zaakceptuj Terms of Service +## Uwierzytelnianie federacyjne (certyfikat + managed identity) + +> Dodano w 2026.3.24 + +W środowiskach produkcyjnych OpenClaw obsługuje **uwierzytelnianie federacyjne** jako bezpieczniejszą alternatywę dla client secret. Dostępne są dwie metody: + +### Opcja A: Uwierzytelnianie oparte na certyfikacie + +Użyj certyfikatu PEM zarejestrowanego w rejestracji aplikacji Entra ID. + +**Konfiguracja:** + +1. Wygeneruj lub uzyskaj certyfikat (format PEM z kluczem prywatnym). +2. W Entra ID → App Registration → **Certificates & secrets** → **Certificates** → prześlij certyfikat publiczny. + +**Config:** + +```json5 +{ + channels: { + msteams: { + enabled: true, + appId: "", + tenantId: "", + authType: "federated", + certificatePath: "/path/to/cert.pem", + webhook: { port: 3978, path: "/api/messages" }, + }, + }, +} +``` + +**Zmienne środowiskowe:** + +- `MSTEAMS_AUTH_TYPE=federated` +- `MSTEAMS_CERTIFICATE_PATH=/path/to/cert.pem` + +### Opcja B: Azure Managed Identity + +Użyj Azure Managed Identity do uwierzytelniania bez hasła. To idealne rozwiązanie dla wdrożeń na infrastrukturze Azure (AKS, App Service, maszyny wirtualne Azure), gdzie dostępna jest managed identity. + +**Jak to działa:** + +1. Pod/VM bota ma managed identity (przypisaną przez system lub użytkownika). +2. **Federated identity credential** łączy managed identity z rejestracją aplikacji Entra ID. +3. W czasie działania OpenClaw używa `@azure/identity` do pobierania tokenów z endpointu Azure IMDS (`169.254.169.254`). +4. Token jest przekazywany do SDK Teams na potrzeby uwierzytelniania bota. + +**Wymagania wstępne:** + +- Infrastruktura Azure z włączoną managed identity (AKS workload identity, App Service, VM) +- Utworzona federated identity credential w rejestracji aplikacji Entra ID +- Dostęp sieciowy do IMDS (`169.254.169.254:80`) z poda/VM + +**Config (managed identity przypisana przez system):** + +```json5 +{ + channels: { + msteams: { + enabled: true, + appId: "", + tenantId: "", + authType: "federated", + useManagedIdentity: true, + webhook: { port: 3978, path: "/api/messages" }, + }, + }, +} +``` + +**Config (managed identity przypisana przez użytkownika):** + +```json5 +{ + channels: { + msteams: { + enabled: true, + appId: "", + tenantId: "", + authType: "federated", + useManagedIdentity: true, + managedIdentityClientId: "", + webhook: { port: 3978, path: "/api/messages" }, + }, + }, +} +``` + +**Zmienne środowiskowe:** + +- `MSTEAMS_AUTH_TYPE=federated` +- `MSTEAMS_USE_MANAGED_IDENTITY=true` +- `MSTEAMS_MANAGED_IDENTITY_CLIENT_ID=` (tylko dla tożsamości przypisanej przez użytkownika) + +### Konfiguracja AKS Workload Identity + +Dla wdrożeń AKS używających workload identity: + +1. **Włącz workload identity** w klastrze AKS. +2. **Utwórz federated identity credential** w rejestracji aplikacji Entra ID: + + ```bash + az ad app federated-credential create --id --parameters '{ + "name": "my-bot-workload-identity", + "issuer": "", + "subject": "system:serviceaccount::", + "audiences": ["api://AzureADTokenExchange"] + }' + ``` + +3. **Dodaj adnotację do konta usługi Kubernetes** z identyfikatorem klienta aplikacji: + + ```yaml + apiVersion: v1 + kind: ServiceAccount + metadata: + name: my-bot-sa + annotations: + azure.workload.identity/client-id: "" + ``` + +4. **Dodaj etykietę do poda** dla wstrzykiwania workload identity: + + ```yaml + metadata: + labels: + azure.workload.identity/use: "true" + ``` + +5. **Zapewnij dostęp sieciowy** do IMDS (`169.254.169.254`) — jeśli używasz NetworkPolicy, dodaj regułę egress zezwalającą na ruch do `169.254.169.254/32` na porcie 80. + +### Porównanie typów uwierzytelniania + +| Metoda | Konfiguracja | Zalety | Wady | +| -------------------- | ---------------------------------------------- | ---------------------------------- | ------------------------------------- | +| **Client secret** | `appPassword` | Prosta konfiguracja | Wymaga rotacji sekretu, mniejsze bezpieczeństwo | +| **Certificate** | `authType: "federated"` + `certificatePath` | Brak współdzielonego sekretu w sieci | Narzut związany z zarządzaniem certyfikatami | +| **Managed Identity** | `authType: "federated"` + `useManagedIdentity` | Bez haseł, brak sekretów do zarządzania | Wymagana infrastruktura Azure | + +**Zachowanie domyślne:** Gdy `authType` nie jest ustawione, OpenClaw domyślnie używa uwierzytelniania client secret. Istniejące konfiguracje nadal działają bez zmian. + ## Local Development (tunelowanie) -Teams nie może połączyć się z `localhost`. Użyj tunelu do local developmentu: +Teams nie może połączyć się z `localhost`. Do lokalnego developmentu użyj tunelu: **Opcja A: ngrok** @@ -212,20 +357,20 @@ ngrok http 3978 ```bash tailscale funnel 3978 -# Użyj swojego URL Tailscale Funnel jako messaging endpoint +# Użyj swojego URL Tailscale funnel jako messaging endpoint ``` ## Teams Developer Portal (alternatywa) -Zamiast ręcznie tworzyć ZIP manifestu, możesz użyć [Teams Developer Portal](https://dev.teams.microsoft.com/apps): +Zamiast ręcznie tworzyć ZIP z manifestem, możesz użyć [Teams Developer Portal](https://dev.teams.microsoft.com/apps): 1. Kliknij **+ New app** -2. Wypełnij podstawowe informacje (nazwa, opis, informacje o deweloperze) +2. Uzupełnij podstawowe informacje (nazwa, opis, informacje o deweloperze) 3. Przejdź do **App features** → **Bot** 4. Wybierz **Enter a bot ID manually** i wklej App ID swojego Azure Bot 5. Zaznacz zakresy: **Personal**, **Team**, **Group Chat** 6. Kliknij **Distribute** → **Download app package** -7. W Teams: **Apps** → **Manage your apps** → **Upload a custom app** → wybierz ZIP +7. W Teams: **Apps** → **Manage your apps** → **Upload a custom app** → wybierz plik ZIP To często jest łatwiejsze niż ręczna edycja manifestów JSON. @@ -246,10 +391,10 @@ To często jest łatwiejsze niż ręczna edycja manifestów JSON. ## Konfiguracja (minimalna, tylko tekst) 1. **Upewnij się, że plugin Microsoft Teams jest dostępny** - - Bieżące spakowane wydania OpenClaw już go zawierają. + - Bieżące paczkowane wydania OpenClaw zawierają go już domyślnie. - Starsze/niestandardowe instalacje mogą dodać go ręcznie: - Z npm: `openclaw plugins install @openclaw/msteams` - - Z lokalnego checkouta: `openclaw plugins install ./path/to/local/msteams-plugin` + - Z lokalnego checkoutu: `openclaw plugins install ./path/to/local/msteams-plugin` 2. **Rejestracja bota** - Utwórz Azure Bot (zobacz wyżej) i zanotuj: @@ -285,37 +430,42 @@ To często jest łatwiejsze niż ręczna edycja manifestów JSON. - `MSTEAMS_APP_ID` - `MSTEAMS_APP_PASSWORD` - `MSTEAMS_TENANT_ID` + - `MSTEAMS_AUTH_TYPE` (opcjonalnie: `"secret"` lub `"federated"`) + - `MSTEAMS_CERTIFICATE_PATH` (federated + certyfikat) + - `MSTEAMS_CERTIFICATE_THUMBPRINT` (opcjonalne, niewymagane do uwierzytelniania) + - `MSTEAMS_USE_MANAGED_IDENTITY` (federated + managed identity) + - `MSTEAMS_MANAGED_IDENTITY_CLIENT_ID` (tylko dla managed identity przypisanej przez użytkownika) 5. **Endpoint bota** - Ustaw Azure Bot Messaging Endpoint na: - - `https://:3978/api/messages` (lub wybraną przez Ciebie ścieżkę/port). + - `https://:3978/api/messages` (lub wybraną ścieżkę/port). 6. **Uruchom gateway** - - Kanał Teams uruchamia się automatycznie, gdy bundled plugin lub ręcznie zainstalowany plugin jest dostępny i istnieje konfiguracja `msteams` z poświadczeniami. + - Kanał Teams uruchamia się automatycznie, gdy bundled plugin lub ręcznie zainstalowany plugin jest dostępny, a konfiguracja `msteams` zawiera poświadczenia. ## Akcja informacji o członku -OpenClaw udostępnia opartą na Graph akcję `member-info` dla Microsoft Teams, aby agenci i automatyzacje mogli bezpośrednio z Microsoft Graph rozwiązywać szczegóły członków kanału (nazwa wyświetlana, e-mail, rola). +OpenClaw udostępnia opartą na Graph akcję `member-info` dla Microsoft Teams, dzięki czemu agenci i automatyzacje mogą bezpośrednio z Microsoft Graph rozwiązywać szczegóły członków kanału (nazwa wyświetlana, e-mail, rola). Wymagania: -- Uprawnienie RSC `Member.Read.Group` (już zawarte w zalecanym manifeście) -- Dla wyszukiwań między zespołami: uprawnienie aplikacyjne Graph `User.Read.All` z consentem administratora +- Uprawnienie RSC `Member.Read.Group` (już obecne w zalecanym manifeście) +- Dla wyszukiwań między zespołami: uprawnienie aplikacyjne Graph `User.Read.All` z zgodą administratora Akcja jest kontrolowana przez `channels.msteams.actions.memberInfo` (domyślnie: włączona, gdy dostępne są poświadczenia Graph). ## Kontekst historii -- `channels.msteams.historyLimit` kontroluje liczbę ostatnich wiadomości kanału/grupy opakowywanych do promptu. -- Zapasowo używa `messages.groupChat.historyLimit`. Ustaw `0`, aby wyłączyć (domyślnie 50). -- Pobrana historia wątku jest filtrowana przez allowlisty nadawców (`allowFrom` / `groupAllowFrom`), więc zasiewanie kontekstu wątku obejmuje tylko wiadomości od dozwolonych nadawców. -- Cytowany kontekst załączników (`ReplyTo*` pochodzący z HTML odpowiedzi Teams) jest obecnie przekazywany tak, jak został odebrany. -- Innymi słowy, allowlisty kontrolują, kto może wywołać agenta; obecnie filtrowane są tylko konkretne dodatkowe ścieżki kontekstu. +- `channels.msteams.historyLimit` określa, ile ostatnich wiadomości z kanału/grupy jest opakowywanych do promptu. +- Z fallbackiem do `messages.groupChat.historyLimit`. Ustaw `0`, aby wyłączyć (domyślnie 50). +- Pobierana historia wątku jest filtrowana przez listy dozwolonych nadawców (`allowFrom` / `groupAllowFrom`), więc seedowanie kontekstu wątku obejmuje tylko wiadomości od dozwolonych nadawców. +- Cytowany kontekst załączników (`ReplyTo*` pochodzący z HTML odpowiedzi Teams) jest obecnie przekazywany w otrzymanej postaci. +- Innymi słowy, listy dozwolonych nadawców kontrolują, kto może wyzwolić agenta; obecnie filtrowane są tylko określone uzupełniające ścieżki kontekstu. - Historię DM można ograniczyć przez `channels.msteams.dmHistoryLimit` (tury użytkownika). Nadpisania per użytkownik: `channels.msteams.dms[""].historyLimit`. ## Bieżące uprawnienia Teams RSC (manifest) -To są **istniejące resourceSpecific permissions** w naszym manifeście aplikacji Teams. Obowiązują tylko w zespole/czacie, gdzie aplikacja jest zainstalowana. +To są **istniejące uprawnienia resourceSpecific** w manifeście naszej aplikacji Teams. Obowiązują tylko wewnątrz zespołu/czatu, w którym aplikacja jest zainstalowana. **Dla kanałów (zakres zespołu):** @@ -331,7 +481,7 @@ To są **istniejące resourceSpecific permissions** w naszym manifeście aplikac - `ChatMessage.Read.Chat` (Application) - odbieranie wszystkich wiadomości czatu grupowego bez @mention -## Przykładowy manifest Teams (zredagowany) +## Przykładowy manifest Teams (z redakcją) Minimalny, poprawny przykład z wymaganymi polami. Zastąp identyfikatory i URL-e. @@ -381,128 +531,133 @@ Minimalny, poprawny przykład z wymaganymi polami. Zastąp identyfikatory i URL- } ``` -### Zastrzeżenia dotyczące manifestu (pola obowiązkowe) +### Zastrzeżenia dotyczące manifestu (pola wymagane) - `bots[].botId` **musi** odpowiadać Azure Bot App ID. - `webApplicationInfo.id` **musi** odpowiadać Azure Bot App ID. -- `bots[].scopes` musi zawierać powierzchnie, których chcesz używać (`personal`, `team`, `groupChat`). +- `bots[].scopes` musi zawierać powierzchnie, których planujesz używać (`personal`, `team`, `groupChat`). - `bots[].supportsFiles: true` jest wymagane do obsługi plików w zakresie osobistym. - `authorization.permissions.resourceSpecific` musi zawierać uprawnienia odczytu/wysyłania kanałowego, jeśli chcesz obsługiwać ruch kanałowy. ### Aktualizacja istniejącej aplikacji -Aby zaktualizować już zainstalowaną aplikację Teams (np. w celu dodania uprawnień RSC): +Aby zaktualizować już zainstalowaną aplikację Teams (np. dodać uprawnienia RSC): 1. Zaktualizuj `manifest.json`, dodając nowe ustawienia 2. **Zwiększ pole `version`** (np. `1.0.0` → `1.1.0`) -3. **Spakuj ponownie** manifest z ikonami (`manifest.json`, `outline.png`, `color.png`) -4. Prześlij nowy zip: +3. **Ponownie spakuj ZIP** z manifestem i ikonami (`manifest.json`, `outline.png`, `color.png`) +4. Prześlij nowy plik zip: - **Opcja A (Teams Admin Center):** Teams Admin Center → Teams apps → Manage apps → znajdź swoją aplikację → Upload new version - - **Opcja B (Sideload):** w Teams → Apps → Manage your apps → Upload a custom app -5. **Dla kanałów zespołowych:** zainstaluj ponownie aplikację w każdym zespole, aby nowe uprawnienia zaczęły działać -6. **Całkowicie zamknij i uruchom ponownie Teams** (nie tylko zamknij okno), aby wyczyścić cache metadanych aplikacji + - **Opcja B (Sideload):** W Teams → Apps → Manage your apps → Upload a custom app +5. **Dla kanałów zespołu:** ponownie zainstaluj aplikację w każdym zespole, aby nowe uprawnienia zaczęły obowiązywać +6. **Całkowicie zamknij i uruchom ponownie Teams** (nie tylko zamknij okno), aby wyczyścić metadane aplikacji z cache ## Możliwości: tylko RSC vs Graph -### Z **samym Teams RSC** (aplikacja zainstalowana, bez uprawnień Graph API) +### Z **samym Teams RSC** (aplikacja zainstalowana, bez uprawnień API Graph) Działa: -- Odczyt treści **tekstowej** wiadomości kanałowych. -- Wysyłanie **tekstowej** treści wiadomości kanałowych. -- Odbieranie załączników plikowych w **osobistych (DM)**. +- Odczyt **tekstu** wiadomości kanałowych. +- Wysyłanie **tekstu** wiadomości kanałowych. +- Odbieranie załączników plikowych w **zakresie osobistym (DM)**. -NIE działa: +Nie działa: -- Zawartość **obrazów lub plików** w kanałach/grupach (payload zawiera tylko HTML stub). +- Zawartość **obrazów lub plików** w kanałach/grupach (payload zawiera tylko stub HTML). - Pobieranie załączników przechowywanych w SharePoint/OneDrive. -- Odczyt historii wiadomości (poza zdarzeniem webhooka na żywo). +- Odczyt historii wiadomości (poza wydarzeniem webhooka na żywo). ### Z **Teams RSC + uprawnieniami aplikacyjnymi Microsoft Graph** Dodaje: -- Pobieranie hostowanych treści (obrazów wklejonych do wiadomości). +- Pobieranie hostowanych treści (obrazy wklejane do wiadomości). - Pobieranie załączników plikowych przechowywanych w SharePoint/OneDrive. -- Odczyt historii wiadomości kanałów/czatów przez Graph. +- Odczyt historii wiadomości kanału/czatu przez Graph. ### RSC vs Graph API -| Możliwość | Uprawnienia RSC | Graph API | -| ----------------------- | -------------------- | ----------------------------------- | -| **Wiadomości w czasie rzeczywistym** | Tak (przez webhook) | Nie (tylko polling) | -| **Wiadomości historyczne** | Nie | Tak (można odpytywać historię) | -| **Złożoność konfiguracji** | Tylko manifest aplikacji | Wymaga consentu administratora + przepływu tokena | -| **Działa offline** | Nie (musi działać) | Tak (zapytanie w dowolnym momencie) | +| Możliwość | Uprawnienia RSC | Graph API | +| --------------------- | -------------------- | ----------------------------------- | +| **Wiadomości w czasie rzeczywistym** | Tak (przez webhook) | Nie (tylko polling) | +| **Wiadomości historyczne** | Nie | Tak (można odpytywać historię) | +| **Złożoność konfiguracji** | Tylko manifest aplikacji | Wymaga zgody administratora + przepływu tokenów | +| **Działa offline** | Nie (musi działać) | Tak (zapytanie możliwe w dowolnym momencie) | -**Podsumowanie:** RSC służy do nasłuchiwania w czasie rzeczywistym; Graph API służy do dostępu historycznego. Aby nadrobić wiadomości pominięte podczas offline, potrzebujesz Graph API z `ChannelMessage.Read.All` (wymaga consentu administratora). +**Podsumowanie:** RSC służy do nasłuchu w czasie rzeczywistym; Graph API służy do dostępu historycznego. Aby nadrobić pominięte wiadomości podczas pracy offline, potrzebujesz Graph API z `ChannelMessage.Read.All` (wymaga zgody administratora). -## Media + historia z włączonym Graph (wymagane dla kanałów) +## Media + historia z Graph (wymagane dla kanałów) -Jeśli potrzebujesz obrazów/plików w **kanałach** lub chcesz pobierać **historię wiadomości**, musisz włączyć uprawnienia Microsoft Graph i przyznać consent administratora. +Jeśli potrzebujesz obrazów/plików w **kanałach** lub chcesz pobierać **historię wiadomości**, musisz włączyć uprawnienia Microsoft Graph i udzielić zgody administratora. 1. W Entra ID (Azure AD) **App Registration** dodaj uprawnienia aplikacyjne Microsoft Graph: - `ChannelMessage.Read.All` (załączniki kanałowe + historia) - `Chat.Read.All` lub `ChatMessage.Read.All` (czaty grupowe) -2. **Przyznaj consent administratora** dla tenant. +2. **Udziel zgody administratora** dla tenantu. 3. Zwiększ **wersję manifestu** aplikacji Teams, prześlij go ponownie i **zainstaluj aplikację ponownie w Teams**. -4. **Całkowicie zamknij i uruchom ponownie Teams**, aby wyczyścić cache metadanych aplikacji. +4. **Całkowicie zamknij i uruchom ponownie Teams**, aby wyczyścić metadane aplikacji z cache. -**Dodatkowe uprawnienie dla wzmiankowania użytkowników:** Wzmianki @ użytkowników działają od razu dla użytkowników obecnych w konwersacji. Jeśli jednak chcesz dynamicznie wyszukiwać i wzmiankować użytkowników, którzy **nie są w bieżącej konwersacji**, dodaj uprawnienie aplikacyjne `User.Read.All` i przyznaj consent administratora. +**Dodatkowe uprawnienie dla wzmianek o użytkownikach:** Wzmianki @ użytkowników działają od razu dla użytkowników będących uczestnikami rozmowy. Jeśli jednak chcesz dynamicznie wyszukiwać i oznaczać użytkowników, którzy **nie są w bieżącej rozmowie**, dodaj uprawnienie aplikacyjne `User.Read.All` i udziel zgody administratora. ## Znane ograniczenia -### Timeouty webhooków +### Limity czasu webhooka -Teams dostarcza wiadomości przez webhook HTTP. Jeśli przetwarzanie trwa zbyt długo (np. wolne odpowiedzi LLM), możesz zobaczyć: +Teams dostarcza wiadomości przez webhook HTTP. Jeśli przetwarzanie trwa zbyt długo (np. powolne odpowiedzi LLM), możesz zobaczyć: -- Timeouty gateway -- Ponawianie wiadomości przez Teams (powodujące duplikaty) -- Utracone odpowiedzi +- przekroczenia czasu gateway +- ponawianie wiadomości przez Teams (powodujące duplikaty) +- porzucone odpowiedzi -OpenClaw obsługuje to, szybko zwracając odpowiedź i wysyłając odpowiedzi proaktywnie, ale bardzo wolne odpowiedzi mogą nadal powodować problemy. +OpenClaw obsługuje to przez szybki zwrot odpowiedzi i proaktywne wysyłanie odpowiedzi, ale bardzo wolne odpowiedzi nadal mogą powodować problemy. ### Formatowanie Markdown Teams jest bardziej ograniczony niż w Slack lub Discord: -- Podstawowe formatowanie działa: **pogrubienie**, _kursywa_, `code`, linki -- Złożony Markdown (tabele, zagnieżdżone listy) może nie renderować się poprawnie +- Działa podstawowe formatowanie: **bold**, _italic_, `code`, linki +- Złożony markdown (tabele, zagnieżdżone listy) może renderować się niepoprawnie - Adaptive Cards są obsługiwane dla ankiet i dowolnych wysyłek kart (zobacz poniżej) ## Konfiguracja -Kluczowe ustawienia (zobacz `/gateway/configuration`, aby poznać współdzielone wzorce kanałów): +Kluczowe ustawienia (wspólne wzorce kanałów znajdziesz w `/gateway/configuration`): -- `channels.msteams.enabled`: włącz/wyłącz kanał. +- `channels.msteams.enabled`: włącza/wyłącza kanał. - `channels.msteams.appId`, `channels.msteams.appPassword`, `channels.msteams.tenantId`: poświadczenia bota. - `channels.msteams.webhook.port` (domyślnie `3978`) - `channels.msteams.webhook.path` (domyślnie `/api/messages`) - `channels.msteams.dmPolicy`: `pairing | allowlist | open | disabled` (domyślnie: pairing) -- `channels.msteams.allowFrom`: allowlista DM (zalecane identyfikatory obiektów AAD). Kreator rozwiązuje nazwy na identyfikatory podczas konfiguracji, gdy dostępny jest Graph. -- `channels.msteams.dangerouslyAllowNameMatching`: przełącznik awaryjny do ponownego włączenia dopasowywania zmiennych UPN-ów/nazw wyświetlanych oraz bezpośredniego routowania po nazwie zespołu/kanału. -- `channels.msteams.textChunkLimit`: rozmiar chunków tekstu wychodzącego. -- `channels.msteams.chunkMode`: `length` (domyślnie) lub `newline`, aby dzielić po pustych liniach (granice akapitów) przed chunkowaniem po długości. -- `channels.msteams.mediaAllowHosts`: allowlista hostów dla przychodzących załączników (domyślnie domeny Microsoft/Teams). -- `channels.msteams.mediaAuthAllowHosts`: allowlista hostów, dla których dołączane są nagłówki Authorization przy ponownych próbach pobierania mediów (domyślnie hosty Graph + Bot Framework). -- `channels.msteams.requireMention`: wymagaj @mention w kanałach/grupach (domyślnie true). +- `channels.msteams.allowFrom`: lista dozwolonych dla DM (zalecane identyfikatory obiektów AAD). Kreator rozwiązuje nazwy do identyfikatorów podczas konfiguracji, gdy dostęp do Graph jest dostępny. +- `channels.msteams.dangerouslyAllowNameMatching`: przełącznik awaryjny przywracający dopasowywanie po zmiennych UPN/nazwach wyświetlanych oraz bezpośredni routing po nazwach zespołów/kanałów. +- `channels.msteams.textChunkLimit`: rozmiar fragmentów tekstu wychodzącego. +- `channels.msteams.chunkMode`: `length` (domyślnie) lub `newline`, aby dzielić po pustych wierszach (granice akapitów) przed dzieleniem według długości. +- `channels.msteams.mediaAllowHosts`: lista dozwolonych hostów dla przychodzących załączników (domyślnie domeny Microsoft/Teams). +- `channels.msteams.mediaAuthAllowHosts`: lista dozwolonych hostów do dołączania nagłówków Authorization przy ponownych próbach pobrania mediów (domyślnie hosty Graph + Bot Framework). +- `channels.msteams.requireMention`: wymaga @mention w kanałach/grupach (domyślnie true). - `channels.msteams.replyStyle`: `thread | top-level` (zobacz [Styl odpowiedzi](#reply-style-threads-vs-posts)). - `channels.msteams.teams..replyStyle`: nadpisanie per zespół. - `channels.msteams.teams..requireMention`: nadpisanie per zespół. -- `channels.msteams.teams..tools`: domyślne nadpisania polityki narzędzi per zespół (`allow`/`deny`/`alsoAllow`) używane, gdy brak nadpisania kanałowego. -- `channels.msteams.teams..toolsBySender`: domyślne nadpisania polityki narzędzi per nadawca dla zespołu (obsługiwany wildcard `"*"`). +- `channels.msteams.teams..tools`: domyślne nadpisania polityki narzędzi per zespół (`allow`/`deny`/`alsoAllow`) używane, gdy brakuje nadpisania kanału. +- `channels.msteams.teams..toolsBySender`: domyślne nadpisania polityki narzędzi per zespół i nadawcę (obsługiwany wildcard `"*"`). - `channels.msteams.teams..channels..replyStyle`: nadpisanie per kanał. - `channels.msteams.teams..channels..requireMention`: nadpisanie per kanał. - `channels.msteams.teams..channels..tools`: nadpisania polityki narzędzi per kanał (`allow`/`deny`/`alsoAllow`). -- `channels.msteams.teams..channels..toolsBySender`: nadpisania polityki narzędzi per nadawca dla kanału (obsługiwany wildcard `"*"`). +- `channels.msteams.teams..channels..toolsBySender`: nadpisania polityki narzędzi per kanał i nadawcę (obsługiwany wildcard `"*"`). - Klucze `toolsBySender` powinny używać jawnych prefiksów: - `id:`, `e164:`, `username:`, `name:` (starsze klucze bez prefiksu nadal mapują tylko do `id:`). -- `channels.msteams.actions.memberInfo`: włącz lub wyłącz opartą na Graph akcję informacji o członku (domyślnie: włączona, gdy dostępne są poświadczenia Graph). -- `channels.msteams.sharePointSiteId`: identyfikator witryny SharePoint do przesyłania plików w czatach grupowych/kanałach (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)). + `id:`, `e164:`, `username:`, `name:` (starsze klucze bez prefiksu nadal mapują się tylko do `id:`). +- `channels.msteams.actions.memberInfo`: włącza lub wyłącza opartą na Graph akcję informacji o członku (domyślnie: włączona, gdy dostępne są poświadczenia Graph). +- `channels.msteams.authType`: typ uwierzytelniania — `"secret"` (domyślnie) lub `"federated"`. +- `channels.msteams.certificatePath`: ścieżka do pliku certyfikatu PEM (federated + uwierzytelnianie certyfikatem). +- `channels.msteams.certificateThumbprint`: odcisk palca certyfikatu (opcjonalny, niewymagany do uwierzytelniania). +- `channels.msteams.useManagedIdentity`: włącza uwierzytelnianie managed identity (tryb federated). +- `channels.msteams.managedIdentityClientId`: identyfikator klienta dla managed identity przypisanej przez użytkownika. +- `channels.msteams.sharePointSiteId`: identyfikator witryny SharePoint dla wysyłania plików w czatach grupowych/kanałach (zobacz [Wysyłanie plików w czatach grupowych](#sending-files-in-group-chats)). -## Routowanie i sesje +## Routing i sesje -- Klucze sesji mają standardowy format agenta (zobacz [/concepts/session](/concepts/session)): +- Klucze sesji są zgodne ze standardowym formatem agenta (zobacz [/concepts/session](/pl/concepts/session)): - Wiadomości bezpośrednie współdzielą główną sesję (`agent::`). - Wiadomości kanałowe/grupowe używają identyfikatora konwersacji: - `agent::msteams:channel:` @@ -510,19 +665,19 @@ Kluczowe ustawienia (zobacz `/gateway/configuration`, aby poznać współdzielon ## Styl odpowiedzi: wątki vs posty -Teams niedawno wprowadził dwa style UI kanałów na tym samym bazowym modelu danych: +Teams niedawno wprowadził dwa style interfejsu kanałów nad tym samym bazowym modelem danych: -| Styl | Opis | Zalecane `replyStyle` | -| ------------------------ | --------------------------------------------------------- | --------------------- | -| **Posts** (klasyczny) | Wiadomości pojawiają się jako karty z odpowiedziami w wątku pod spodem | `thread` (domyślnie) | -| **Threads** (jak Slack) | Wiadomości płyną liniowo, bardziej jak w Slack | `top-level` | +| Styl | Opis | Zalecane `replyStyle` | +| ----------------------- | --------------------------------------------------------- | --------------------- | +| **Posts** (klasyczny) | Wiadomości pojawiają się jako karty z odpowiedziami we wątku pod spodem | `thread` (domyślnie) | +| **Threads** (jak Slack) | Wiadomości płyną liniowo, bardziej jak w Slack | `top-level` | -**Problem:** API Teams nie ujawnia, którego stylu UI używa kanał. Jeśli użyjesz niewłaściwego `replyStyle`: +**Problem:** API Teams nie ujawnia, którego stylu interfejsu używa kanał. Jeśli użyjesz niewłaściwego `replyStyle`: - `thread` w kanale w stylu Threads → odpowiedzi pojawiają się niezręcznie zagnieżdżone - `top-level` w kanale w stylu Posts → odpowiedzi pojawiają się jako osobne posty najwyższego poziomu zamiast we wątku -**Rozwiązanie:** Skonfiguruj `replyStyle` per kanał w zależności od tego, jak kanał jest skonfigurowany: +**Rozwiązanie:** Skonfiguruj `replyStyle` per kanał na podstawie sposobu skonfigurowania kanału: ```json5 { @@ -545,15 +700,15 @@ Teams niedawno wprowadził dwa style UI kanałów na tym samym bazowym modelu da ## Załączniki i obrazy -**Bieżące ograniczenia:** +**Obecne ograniczenia:** -- **DM-y:** obrazy i załączniki plikowe działają przez botowe API plików Teams. -- **Kanały/grupy:** załączniki znajdują się w pamięci masowej M365 (SharePoint/OneDrive). Payload webhooka zawiera tylko HTML stub, a nie faktyczne bajty pliku. **Do pobierania załączników kanałowych wymagane są uprawnienia Graph API**. +- **DM-y:** obrazy i załączniki plikowe działają przez interfejsy API plików bota Teams. +- **Kanały/grupy:** załączniki są przechowywane w M365 (SharePoint/OneDrive). Payload webhooka zawiera tylko stub HTML, a nie rzeczywiste bajty pliku. **Do pobierania załączników kanałowych wymagane są uprawnienia Graph API**. - Dla jawnych wysyłek rozpoczynających się od pliku użyj `action=upload-file` z `media` / `filePath` / `path`; opcjonalne `message` staje się dołączonym tekstem/komentarzem, a `filename` nadpisuje nazwę przesyłanego pliku. -Bez uprawnień Graph wiadomości kanałowe z obrazami będą odbierane jako tylko tekstowe (zawartość obrazu nie jest dostępna dla bota). +Bez uprawnień Graph wiadomości kanałowe z obrazami będą odbierane tylko jako tekst (zawartość obrazu nie jest dostępna dla bota). Domyślnie OpenClaw pobiera media tylko z nazw hostów Microsoft/Teams. Nadpisz to przez `channels.msteams.mediaAllowHosts` (użyj `["*"]`, aby zezwolić na dowolny host). -Nagłówki Authorization są dołączane tylko dla hostów z `channels.msteams.mediaAuthAllowHosts` (domyślnie hosty Graph + Bot Framework). Utrzymuj tę listę restrykcyjną (unikaj wielodostępnych sufiksów). +Nagłówki Authorization są dołączane tylko dla hostów z `channels.msteams.mediaAuthAllowHosts` (domyślnie hosty Graph + Bot Framework). Utrzymuj tę listę restrykcyjną (unikaj sufiksów wielodzierżawowych). ## Wysyłanie plików w czatach grupowych @@ -561,21 +716,21 @@ Boty mogą wysyłać pliki w DM-ach przy użyciu przepływu FileConsentCard (wbu | Kontekst | Sposób wysyłania plików | Wymagana konfiguracja | | ------------------------ | ------------------------------------------ | ---------------------------------------------- | -| **DM-y** | FileConsentCard → użytkownik akceptuje → bot przesyła | Działa od razu | -| **Czaty grupowe/kanały** | Przesłanie do SharePoint → link współdzielenia | Wymaga `sharePointSiteId` + uprawnień Graph | +| **DM-y** | FileConsentCard → użytkownik akceptuje → bot przesyła plik | Działa od razu | +| **Czaty grupowe/kanały** | Przesłanie do SharePoint → udostępnienie linku | Wymaga `sharePointSiteId` + uprawnień Graph | | **Obrazy (dowolny kontekst)** | Inline zakodowane w Base64 | Działa od razu | ### Dlaczego czaty grupowe wymagają SharePoint -Boty nie mają osobistego dysku OneDrive (endpoint Graph API `/me/drive` nie działa dla tożsamości aplikacyjnych). Aby wysyłać pliki w czatach grupowych/kanałach, bot przesyła je do **witryny SharePoint** i tworzy link współdzielenia. +Boty nie mają osobistego dysku OneDrive (endpoint Graph API `/me/drive` nie działa dla tożsamości aplikacyjnych). Aby wysyłać pliki w czatach grupowych/kanałach, bot przesyła je do **witryny SharePoint** i tworzy link do udostępnienia. ### Konfiguracja 1. **Dodaj uprawnienia Graph API** w Entra ID (Azure AD) → App Registration: - `Sites.ReadWrite.All` (Application) - przesyłanie plików do SharePoint - - `Chat.Read.All` (Application) - opcjonalnie, umożliwia linki współdzielenia per użytkownik + - `Chat.Read.All` (Application) - opcjonalne, włącza linki udostępniania per użytkownik -2. **Przyznaj consent administratora** dla tenant. +2. **Udziel zgody administratora** dla tenantu. 3. **Pobierz identyfikator witryny SharePoint:** @@ -604,20 +759,20 @@ Boty nie mają osobistego dysku OneDrive (endpoint Graph API `/me/drive` nie dzi } ``` -### Zachowanie współdzielenia +### Zachowanie udostępniania -| Uprawnienie | Zachowanie współdzielenia | -| ---------------------------------------- | ---------------------------------------------------------- | -| `Sites.ReadWrite.All` tylko | Link współdzielenia w całej organizacji (każdy w org może uzyskać dostęp) | -| `Sites.ReadWrite.All` + `Chat.Read.All` | Link współdzielenia per użytkownik (dostęp mają tylko członkowie czatu) | +| Uprawnienie | Zachowanie udostępniania | +| --------------------------------------- | --------------------------------------------------------- | +| `Sites.ReadWrite.All` tylko | Link udostępniania dla całej organizacji (dostępny dla każdego w organizacji) | +| `Sites.ReadWrite.All` + `Chat.Read.All` | Link udostępniania per użytkownik (dostępny tylko dla członków czatu) | -Współdzielenie per użytkownik jest bezpieczniejsze, ponieważ tylko uczestnicy czatu mogą uzyskać dostęp do pliku. Jeśli brakuje uprawnienia `Chat.Read.All`, bot wraca do współdzielenia w całej organizacji. +Udostępnianie per użytkownik jest bezpieczniejsze, ponieważ tylko uczestnicy czatu mają dostęp do pliku. Jeśli brakuje uprawnienia `Chat.Read.All`, bot wraca do udostępniania dla całej organizacji. -### Zachowanie zapasowe +### Zachowanie fallback | Scenariusz | Wynik | | ------------------------------------------------- | -------------------------------------------------- | -| Czat grupowy + plik + skonfigurowane `sharePointSiteId` | Przesłanie do SharePoint, wysłanie linku współdzielenia | +| Czat grupowy + plik + skonfigurowane `sharePointSiteId` | Przesłanie do SharePoint, wysłanie linku udostępniania | | Czat grupowy + plik + brak `sharePointSiteId` | Próba przesłania do OneDrive (może się nie udać), wysłanie tylko tekstu | | Czat osobisty + plik | Przepływ FileConsentCard (działa bez SharePoint) | | Dowolny kontekst + obraz | Inline zakodowane w Base64 (działa bez SharePoint) | @@ -637,9 +792,9 @@ OpenClaw wysyła ankiety Teams jako Adaptive Cards (nie ma natywnego API ankiet ## Adaptive Cards (dowolne) -Wyślij dowolny JSON Adaptive Card do użytkowników lub konwersacji Teams za pomocą narzędzia `message` lub CLI. +Wysyłaj dowolny JSON Adaptive Card do użytkowników lub konwersacji Teams przy użyciu narzędzia `message` lub CLI. -Parametr `card` akceptuje obiekt JSON Adaptive Card. Gdy podano `card`, tekst wiadomości jest opcjonalny. +Parametr `card` akceptuje obiekt JSON Adaptive Card. Gdy `card` jest podane, tekst wiadomości jest opcjonalny. **Narzędzie agenta:** @@ -664,26 +819,26 @@ openclaw message send --channel msteams \ --card '{"type":"AdaptiveCard","version":"1.5","body":[{"type":"TextBlock","text":"Hello!"}]}' ``` -Zobacz [dokumentację Adaptive Cards](https://adaptivecards.io/), aby poznać schemat kart i przykłady. Szczegóły formatu target znajdziesz poniżej w [Formatach target](#target-formats). +Zobacz [dokumentację Adaptive Cards](https://adaptivecards.io/), aby poznać schemat karty i przykłady. Szczegóły formatu celu znajdziesz poniżej w [Formatach celu](#target-formats). -## Formaty target +## Formaty celu -Targety MSTeams używają prefiksów do rozróżniania użytkowników i konwersacji: +Cele MSTeams używają prefiksów do rozróżniania użytkowników i konwersacji: -| Typ targetu | Format | Przykład | -| -------------------- | -------------------------------- | --------------------------------------------------- | -| Użytkownik (po ID) | `user:` | `user:40a1a0ed-4ff2-4164-a219-55518990c197` | -| Użytkownik (po nazwie) | `user:` | `user:John Smith` (wymaga Graph API) | -| Grupa/kanał | `conversation:` | `conversation:19:abc123...@thread.tacv2` | -| Grupa/kanał (raw) | `` | `19:abc123...@thread.tacv2` (jeśli zawiera `@thread`) | +| Typ celu | Format | Przykład | +| --------------------- | -------------------------------- | --------------------------------------------------- | +| Użytkownik (według ID) | `user:` | `user:40a1a0ed-4ff2-4164-a219-55518990c197` | +| Użytkownik (według nazwy) | `user:` | `user:John Smith` (wymaga Graph API) | +| Grupa/kanał | `conversation:` | `conversation:19:abc123...@thread.tacv2` | +| Grupa/kanał (raw) | `` | `19:abc123...@thread.tacv2` (jeśli zawiera `@thread`) | **Przykłady CLI:** ```bash -# Wyślij do użytkownika po ID +# Wyślij do użytkownika według ID openclaw message send --channel msteams --target "user:40a1a0ed-..." --message "Hello" -# Wyślij do użytkownika po nazwie wyświetlanej (wywołuje wyszukiwanie przez Graph API) +# Wyślij do użytkownika według nazwy wyświetlanej (wywołuje wyszukiwanie przez Graph API) openclaw message send --channel msteams --target "user:John Smith" --message "Hello" # Wyślij do czatu grupowego lub kanału @@ -718,14 +873,14 @@ openclaw message send --channel msteams --target "conversation:19:abc...@thread. } ``` -Uwaga: bez prefiksu `user:` nazwy domyślnie trafiają do rozwiązywania grup/zespołów. Zawsze używaj `user:`, gdy kierujesz wiadomość do osób po nazwie wyświetlanej. +Uwaga: bez prefiksu `user:` nazwy domyślnie trafiają do rozwiązywania grup/zespołów. Zawsze używaj `user:`, gdy kierujesz wiadomości do osób po nazwie wyświetlanej. ## Wiadomości proaktywne - Wiadomości proaktywne są możliwe **dopiero po** interakcji użytkownika, ponieważ dopiero wtedy zapisujemy referencje konwersacji. -- Zobacz `/gateway/configuration`, aby poznać `dmPolicy` i bramkowanie allowlistą. +- Zobacz `/gateway/configuration`, aby poznać `dmPolicy` i kontrolę przez listy dozwolonych. -## Identyfikatory zespołów i kanałów (częsta pułapka) +## Identyfikatory zespołów i kanałów (częsty problem) Parametr zapytania `groupId` w URL-ach Teams **NIE** jest identyfikatorem zespołu używanym do konfiguracji. Wyodrębnij identyfikatory ze ścieżki URL: @@ -734,7 +889,7 @@ Parametr zapytania `groupId` w URL-ach Teams **NIE** jest identyfikatorem zespo ``` https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/conversations?groupId=... └────────────────────────────┘ - Identyfikator zespołu (zdekoduj URL) + Team ID (zdekoduj URL) ``` **URL kanału:** @@ -742,70 +897,70 @@ https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/conversations?gro ``` https://teams.microsoft.com/l/channel/19%3A15bc...%40thread.tacv2/ChannelName?groupId=... └─────────────────────────┘ - Identyfikator kanału (zdekoduj URL) + Channel ID (zdekoduj URL) ``` -**Dla konfiguracji:** +**Do konfiguracji:** -- Identyfikator zespołu = segment ścieżki po `/team/` (po zdekodowaniu URL, np. `19:Bk4j...@thread.tacv2`) -- Identyfikator kanału = segment ścieżki po `/channel/` (po zdekodowaniu URL) +- Team ID = segment ścieżki po `/team/` (po zdekodowaniu URL, np. `19:Bk4j...@thread.tacv2`) +- Channel ID = segment ścieżki po `/channel/` (po zdekodowaniu URL) - **Ignoruj** parametr zapytania `groupId` ## Kanały prywatne -Boty mają ograniczone wsparcie w kanałach prywatnych: +Boty mają ograniczoną obsługę w kanałach prywatnych: | Funkcja | Kanały standardowe | Kanały prywatne | | ---------------------------- | ------------------ | ---------------------- | | Instalacja bota | Tak | Ograniczona | -| Wiadomości w czasie rzeczywistym (webhook) | Tak | Może nie działać | +| Wiadomości w czasie rzeczywistym (webhook) | Tak | Może nie działać | | Uprawnienia RSC | Tak | Mogą działać inaczej | | @mentions | Tak | Jeśli bot jest dostępny | | Historia przez Graph API | Tak | Tak (z uprawnieniami) | **Obejścia, jeśli kanały prywatne nie działają:** -1. Używaj kanałów standardowych do interakcji z botem -2. Używaj DM-ów — użytkownicy zawsze mogą napisać bezpośrednio do bota +1. Używaj standardowych kanałów do interakcji z botem +2. Używaj DM-ów — użytkownicy zawsze mogą napisać do bota bezpośrednio 3. Używaj Graph API do dostępu historycznego (wymaga `ChannelMessage.Read.All`) ## Rozwiązywanie problemów ### Typowe problemy -- **Obrazy nie pokazują się w kanałach:** brakuje uprawnień Graph lub consentu administratora. Zainstaluj ponownie aplikację Teams i całkowicie zamknij/otwórz Teams. -- **Brak odpowiedzi w kanale:** domyślnie wymagane są wzmianki; ustaw `channels.msteams.requireMention=false` lub skonfiguruj per zespół/kanał. -- **Niezgodność wersji (Teams nadal pokazuje stary manifest):** usuń i dodaj aplikację ponownie oraz całkowicie zamknij Teams, aby odświeżyć. -- **401 Unauthorized z webhooka:** oczekiwane przy ręcznych testach bez Azure JWT — oznacza, że endpoint jest osiągalny, ale autoryzacja się nie powiodła. Użyj Azure Web Chat do poprawnego testowania. +- **Obrazy nie pokazują się w kanałach:** brakuje uprawnień Graph lub zgody administratora. Zainstaluj ponownie aplikację Teams i całkowicie zamknij/otwórz ponownie Teams. +- **Brak odpowiedzi w kanale:** wzmianki są domyślnie wymagane; ustaw `channels.msteams.requireMention=false` lub skonfiguruj to per zespół/kanał. +- **Niezgodność wersji (Teams nadal pokazuje stary manifest):** usuń i dodaj aplikację ponownie oraz całkowicie zamknij Teams, aby odświeżyć dane. +- **401 Unauthorized z webhooka:** oczekiwane przy ręcznych testach bez JWT z Azure — oznacza, że endpoint jest osiągalny, ale uwierzytelnianie nie przeszło. Do poprawnego testu użyj Azure Web Chat. ### Błędy przesyłania manifestu -- **"Icon file cannot be empty":** manifest odwołuje się do plików ikon, które mają 0 bajtów. Utwórz poprawne ikony PNG (`outline.png` 32x32, `color.png` 192x192). -- **"webApplicationInfo.Id already in use":** aplikacja nadal jest zainstalowana w innym zespole/czacie. Znajdź ją i odinstaluj najpierw albo odczekaj 5-10 minut na propagację. -- **"Something went wrong" przy przesyłaniu:** prześlij przez [https://admin.teams.microsoft.com](https://admin.teams.microsoft.com), otwórz DevTools przeglądarki (F12) → zakładka Network i sprawdź body odpowiedzi, aby zobaczyć faktyczny błąd. -- **Sideload nie działa:** spróbuj opcji „Upload an app to your org's app catalog” zamiast „Upload a custom app” — często omija to ograniczenia sideload. +- **"Icon file cannot be empty":** manifest odwołuje się do plików ikon mających 0 bajtów. Utwórz poprawne ikony PNG (`outline.png` 32x32, `color.png` 192x192). +- **"webApplicationInfo.Id already in use":** aplikacja jest nadal zainstalowana w innym zespole/czacie. Najpierw ją znajdź i odinstaluj albo poczekaj 5-10 minut na propagację. +- **"Something went wrong" podczas przesyłania:** prześlij przez [https://admin.teams.microsoft.com](https://admin.teams.microsoft.com), otwórz DevTools przeglądarki (F12) → kartę Network i sprawdź body odpowiedzi, aby zobaczyć rzeczywisty błąd. +- **Niepowodzenie sideload:** spróbuj użyć „Upload an app to your org's app catalog” zamiast „Upload a custom app” — często omija to ograniczenia sideload. ### Uprawnienia RSC nie działają -1. Zweryfikuj, że `webApplicationInfo.id` dokładnie odpowiada App ID Twojego bota +1. Sprawdź, czy `webApplicationInfo.id` dokładnie odpowiada App ID Twojego bota 2. Prześlij aplikację ponownie i zainstaluj ją ponownie w zespole/czacie -3. Sprawdź, czy administrator Twojej organizacji nie zablokował uprawnień RSC +3. Sprawdź, czy administrator organizacji nie zablokował uprawnień RSC 4. Potwierdź, że używasz właściwego zakresu: `ChannelMessage.Read.Group` dla zespołów, `ChatMessage.Read.Chat` dla czatów grupowych -## Odwołania +## Odnośniki - [Create Azure Bot](https://learn.microsoft.com/en-us/azure/bot-service/bot-service-quickstart-registration) - przewodnik konfiguracji Azure Bot - [Teams Developer Portal](https://dev.teams.microsoft.com/apps) - tworzenie/zarządzanie aplikacjami Teams -- [Schemat manifestu aplikacji Teams](https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema) -- [Odbieranie wiadomości kanałowych z RSC](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/channel-messages-with-rsc) -- [Dokumentacja uprawnień RSC](https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent) -- [Obsługa plików bota Teams](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/bots-filesv4) (kanał/grupa wymaga Graph) -- [Wiadomości proaktywne](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages) +- [Teams app manifest schema](https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema) +- [Receive channel messages with RSC](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/channel-messages-with-rsc) +- [RSC permissions reference](https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent) +- [Teams bot file handling](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/bots-filesv4) (kanały/grupy wymagają Graph) +- [Proactive messaging](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages) ## Powiązane -- [Przegląd kanałów](/pl/channels) — wszystkie obsługiwane kanały +- [Channels Overview](/pl/channels) — wszystkie obsługiwane kanały - [Pairing](/pl/channels/pairing) — uwierzytelnianie DM i przepływ parowania -- [Grupy](/pl/channels/groups) — zachowanie czatów grupowych i bramkowanie wzmiankami -- [Routowanie kanałów](/pl/channels/channel-routing) — routowanie sesji dla wiadomości -- [Bezpieczeństwo](/gateway/security) — model dostępu i utwardzanie +- [Groups](/pl/channels/groups) — zachowanie czatów grupowych i bramkowanie wzmianką +- [Channel Routing](/pl/channels/channel-routing) — routing sesji dla wiadomości +- [Security](/pl/gateway/security) — model dostępu i utwardzanie diff --git a/docs/pl/plugins/sdk-agent-harness.md b/docs/pl/plugins/sdk-agent-harness.md index 51c00948f..621ff4230 100644 --- a/docs/pl/plugins/sdk-agent-harness.md +++ b/docs/pl/plugins/sdk-agent-harness.md @@ -1,53 +1,53 @@ --- read_when: - - Zmieniasz osadzone środowisko uruchomieniowe agenta lub rejestr harness agenta - - Rejestrujesz agent harness z wbudowanego lub zaufanego pluginu - - Musisz zrozumieć, jak plugin Codex odnosi się do providerów modeli + - Zmieniasz osadzony runtime agenta lub rejestr harnessów + - Rejestrujesz harness agenta z dołączonego lub zaufanego pluginu + - Musisz zrozumieć, jak plugin Codex odnosi się do dostawców modeli sidebarTitle: Agent Harness summary: Eksperymentalna powierzchnia SDK dla pluginów, które zastępują niskopoziomowy osadzony executor agenta -title: Pluginy Agent Harness +title: Pluginy Harness agenta x-i18n: - generated_at: "2026-04-11T02:46:20Z" + generated_at: "2026-04-12T00:18:57Z" model: gpt-5.4 provider: openai - source_hash: 43c1f2c087230398b0162ed98449f239c8db1e822e51c7dcd40c54fa6c3374e1 + source_hash: 62b88fd24ce8b600179db27e16e8d764a2cd7a14e5c5df76374c33121aa5e365 source_path: plugins/sdk-agent-harness.md workflow: 15 --- # Pluginy Agent Harness -**Agent harness** to niskopoziomowy executor dla jednej przygotowanej tury agenta OpenClaw. Nie jest providerem modeli, nie jest kanałem i nie jest rejestrem narzędzi. +**Agent harness** to niskopoziomowy executor jednego przygotowanego kroku agenta OpenClaw. Nie jest dostawcą modeli, nie jest kanałem i nie jest rejestrem narzędzi. -Używaj tej powierzchni tylko dla wbudowanych lub zaufanych natywnych pluginów. Kontrakt jest nadal eksperymentalny, ponieważ typy parametrów celowo odzwierciedlają bieżący osadzony runner. +Używaj tej powierzchni tylko dla dołączonych lub zaufanych natywnych pluginów. Kontrakt jest nadal eksperymentalny, ponieważ typy parametrów celowo odzwierciedlają obecny osadzony runner. -## Kiedy używać harness +## Kiedy używać harnessu -Zarejestruj agent harness, gdy rodzina modeli ma własne natywne środowisko uruchomieniowe sesji, a zwykły transport providera OpenClaw jest niewłaściwą abstrakcją. +Zarejestruj agent harness, gdy rodzina modeli ma własny natywny runtime sesji, a standardowy transport dostawcy OpenClaw jest niewłaściwą abstrakcją. Przykłady: -- natywny serwer coding-agent, który zarządza wątkami i kompaktacją +- natywny serwer coding-agent, który zarządza wątkami i kompaktowaniem - lokalny CLI lub demon, który musi strumieniować natywne zdarzenia planu/rozumowania/narzędzi -- środowisko uruchomieniowe modelu, które oprócz transkryptu sesji OpenClaw potrzebuje własnego resume id +- runtime modelu, który oprócz transkryptu sesji OpenClaw potrzebuje własnego identyfikatora wznowienia -**Nie** rejestruj harness tylko po to, aby dodać nowe API LLM. Dla zwykłych interfejsów modeli HTTP lub WebSocket zbuduj [provider plugin](/pl/plugins/sdk-provider-plugins). +**Nie** rejestruj harnessu tylko po to, aby dodać nowe API LLM. Dla zwykłych modeli API HTTP lub WebSocket zbuduj [plugin dostawcy](/pl/plugins/sdk-provider-plugins). ## Czym nadal zarządza core -Zanim harness zostanie wybrany, OpenClaw już ustalił: +Zanim harness zostanie wybrany, OpenClaw ma już rozstrzygnięte: -- providera i model -- stan auth runtime -- poziom rozumowania i budżet kontekstu +- dostawcę i model +- stan uwierzytelniania runtime +- poziom myślenia i budżet kontekstu - plik transkryptu/sesji OpenClaw - workspace, sandbox i politykę narzędzi -- callbacki odpowiedzi kanału i callbacki streamingu +- callbacki odpowiedzi kanału i callbacki strumieniowania - politykę fallbacku modelu i przełączania modeli na żywo -Ten podział jest celowy. Harness uruchamia przygotowaną próbę; nie wybiera providerów, nie zastępuje dostarczania kanałowego i nie przełącza po cichu modeli. +Ten podział jest celowy. Harness uruchamia przygotowaną próbę; nie wybiera dostawców, nie zastępuje dostarczania przez kanał i nie przełącza po cichu modeli. -## Rejestracja harness +## Zarejestruj harness **Import:** `openclaw/plugin-sdk/agent-harness` @@ -83,42 +83,51 @@ export default definePluginEntry({ }); ``` -## Zasady wyboru +## Polityka wyboru -OpenClaw wybiera harness po rozstrzygnięciu providera/modelu: +OpenClaw wybiera harness po rozstrzygnięciu dostawcy/modelu: 1. `OPENCLAW_AGENT_RUNTIME=` wymusza zarejestrowany harness o tym id. 2. `OPENCLAW_AGENT_RUNTIME=pi` wymusza wbudowany harness PI. -3. `OPENCLAW_AGENT_RUNTIME=auto` pyta zarejestrowane harnessy, czy obsługują rozstrzygnięty provider/model. -4. Jeśli żaden zarejestrowany harness nie pasuje, OpenClaw używa PI, chyba że fallback PI jest wyłączony. +3. `OPENCLAW_AGENT_RUNTIME=auto` pyta zarejestrowane harnessy, czy obsługują rozstrzygniętego dostawcę/model. +4. Jeśli żaden zarejestrowany harness nie pasuje, OpenClaw używa PI, chyba że fallback do PI jest wyłączony. -Błędy wymuszonego plugin harness są zgłaszane jako błędy uruchomienia. W trybie `auto` OpenClaw może wrócić do PI, gdy wybrany plugin harness zakończy się błędem, zanim tura wywoła skutki uboczne. Ustaw `OPENCLAW_AGENT_HARNESS_FALLBACK=none` lub `embeddedHarness.fallback: "none"`, aby taki fallback był twardym błędem. +Błędy wymuszonego plugin harnessu są zgłaszane jako błędy uruchomienia. W trybie `auto` OpenClaw może wrócić do PI, jeśli wybrany plugin harness zakończy się błędem, zanim krok wywoła skutki uboczne. Ustaw `OPENCLAW_AGENT_HARNESS_FALLBACK=none` lub `embeddedHarness.fallback: "none"`, aby taki fallback zamiast tego był twardym błędem. -Dołączony plugin Codex rejestruje `codex` jako id swojego harness. Core traktuje to jak zwykłe id plugin harness; aliasy specyficzne dla Codex powinny należeć do pluginu albo konfiguracji operatora, a nie do wspólnego selektora runtime. +Dołączony plugin Codex rejestruje `codex` jako swoje id harnessu. Core traktuje to jak zwykłe id plugin harnessu; aliasy specyficzne dla Codex powinny należeć do pluginu lub konfiguracji operatora, a nie do współdzielonego selektora runtime. -## Parowanie provider plus harness +## Parowanie dostawcy i harnessu -Większość harnessów powinna także rejestrować providera. Provider udostępnia odwołania do modeli, stan auth, metadane modeli i wybór `/model` pozostałej części OpenClaw. Harness następnie zgłasza tego providera w `supports(...)`. +Większość harnessów powinna także zarejestrować dostawcę. Dostawca udostępnia reszcie OpenClaw referencje modeli, status uwierzytelnienia, metadane modeli i wybór `/model`. Następnie harness zgłasza tego dostawcę w `supports(...)`. Dołączony plugin Codex stosuje ten wzorzec: -- id providera: `codex` -- odwołania do modeli użytkownika: `codex/gpt-5.4`, `codex/gpt-5.2` albo inny model zwrócony przez serwer aplikacji Codex -- id harness: `codex` -- auth: syntetyczna dostępność providera, ponieważ harness Codex zarządza natywnym logowaniem/sesją Codex -- żądanie app-servera: OpenClaw wysyła do Codex samo id modelu i pozwala harnessowi rozmawiać z natywnym protokołem app-servera +- id dostawcy: `codex` +- referencje modeli użytkownika: `codex/gpt-5.4`, `codex/gpt-5.2` lub inny model zwracany przez serwer aplikacji Codex +- id harnessu: `codex` +- uwierzytelnianie: syntetyczna dostępność dostawcy, ponieważ harness Codex zarządza natywnym logowaniem/sesją Codex +- żądanie app-server: OpenClaw wysyła do Codex samo id modelu i pozwala harnessowi komunikować się z natywnym protokołem app-server -Plugin Codex jest dodatkiem. Zwykłe odwołania `openai/gpt-*` pozostają odwołaniami providera OpenAI i nadal używają normalnej ścieżki providera OpenClaw. Wybierz `codex/gpt-*`, gdy chcesz auth zarządzanego przez Codex, wykrywania modeli Codex, natywnych wątków i wykonywania przez app-server Codex. `/model` może przełączać się między modelami Codex zwróconymi przez serwer aplikacji Codex bez konieczności posiadania poświadczeń providera OpenAI. +Plugin Codex jest dodatkiem. Zwykłe referencje `openai/gpt-*` pozostają referencjami dostawcy OpenAI i nadal używają standardowej ścieżki dostawcy OpenClaw. Wybierz `codex/gpt-*`, gdy chcesz uwierzytelniania zarządzanego przez Codex, wykrywania modeli Codex, natywnych wątków i wykonywania przez app-server Codex. `/model` może przełączać się między modelami Codex zwracanymi przez app-server Codex bez konieczności posiadania poświadczeń dostawcy OpenAI. Informacje o konfiguracji operatora, przykłady prefiksów modeli i konfiguracje tylko dla Codex znajdziesz w [Codex Harness](/pl/plugins/codex-harness). -OpenClaw wymaga app-servera Codex `0.118.0` lub nowszego. Plugin Codex sprawdza handshake inicjalizacji app-servera i blokuje starsze lub niezwersjonowane serwery, aby OpenClaw działał tylko z powierzchnią protokołu, na której został przetestowany. +OpenClaw wymaga app-server Codex w wersji `0.118.0` lub nowszej. Plugin Codex sprawdza handshake inicjalizacji app-server i blokuje starsze lub niewersjonowane serwery, aby OpenClaw działał tylko z powierzchnią protokołu, z którą był testowany. -## Wyłącz fallback PI +### Tryb natywnego harnessu Codex -Domyślnie OpenClaw uruchamia osadzonych agentów z `agents.defaults.embeddedHarness` ustawionym na `{ runtime: "auto", fallback: "pi" }`. W trybie `auto` zarejestrowane plugin harnessy mogą przejąć parę provider/model. Jeśli żaden nie pasuje albo jeśli automatycznie wybrany plugin harness zakończy się błędem przed wygenerowaniem danych wyjściowych, OpenClaw wraca do PI. +Dołączony harness `codex` to natywny tryb Codex dla osadzonych kroków agenta OpenClaw. Najpierw włącz dołączony plugin `codex` i uwzględnij `codex` w `plugins.allow`, jeśli twoja konfiguracja używa restrykcyjnej allowlisty. Różni się od `openai-codex/*`: -Ustaw `fallback: "none"`, gdy musisz udowodnić, że plugin harness jest jedynym używanym runtime. To wyłącza automatyczny fallback PI; nie blokuje jawnego `runtime: "pi"` ani `OPENCLAW_AGENT_RUNTIME=pi`. +- `openai-codex/*` używa OAuth ChatGPT/Codex przez standardową ścieżkę dostawcy OpenClaw. +- `codex/*` używa dołączonego dostawcy Codex i kieruje krok przez app-server Codex. + +Gdy ten tryb działa, Codex zarządza natywnym id wątku, zachowaniem wznowienia, kompaktowaniem i wykonywaniem przez app-server. OpenClaw nadal zarządza kanałem czatu, widocznym mirrorowaniem transkryptu, polityką narzędzi, zatwierdzeniami, dostarczaniem mediów i wyborem sesji. Użyj `embeddedHarness.runtime: "codex"` z `embeddedHarness.fallback: "none"`, gdy musisz potwierdzić, że używana jest ścieżka app-server Codex, a fallback do PI nie ukrywa uszkodzonego natywnego harnessu. + +## Wyłącz fallback do PI + +Domyślnie OpenClaw uruchamia osadzonych agentów z `agents.defaults.embeddedHarness` ustawionym na `{ runtime: "auto", fallback: "pi" }`. W trybie `auto` zarejestrowane plugin harnessy mogą zgłaszać obsługę pary dostawca/model. Jeśli żaden nie pasuje albo jeśli automatycznie wybrany plugin harness zakończy się błędem przed wygenerowaniem wyjścia, OpenClaw wraca do PI. + +Ustaw `fallback: "none"`, gdy musisz potwierdzić, że plugin harness jest jedynym używanym runtime. Wyłącza to automatyczny fallback do PI; nie blokuje jawnego `runtime: "pi"` ani `OPENCLAW_AGENT_RUNTIME=pi`. Dla osadzonych uruchomień tylko z Codex: @@ -136,7 +145,7 @@ Dla osadzonych uruchomień tylko z Codex: } ``` -Jeśli chcesz, aby dowolny zarejestrowany plugin harness przejmował pasujące modele, ale nigdy nie chcesz, aby OpenClaw po cichu wracał do PI, pozostaw `runtime: "auto"` i wyłącz fallback: +Jeśli chcesz, aby dowolny zarejestrowany plugin harness zgłaszał pasujące modele, ale nigdy nie chcesz, aby OpenClaw po cichu wracał do PI, pozostaw `runtime: "auto"` i wyłącz fallback: ```json { @@ -151,7 +160,7 @@ Jeśli chcesz, aby dowolny zarejestrowany plugin harness przejmował pasujące m } ``` -Nadpisania dla konkretnych agentów mają ten sam kształt: +Nadpisania dla poszczególnych agentów używają tego samego kształtu: ```json { @@ -176,7 +185,7 @@ Nadpisania dla konkretnych agentów mają ten sam kształt: } ``` -`OPENCLAW_AGENT_RUNTIME` nadal nadpisuje skonfigurowany runtime. Użyj `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, aby wyłączyć fallback PI z poziomu środowiska. +`OPENCLAW_AGENT_RUNTIME` nadal nadpisuje skonfigurowany runtime. Użyj `OPENCLAW_AGENT_HARNESS_FALLBACK=none`, aby wyłączyć fallback do PI z poziomu środowiska. ```bash OPENCLAW_AGENT_RUNTIME=codex \ @@ -184,39 +193,39 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \ openclaw gateway run ``` -Przy wyłączonym fallbacku sesja kończy się błędem wcześnie, gdy żądany harness nie jest zarejestrowany, nie obsługuje rozstrzygniętego providera/modelu albo kończy się błędem przed wygenerowaniem skutków ubocznych tury. Jest to celowe dla wdrożeń tylko z Codex i dla testów live, które muszą potwierdzić, że faktycznie używana jest ścieżka app-servera Codex. +Przy wyłączonym fallbacku sesja kończy się wcześnie błędem, gdy żądany harness nie jest zarejestrowany, nie obsługuje rozstrzygniętego dostawcy/modelu albo kończy się błędem przed wywołaniem skutków ubocznych kroku. Jest to zamierzone dla wdrożeń tylko z Codex oraz dla testów live, które muszą potwierdzić, że ścieżka app-server Codex jest rzeczywiście używana. -To ustawienie kontroluje tylko osadzony agent harness. Nie wyłącza routingu modeli specyficznych dla providerów dla obrazów, wideo, muzyki, TTS, PDF ani innych typów. +To ustawienie kontroluje tylko osadzony agent harness. Nie wyłącza routingu modeli specyficznego dla dostawcy dla obrazów, wideo, muzyki, TTS, PDF ani innych funkcji. -## Natywne sesje i lustro transkryptu +## Natywne sesje i mirror transkryptu -Harness może przechowywać natywne id sesji, id wątku albo token wznowienia po stronie demona. Powiąż to jawnie z sesją OpenClaw i nadal odzwierciedlaj widoczne dla użytkownika dane wyjściowe asystenta/narzędzi w transkrypcie OpenClaw. +Harness może przechowywać natywne id sesji, id wątku albo token wznowienia po stronie demona. Zachowuj to powiązanie jawnie skojarzone z sesją OpenClaw i nadal mirroruj widoczne dla użytkownika wyjście asystenta/narzędzi do transkryptu OpenClaw. -Transkrypt OpenClaw pozostaje warstwą zgodności dla: +Transkrypt OpenClaw pozostaje warstwą kompatybilności dla: -- historii sesji widocznej w kanałach -- wyszukiwania i indeksowania transkryptów -- późniejszego przełączenia z powrotem na wbudowany harness PI +- historii sesji widocznej w kanale +- wyszukiwania i indeksowania transkryptu +- przełączenia z powrotem na wbudowany harness PI w późniejszym kroku - ogólnego zachowania `/new`, `/reset` i usuwania sesji -Jeśli harness przechowuje powiązanie sidecar, zaimplementuj `reset(...)`, aby OpenClaw mógł je wyczyścić przy resetowaniu powiązanej sesji OpenClaw. +Jeśli twój harness przechowuje powiązanie sidecar, zaimplementuj `reset(...)`, aby OpenClaw mógł je wyczyścić, gdy powiązana sesja OpenClaw zostanie zresetowana. ## Wyniki narzędzi i mediów -Core tworzy listę narzędzi OpenClaw i przekazuje ją do przygotowanej próby. Gdy harness wykonuje dynamiczne wywołanie narzędzia, zwróć wynik narzędzia przez kształt wyniku harness zamiast samodzielnie wysyłać media kanałowe. +Core konstruuje listę narzędzi OpenClaw i przekazuje ją do przygotowanej próby. Gdy harness wykonuje dynamiczne wywołanie narzędzia, zwróć wynik narzędzia przez kształt wyniku harnessu zamiast samodzielnie wysyłać media kanału. -Dzięki temu wyjścia tekstowe, obrazów, wideo, muzyki, TTS, zatwierdzeń i narzędzi wiadomości pozostają na tej samej ścieżce dostarczania co uruchomienia oparte na PI. +Dzięki temu wyjścia tekstowe, obrazy, wideo, muzyka, TTS, zatwierdzenia i wyjścia narzędzi do komunikacji pozostają na tej samej ścieżce dostarczania co uruchomienia oparte na PI. -## Bieżące ograniczenia +## Obecne ograniczenia -- Publiczna ścieżka importu jest ogólna, ale niektóre aliasy typów prób/wyników nadal zawierają nazwy `Pi` ze względu na zgodność. -- Instalacja harnessów firm trzecich jest eksperymentalna. Preferuj provider pluginy, dopóki nie potrzebujesz natywnego środowiska uruchomieniowego sesji. -- Przełączanie harnessów między turami jest obsługiwane. Nie przełączaj harnessów w środku tury po rozpoczęciu natywnych narzędzi, zatwierdzeń, tekstu asystenta lub wysyłania wiadomości. +- Publiczna ścieżka importu jest ogólna, ale niektóre aliasy typów prób/wyników nadal zawierają nazwy `Pi` ze względu na kompatybilność. +- Instalacja harnessów firm trzecich jest eksperymentalna. Preferuj pluginy dostawców, dopóki nie potrzebujesz natywnego runtime sesji. +- Przełączanie harnessów między krokami jest obsługiwane. Nie przełączaj harnessów w środku kroku po rozpoczęciu natywnych narzędzi, zatwierdzeń, tekstu asystenta lub wysyłania wiadomości. ## Powiązane - [Przegląd SDK](/pl/plugins/sdk-overview) -- [Runtime Helpers](/pl/plugins/sdk-runtime) -- [Provider Plugins](/pl/plugins/sdk-provider-plugins) +- [Pomocniki runtime](/pl/plugins/sdk-runtime) +- [Pluginy dostawców](/pl/plugins/sdk-provider-plugins) - [Codex Harness](/pl/plugins/codex-harness) -- [Providery modeli](/pl/concepts/model-providers) +- [Dostawcy modeli](/pl/concepts/model-providers) diff --git a/docs/pl/providers/openai.md b/docs/pl/providers/openai.md index 0ea264a8d..042841a44 100644 --- a/docs/pl/providers/openai.md +++ b/docs/pl/providers/openai.md @@ -2,30 +2,32 @@ read_when: - Chcesz używać modeli OpenAI w OpenClaw - Chcesz używać uwierzytelniania subskrypcją Codex zamiast kluczy API -summary: Używanie OpenAI przez klucze API lub subskrypcję Codex w OpenClaw + - Potrzebujesz bardziej rygorystycznego zachowania wykonywania agenta GPT-5 +summary: Używaj OpenAI za pomocą kluczy API lub subskrypcji Codex w OpenClaw title: OpenAI x-i18n: - generated_at: "2026-04-07T09:50:07Z" + generated_at: "2026-04-12T00:18:55Z" model: gpt-5.4 provider: openai - source_hash: 6a2ce1ce5f085fe55ec50b8d20359180b9002c9730820cd5b0e011c3bf807b64 + source_hash: 7aa06fba9ac901e663685a6b26443a2f6aeb6ec3589d939522dc87cbb43497b4 source_path: providers/openai.md workflow: 15 --- # OpenAI -OpenAI udostępnia API dla deweloperów dla modeli GPT. Codex obsługuje **logowanie przez ChatGPT** dla dostępu -subskrypcyjnego lub **logowanie kluczem API** dla dostępu rozliczanego według użycia. Chmura Codex wymaga logowania przez ChatGPT. -OpenAI jawnie wspiera użycie subskrypcyjnego OAuth w zewnętrznych narzędziach/przepływach pracy, takich jak OpenClaw. +OpenAI udostępnia interfejsy API dla deweloperów do modeli GPT. Codex obsługuje **logowanie przez ChatGPT** dla dostępu w ramach subskrypcji +lub logowanie za pomocą **klucza API** dla dostępu rozliczanego według użycia. Chmura Codex wymaga logowania przez ChatGPT. +OpenAI jawnie wspiera użycie OAuth subskrypcji w zewnętrznych narzędziach/przepływach pracy, takich jak OpenClaw. ## Domyślny styl interakcji -OpenClaw może dodać małą nakładkę promptu specyficzną dla OpenAI zarówno dla uruchomień `openai/*`, jak i +OpenClaw może dodać niewielką nakładkę promptu specyficzną dla OpenAI zarówno dla uruchomień `openai/*`, jak i `openai-codex/*`. Domyślnie nakładka utrzymuje asystenta jako ciepłego, -współpracującego, zwięzłego, bezpośredniego i nieco bardziej ekspresyjnego emocjonalnie, -nie zastępując bazowego promptu systemowego OpenClaw. Przyjazna nakładka -pozwala też okazjonalnie użyć emoji, gdy pasuje to naturalnie, przy zachowaniu ogólnie zwięzłej odpowiedzi. +współpracującego, zwięzłego, bezpośredniego i trochę bardziej emocjonalnie ekspresyjnego, +bez zastępowania bazowego promptu systemowego OpenClaw. Przyjazna nakładka +dopuszcza też okazjonalne emoji, gdy pasuje to naturalnie, przy zachowaniu ogólnej zwięzłości +wypowiedzi. Klucz konfiguracji: @@ -33,7 +35,7 @@ Klucz konfiguracji: Dozwolone wartości: -- `"friendly"`: domyślne; włącza nakładkę specyficzną dla OpenAI. +- `"friendly"`: domyślnie; włącza nakładkę specyficzną dla OpenAI. - `"on"`: alias dla `"friendly"`. - `"off"`: wyłącza nakładkę i używa tylko bazowego promptu OpenClaw. @@ -44,7 +46,7 @@ Zakres: - Nie wpływa na innych dostawców. To zachowanie jest domyślnie włączone. Zachowaj jawnie `"friendly"`, jeśli chcesz, -aby przetrwało przyszłe lokalne zmiany konfiguracji: +aby przetrwało to przyszłe lokalne zmiany konfiguracji: ```json5 { @@ -62,7 +64,7 @@ aby przetrwało przyszłe lokalne zmiany konfiguracji: ### Wyłącz nakładkę promptu OpenAI -Jeśli chcesz niezmodyfikowanego bazowego promptu OpenClaw, ustaw nakładkę na `"off"`: +Jeśli chcesz niezmodyfikowany bazowy prompt OpenClaw, ustaw nakładkę na `"off"`: ```json5 { @@ -78,25 +80,25 @@ Jeśli chcesz niezmodyfikowanego bazowego promptu OpenClaw, ustaw nakładkę na } ``` -Możesz też ustawić to bezpośrednio przez konfigurację CLI: +Możesz też ustawić to bezpośrednio za pomocą CLI konfiguracji: ```bash openclaw config set plugins.entries.openai.config.personality off ``` -OpenClaw normalizuje to ustawienie bez rozróżniania wielkości liter w czasie działania, więc wartości takie jak -`"Off"` również wyłączą przyjazną nakładkę. +OpenClaw normalizuje to ustawienie w czasie działania bez rozróżniania wielkości liter, więc wartości takie jak +`"Off"` również wyłączają przyjazną nakładkę. ## Opcja A: klucz API OpenAI (OpenAI Platform) -**Najlepsze do:** bezpośredniego dostępu do API i rozliczania według użycia. -Pobierz klucz API z panelu OpenAI. +**Najlepsze dla:** bezpośredniego dostępu do API i rozliczania według użycia. +Pobierz swój klucz API z panelu OpenAI. -Podsumowanie ścieżki: +Podsumowanie ścieżek: - `openai/gpt-5.4` = bezpośrednia ścieżka API OpenAI Platform - Wymaga `OPENAI_API_KEY` (lub równoważnej konfiguracji dostawcy OpenAI) -- W OpenClaw logowanie ChatGPT/Codex jest routowane przez `openai-codex/*`, a nie `openai/*` +- W OpenClaw logowanie ChatGPT/Codex jest kierowane przez `openai-codex/*`, a nie `openai/*` ### Konfiguracja CLI @@ -115,25 +117,26 @@ openclaw onboard --openai-api-key "$OPENAI_API_KEY" } ``` -Aktualna dokumentacja modeli API OpenAI wymienia `gpt-5.4` i `gpt-5.4-pro` dla bezpośredniego +Bieżąca dokumentacja modeli API OpenAI wymienia `gpt-5.4` i `gpt-5.4-pro` dla bezpośredniego użycia API OpenAI. OpenClaw przekazuje oba przez ścieżkę `openai/*` Responses. -OpenClaw celowo ukrywa przestarzały wiersz `openai/gpt-5.3-codex-spark`, +OpenClaw celowo ukrywa nieaktualny wiersz `openai/gpt-5.3-codex-spark`, ponieważ bezpośrednie wywołania API OpenAI odrzucają go w rzeczywistym ruchu. -OpenClaw **nie** udostępnia `openai/gpt-5.3-codex-spark` na bezpośredniej ścieżce API OpenAI. -`pi-ai` nadal dostarcza wbudowany wiersz dla tego modelu, ale rzeczywiste żądania API OpenAI są obecnie odrzucane. Spark jest traktowany w OpenClaw jako wyłącznie Codex. +OpenClaw **nie** udostępnia `openai/gpt-5.3-codex-spark` na bezpośredniej ścieżce OpenAI +API. `pi-ai` nadal zawiera wbudowany wiersz dla tego modelu, ale rzeczywiste żądania do API OpenAI +są obecnie odrzucane. W OpenClaw Spark jest traktowany jako dostępny tylko w Codex. ## Generowanie obrazów -Dołączona wtyczka `openai` rejestruje także generowanie obrazów przez wspólne +Dołączona w pakiecie wtyczka `openai` rejestruje też generowanie obrazów przez współdzielone narzędzie `image_generate`. -- Domyślny model obrazu: `openai/gpt-image-1` +- Domyślny model obrazów: `openai/gpt-image-1` - Generowanie: do 4 obrazów na żądanie - Tryb edycji: włączony, do 5 obrazów referencyjnych - Obsługuje `size` - Aktualne zastrzeżenie specyficzne dla OpenAI: OpenClaw obecnie nie przekazuje nadpisań `aspectRatio` ani - `resolution` do OpenAI Images API + `resolution` do API OpenAI Images Aby używać OpenAI jako domyślnego dostawcy obrazów: @@ -149,21 +152,21 @@ Aby używać OpenAI jako domyślnego dostawcy obrazów: } ``` -Zobacz [Generowanie obrazów](/pl/tools/image-generation), aby poznać wspólne parametry +Zobacz [Generowanie obrazów](/pl/tools/image-generation), aby poznać współdzielone parametry narzędzia, wybór dostawcy i zachowanie failover. ## Generowanie wideo -Dołączona wtyczka `openai` rejestruje także generowanie wideo przez wspólne +Dołączona w pakiecie wtyczka `openai` rejestruje też generowanie wideo przez współdzielone narzędzie `video_generate`. - Domyślny model wideo: `openai/sora-2` -- Tryby: text-to-video, image-to-video oraz przepływy referencji/edycji pojedynczego wideo -- Bieżące limity: 1 obraz lub 1 referencyjne wejście wideo +- Tryby: tekst-na-wideo, obraz-na-wideo oraz przepływy referencji/edycji pojedynczego wideo +- Obecne limity: 1 obraz lub 1 wejście referencyjne wideo - Aktualne zastrzeżenie specyficzne dla OpenAI: OpenClaw obecnie przekazuje tylko nadpisania `size` dla natywnego generowania wideo OpenAI. Nieobsługiwane opcjonalne nadpisania, takie jak `aspectRatio`, `resolution`, `audio` i `watermark`, są ignorowane - i zwracane jako ostrzeżenie narzędzia. + i zgłaszane z powrotem jako ostrzeżenie narzędzia. Aby używać OpenAI jako domyślnego dostawcy wideo: @@ -179,19 +182,19 @@ Aby używać OpenAI jako domyślnego dostawcy wideo: } ``` -Zobacz [Generowanie wideo](/pl/tools/video-generation), aby poznać wspólne parametry +Zobacz [Generowanie wideo](/pl/tools/video-generation), aby poznać współdzielone parametry narzędzia, wybór dostawcy i zachowanie failover. ## Opcja B: subskrypcja OpenAI Code (Codex) -**Najlepsze do:** używania dostępu subskrypcyjnego ChatGPT/Codex zamiast klucza API. -Chmura Codex wymaga logowania przez ChatGPT, podczas gdy CLI Codex obsługuje logowanie przez ChatGPT lub klucz API. +**Najlepsze dla:** używania dostępu w ramach subskrypcji ChatGPT/Codex zamiast klucza API. +Chmura Codex wymaga logowania przez ChatGPT, natomiast CLI Codex obsługuje logowanie przez ChatGPT lub klucz API. -Podsumowanie ścieżki: +Podsumowanie ścieżek: - `openai-codex/gpt-5.4` = ścieżka OAuth ChatGPT/Codex - Używa logowania ChatGPT/Codex, a nie bezpośredniego klucza API OpenAI Platform -- Limity po stronie dostawcy dla `openai-codex/*` mogą różnić się od doświadczenia ChatGPT w web/app +- Limity po stronie dostawcy dla `openai-codex/*` mogą różnić się od doświadczenia w wersji webowej/aplikacji ChatGPT ### Konfiguracja CLI (Codex OAuth) @@ -211,42 +214,42 @@ openclaw models auth login --provider openai-codex } ``` -Aktualna dokumentacja Codex OpenAI wymienia `gpt-5.4` jako bieżący model Codex. OpenClaw -mapuje go na `openai-codex/gpt-5.4` do użycia z OAuth ChatGPT/Codex. +Bieżąca dokumentacja Codex OpenAI wymienia `gpt-5.4` jako aktualny model Codex. OpenClaw +mapuje to na `openai-codex/gpt-5.4` dla użycia OAuth ChatGPT/Codex. Ta ścieżka jest celowo oddzielona od `openai/gpt-5.4`. Jeśli chcesz bezpośredniej ścieżki API OpenAI Platform, użyj `openai/*` z kluczem API. Jeśli chcesz logowania ChatGPT/Codex, użyj `openai-codex/*`. -Jeśli onboarding ponownie wykorzystuje istniejące logowanie Codex CLI, te poświadczenia pozostają -zarządzane przez Codex CLI. Po wygaśnięciu OpenClaw najpierw ponownie odczytuje zewnętrzne źródło Codex -i, gdy dostawca może je odświeżyć, zapisuje odświeżone poświadczenie z powrotem -do pamięci Codex zamiast przejmować je we własnej kopii tylko dla OpenClaw. +Jeśli onboarding wykorzysta ponownie istniejące logowanie CLI Codex, te poświadczenia pozostaną +zarządzane przez CLI Codex. Po wygaśnięciu OpenClaw najpierw ponownie odczytuje zewnętrzne źródło Codex +i, gdy dostawca może je odświeżyć, zapisuje odświeżone poświadczenie +z powrotem do magazynu Codex zamiast przejmować je do osobnej kopii używanej wyłącznie przez OpenClaw. Jeśli Twoje konto Codex ma uprawnienia do Codex Spark, OpenClaw obsługuje również: - `openai-codex/gpt-5.3-codex-spark` -OpenClaw traktuje Codex Spark jako wyłącznie Codex. Nie udostępnia bezpośredniej -ścieżki klucza API `openai/gpt-5.3-codex-spark`. +OpenClaw traktuje Codex Spark jako dostępny tylko w Codex. Nie udostępnia bezpośredniej +ścieżki z kluczem API `openai/gpt-5.3-codex-spark`. -OpenClaw zachowuje również `openai-codex/gpt-5.3-codex-spark`, gdy `pi-ai` -go wykryje. Traktuj go jako zależny od uprawnień i eksperymentalny: Codex Spark jest +OpenClaw zachowuje też `openai-codex/gpt-5.3-codex-spark`, gdy `pi-ai` +go wykryje. Traktuj to jako zależne od uprawnień i eksperymentalne: Codex Spark jest oddzielny od GPT-5.4 `/fast`, a dostępność zależy od zalogowanego konta Codex / ChatGPT. ### Limit okna kontekstu Codex -OpenClaw traktuje metadane modelu Codex i limit kontekstu w runtime jako oddzielne +OpenClaw traktuje metadane modelu Codex i limit kontekstu w czasie działania jako oddzielne wartości. Dla `openai-codex/gpt-5.4`: - natywne `contextWindow`: `1050000` -- domyślny limit `contextTokens` w runtime: `272000` +- domyślny limit `contextTokens` w czasie działania: `272000` -Pozwala to zachować prawdziwe metadane modelu, przy jednoczesnym utrzymaniu mniejszego domyślnego -okna runtime, które w praktyce ma lepsze właściwości opóźnienia i jakości. +Pozwala to zachować zgodność metadanych modelu z prawdą, a jednocześnie utrzymać mniejsze domyślne okno działania, +które w praktyce zapewnia lepszą latencję i jakość. Jeśli chcesz innego efektywnego limitu, ustaw `models.providers..models[].contextTokens`: @@ -268,34 +271,34 @@ Jeśli chcesz innego efektywnego limitu, ustaw `models.providers..mode ``` Używaj `contextWindow` tylko wtedy, gdy deklarujesz lub nadpisujesz natywne metadane modelu. -Używaj `contextTokens`, gdy chcesz ograniczyć budżet kontekstu w runtime. +Używaj `contextTokens`, gdy chcesz ograniczyć budżet kontekstu w czasie działania. ### Domyślny transport -OpenClaw używa `pi-ai` do strumieniowania modeli. Dla `openai/*` i -`openai-codex/*` domyślnym transportem jest `"auto"` (najpierw WebSocket, potem fallback do SSE). +OpenClaw używa `pi-ai` do strumieniowania modeli. Dla obu `openai/*` i +`openai-codex/*` domyślnym transportem jest `"auto"` (najpierw WebSocket, potem fallback +do SSE). -W trybie `"auto"` OpenClaw wykonuje również jedną ponowną próbę po wczesnej, możliwej do ponowienia awarii WebSocket, -zanim przełączy się na SSE. Wymuszony tryb `"websocket"` nadal bezpośrednio pokazuje błędy transportu +W trybie `"auto"` OpenClaw wykonuje też jedną ponowną próbę po wczesnej, możliwej do ponowienia awarii WebSocket, +zanim przełączy się na SSE. Wymuszony tryb `"websocket"` nadal pokazuje błędy transportu bezpośrednio, zamiast ukrywać je za fallbackiem. -Po błędzie WebSocket przy połączeniu lub na początku tury w trybie `"auto"` OpenClaw oznacza -ścieżkę WebSocket tej sesji jako zdegradowaną na około 60 sekund i wysyła -kolejne tury przez SSE podczas tego cooldownu zamiast przełączać się chaotycznie między +Po błędzie połączenia lub błędzie WebSocket na początku tury w trybie `"auto"` OpenClaw oznacza +ścieżkę WebSocket tej sesji jako pogorszoną na około 60 sekund i wysyła +kolejne tury przez SSE w czasie schłodzenia, zamiast bez końca przełączać się między transportami. Dla natywnych punktów końcowych rodziny OpenAI (`openai/*`, `openai-codex/*` i Azure -OpenAI Responses) OpenClaw dołącza też stabilny stan tożsamości sesji i tury -do żądań, aby ponowne próby, ponowne połączenia i fallback do SSE pozostawały wyrównane do tej samej -tożsamości rozmowy. Na natywnych ścieżkach rodziny OpenAI obejmuje to stabilne nagłówki tożsamości żądania sesji/tury oraz pasujące metadane transportu. +OpenAI Responses) OpenClaw dołącza również stabilny stan tożsamości sesji i tury +do żądań, aby ponowienia, ponowne połączenia i fallback do SSE pozostawały przypisane do tej samej +tożsamości konwersacji. W natywnych ścieżkach rodziny OpenAI obejmuje to stabilne nagłówki tożsamości żądania sesji/tury oraz pasujące metadane transportu. -OpenClaw normalizuje również liczniki użycia OpenAI między wariantami transportu, zanim +OpenClaw normalizuje też liczniki użycia OpenAI między wariantami transportu, zanim trafią one do powierzchni sesji/statusu. Natywny ruch OpenAI/Codex Responses może raportować użycie jako `input_tokens` / `output_tokens` albo `prompt_tokens` / `completion_tokens`; OpenClaw traktuje je jako te same liczniki wejścia i wyjścia dla `/status`, `/usage` i logów sesji. Gdy natywny ruch WebSocket pomija `total_tokens` -(lub raportuje `0`), OpenClaw przełącza się na znormalizowaną sumę wejścia + wyjścia, -aby widoki sesji/statusu pozostały wypełnione. +(lub raportuje `0`), OpenClaw wraca do znormalizowanej sumy wejścia i wyjścia, aby wyświetlanie sesji/statusu pozostało wypełnione. Możesz ustawić `agents.defaults.models..params.transport`: @@ -303,8 +306,7 @@ Możesz ustawić `agents.defaults.models..params.transport`: - `"websocket"`: wymuś WebSocket - `"auto"`: najpierw spróbuj WebSocket, potem fallback do SSE -Dla `openai/*` (Responses API) OpenClaw domyślnie włącza również rozgrzewanie WebSocket -(`openaiWsWarmup: true`), gdy używany jest transport WebSocket. +Dla `openai/*` (Responses API) OpenClaw domyślnie włącza też rozgrzewkę WebSocket (`openaiWsWarmup: true`), gdy używany jest transport WebSocket. Powiązana dokumentacja OpenAI: @@ -328,12 +330,12 @@ Powiązana dokumentacja OpenAI: } ``` -### Rozgrzewanie OpenAI WebSocket +### Rozgrzewka OpenAI WebSocket -Dokumentacja OpenAI opisuje rozgrzewanie jako opcjonalne. OpenClaw domyślnie je włącza dla -`openai/*`, aby zmniejszyć opóźnienie pierwszej tury przy użyciu transportu WebSocket. +Dokumentacja OpenAI opisuje rozgrzewkę jako opcjonalną. OpenClaw domyślnie ją włącza dla +`openai/*`, aby skrócić opóźnienie pierwszej tury przy użyciu transportu WebSocket. -### Wyłącz rozgrzewanie +### Wyłącz rozgrzewkę ```json5 { @@ -351,7 +353,7 @@ Dokumentacja OpenAI opisuje rozgrzewanie jako opcjonalne. OpenClaw domyślnie je } ``` -### Jawnie włącz rozgrzewanie +### Włącz rozgrzewkę jawnie ```json5 { @@ -369,7 +371,7 @@ Dokumentacja OpenAI opisuje rozgrzewanie jako opcjonalne. OpenClaw domyślnie je } ``` -### OpenAI i priorytetowe przetwarzanie Codex +### Priorytetowe przetwarzanie OpenAI i Codex API OpenAI udostępnia priorytetowe przetwarzanie przez `service_tier=priority`. W OpenClaw ustaw `agents.defaults.models["/"].params.serviceTier`, @@ -406,27 +408,27 @@ Ważne zachowanie: - bezpośrednie `openai/*` musi wskazywać na `api.openai.com` - `openai-codex/*` musi wskazywać na `chatgpt.com/backend-api` -- jeśli kierujesz któregokolwiek dostawcę przez inny base URL lub proxy, OpenClaw pozostawia `service_tier` bez zmian +- jeśli kierujesz któregokolwiek dostawcę przez inny podstawowy URL lub proxy, OpenClaw pozostawia `service_tier` bez zmian -### Tryb szybki OpenAI +### Tryb fast OpenAI -OpenClaw udostępnia wspólny przełącznik trybu szybkiego dla sesji `openai/*` i +OpenClaw udostępnia współdzielony przełącznik trybu fast zarówno dla sesji `openai/*`, jak i `openai-codex/*`: - Czat/UI: `/fast status|on|off` - Konfiguracja: `agents.defaults.models["/"].params.fastMode` -Gdy tryb szybki jest włączony, OpenClaw mapuje go na priorytetowe przetwarzanie OpenAI: +Gdy tryb fast jest włączony, OpenClaw mapuje go na priorytetowe przetwarzanie OpenAI: - bezpośrednie wywołania Responses `openai/*` do `api.openai.com` wysyłają `service_tier = "priority"` - wywołania Responses `openai-codex/*` do `chatgpt.com/backend-api` również wysyłają `service_tier = "priority"` -- istniejące wartości `service_tier` w ładunku są zachowywane -- tryb szybki nie przepisuje `reasoning` ani `text.verbosity` +- istniejące wartości `service_tier` w payloadzie są zachowywane +- tryb fast nie nadpisuje `reasoning` ani `text.verbosity` -W szczególności dla GPT 5.4 najczęstsza konfiguracja to: +Dla GPT 5.4 w szczególności najczęstsza konfiguracja to: -- wyślij `/fast on` w sesji używającej `openai/gpt-5.4` lub `openai-codex/gpt-5.4` -- albo ustaw `agents.defaults.models["openai/gpt-5.4"].params.fastMode = true` +- wysłanie `/fast on` w sesji używającej `openai/gpt-5.4` lub `openai-codex/gpt-5.4` +- albo ustawienie `agents.defaults.models["openai/gpt-5.4"].params.fastMode = true` - jeśli używasz też OAuth Codex, ustaw również `agents.defaults.models["openai-codex/gpt-5.4"].params.fastMode = true` Przykład: @@ -453,45 +455,72 @@ Przykład: ``` Nadpisania sesji mają pierwszeństwo przed konfiguracją. Wyczyszczenie nadpisania sesji w interfejsie Sessions UI -przywraca sesję do skonfigurowanej wartości domyślnej. +przywraca w sesji domyślną wartość skonfigurowaną. ### Natywne OpenAI a ścieżki zgodne z OpenAI OpenClaw traktuje bezpośrednie punkty końcowe OpenAI, Codex i Azure OpenAI inaczej -niż generyczne proxy `/v1` zgodne z OpenAI: +niż ogólne proxy `/v1` zgodne z OpenAI: - natywne ścieżki `openai/*`, `openai-codex/*` i Azure OpenAI zachowują - `reasoning: { effort: "none" }`, gdy jawnie wyłączysz reasoning -- natywne ścieżki rodziny OpenAI domyślnie ustawiają schematy narzędzi w trybie strict + `reasoning: { effort: "none" }` bez zmian, gdy jawnie wyłączysz rozumowanie +- natywne ścieżki z rodziny OpenAI domyślnie ustawiają schematy narzędzi w trybie ścisłym - ukryte nagłówki atrybucji OpenClaw (`originator`, `version` i - `User-Agent`) są dołączane tylko na zweryfikowanych natywnych hostach OpenAI - (`api.openai.com`) i natywnych hostach Codex (`chatgpt.com/backend-api`) + `User-Agent`) są dołączane tylko do zweryfikowanych natywnych hostów OpenAI + (`api.openai.com`) i natywnych hostów Codex (`chatgpt.com/backend-api`) - natywne ścieżki OpenAI/Codex zachowują kształtowanie żądań specyficzne dla OpenAI, takie jak - `service_tier`, Responses `store`, ładunki zgodności reasoning OpenAI oraz - podpowiedzi cache promptów -- ścieżki zgodne z OpenAI w stylu proxy zachowują luźniejsze zachowanie zgodności i nie - wymuszają ścisłych schematów narzędzi, kształtowania żądań tylko dla natywnych tras ani ukrytych + `service_tier`, Responses `store`, payloady zgodności z rozumowaniem OpenAI oraz + wskazówki pamięci podręcznej promptów +- ścieżki w stylu proxy zgodne z OpenAI zachowują luźniejsze zachowanie zgodności i nie + wymuszają ścisłych schematów narzędzi, kształtowania żądań tylko dla ścieżek natywnych ani ukrytych nagłówków atrybucji OpenAI/Codex -Azure OpenAI pozostaje w koszyku routingu natywnego pod względem transportu i zachowania zgodności, +Azure OpenAI pozostaje w koszyku routingu natywnego pod względem zachowania transportu i zgodności, ale nie otrzymuje ukrytych nagłówków atrybucji OpenAI/Codex. -Pozwala to zachować obecne natywne zachowanie OpenAI Responses bez narzucania starszych -shimów zgodnych z OpenAI na backendy `/v1` innych firm. +Pozwala to zachować obecne natywne zachowanie OpenAI Responses bez wymuszania starszych +warstw zgodności z OpenAI na backendach `/v1` innych firm. + +### Ścisły agentowy tryb GPT + +Dla uruchomień rodziny GPT-5 w `openai/*` i `openai-codex/*` OpenClaw może używać +bardziej rygorystycznego osadzonego kontraktu wykonania Pi: + +```json5 +{ + agents: { + defaults: { + embeddedPi: { + executionContract: "strict-agentic", + }, + }, + }, +} +``` + +Przy `strict-agentic` OpenClaw nie traktuje już tury asystenta zawierającej tylko planu jako +udanego postępu, gdy dostępne jest konkretne działanie narzędzia. Powtarza +turę z ukierunkowaniem na działanie natychmiast, automatycznie włącza +ustrukturyzowane narzędzie `update_plan` dla istotnej pracy i pokazuje jawny stan blokady, +jeśli model nadal planuje bez działania. + +Ten tryb jest ograniczony do uruchomień rodziny GPT-5 w OpenAI i OpenAI Codex. Inni dostawcy +i starsze rodziny modeli zachowują domyślne zachowanie osadzonego Pi, chyba że jawnie włączysz +dla nich inne ustawienia czasu działania. ### Kompaktowanie po stronie serwera OpenAI Responses Dla bezpośrednich modeli OpenAI Responses (`openai/*` używających `api: "openai-responses"` z -`baseUrl` na `api.openai.com`) OpenClaw teraz automatycznie włącza wskazówki ładunku +`baseUrl` ustawionym na `api.openai.com`) OpenClaw teraz automatycznie włącza wskazówki payloadu kompaktowania po stronie serwera OpenAI: - Wymusza `store: true` (chyba że zgodność modelu ustawia `supportsStore: false`) - Wstrzykuje `context_management: [{ type: "compaction", compact_threshold: ... }]` -Domyślnie `compact_threshold` wynosi `70%` modelowego `contextWindow` (lub `80000`, -gdy nie jest dostępne). +Domyślnie `compact_threshold` wynosi `70%` wartości `contextWindow` modelu (lub `80000`, +gdy jest niedostępna). -### Jawnie włącz kompaktowanie po stronie serwera +### Jawne włączenie kompaktowania po stronie serwera Użyj tego, gdy chcesz wymusić wstrzykiwanie `context_management` w zgodnych modelach Responses (na przykład Azure OpenAI Responses): @@ -512,7 +541,7 @@ modelach Responses (na przykład Azure OpenAI Responses): } ``` -### Włącz z niestandardowym progiem +### Włączenie z niestandardowym progiem ```json5 { @@ -531,7 +560,7 @@ modelach Responses (na przykład Azure OpenAI Responses): } ``` -### Wyłącz kompaktowanie po stronie serwera +### Wyłączenie kompaktowania po stronie serwera ```json5 { @@ -555,5 +584,5 @@ Bezpośrednie modele OpenAI Responses nadal wymuszają `store: true`, chyba że ## Uwagi -- Referencje modeli zawsze używają `provider/model` (zobacz [/concepts/models](/pl/concepts/models)). -- Szczegóły uwierzytelniania + reguły ponownego użycia znajdują się w [/concepts/oauth](/pl/concepts/oauth). +- Odwołania do modeli zawsze używają `provider/model` (zobacz [/concepts/models](/pl/concepts/models)). +- Szczegóły uwierzytelniania i reguły ponownego użycia znajdują się w [/concepts/oauth](/pl/concepts/oauth).