chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-05 19:39:41 +00:00
parent 6ce65880f2
commit 4bf55a7f8a

View File

@ -1,32 +1,32 @@
---
read_when:
- Розуміння архітектури інтеграції Pi SDK в OpenClaw
- Модифікація життєвого циклу сесій агента, інструментів або підключення провайдера для Pi
summary: Архітектура вбудованої інтеграції Pi-агента в OpenClaw та життєвий цикл сесій
- Розуміння дизайну інтеграції Pi SDK в OpenClaw
- Зміна життєвого циклу сесій агента, інструментів або підключення провайдерів для Pi
summary: Архітектура вбудованої інтеграції Pi-агента та життєвого циклу сесій в OpenClaw
title: Архітектура інтеграції Pi
x-i18n:
generated_at: "2026-04-05T18:11:25Z"
generated_at: "2026-04-05T19:39:41Z"
model: gpt-5.4
provider: openai
source_hash: 596de5fbb1430008698079f211db200e02ca8485547550fd81571a459c4c83c7
source_hash: 28594290b018b7cc2963d33dbb7cec6a0bd817ac486dafad59dd2ccabd482582
source_path: pi.md
workflow: 15
---
# Архітектура інтеграції Pi
У цьому документі описано, як OpenClaw інтегрується з [pi-coding-agent](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent) та пов’язаними пакетами (`pi-ai`, `pi-agent-core`, `pi-tui`) для реалізації можливостей свого AI-агента.
Цей документ описує, як OpenClaw інтегрується з [pi-coding-agent](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent) та пов’язаними з ним пакетами (`pi-ai`, `pi-agent-core`, `pi-tui`) для реалізації можливостей свого AI-агента.
## Огляд
OpenClaw використовує Pi SDK, щоб вбудувати AI-агента для програмування у свою архітектуру шлюзу повідомлень. Замість запуску pi як підпроцесу або використання режиму RPC, OpenClaw безпосередньо імпортує та створює `AgentSession` через `createAgentSession()`. Цей вбудований підхід забезпечує:
OpenClaw використовує SDK pi, щоб вбудувати AI-агента для програмування у свою архітектуру шлюзу повідомлень. Замість запуску pi як підпроцесу або використання режиму RPC, OpenClaw безпосередньо імпортує та створює `AgentSession` через `createAgentSession()`. Цей вбудований підхід надає:
- Повний контроль над життєвим циклом сесії та обробкою подій
- Впровадження власних інструментів (повідомлення, sandbox, дії для конкретних каналів)
- Налаштування системного prompt для кожного каналу/контексту
- Налаштування системного промпту для кожного каналу/контексту
- Збереження сесій із підтримкою розгалуження/ущільнення
- Ротацію профілів автентифікації для кількох облікових записів із резервним перемиканням
- Незалежне від провайдера перемикання моделей
- Перемикання моделей незалежно від провайдера
## Залежності пакетів
@ -39,18 +39,18 @@ OpenClaw використовує Pi SDK, щоб вбудувати AI-аген
}
```
| Пакет | Призначення |
| ---------------- | ----------------------------------------------------------------------------------------------------- |
| `pi-ai` | Базові абстракції LLM: `Model`, `streamSimple`, типи повідомлень, API провайдерів |
| `pi-agent-core` | Цикл агента, виконання інструментів, типи `AgentMessage` |
| Пакет | Призначення |
| ---------------- | ------------------------------------------------------------------------------------------------------- |
| `pi-ai` | Базові абстракції LLM: `Model`, `streamSimple`, типи повідомлень, API провайдерів |
| `pi-agent-core` | Цикл агента, виконання інструментів, типи `AgentMessage` |
| `pi-coding-agent` | Високорівневий SDK: `createAgentSession`, `SessionManager`, `AuthStorage`, `ModelRegistry`, вбудовані інструменти |
| `pi-tui` | Компоненти термінального UI (використовуються в локальному режимі TUI OpenClaw) |
| `pi-tui` | Компоненти термінального UI (використовуються в локальному режимі TUI OpenClaw) |
## Структура файлів
```
src/agents/
├── pi-embedded-runner.ts # Повторно експортує з pi-embedded-runner/
├── pi-embedded-runner.ts # Повторний експорт із pi-embedded-runner/
├── pi-embedded-runner/
│ ├── run.ts # Основна точка входу: runEmbeddedPiAgent()
│ ├── run/
@ -59,22 +59,22 @@ src/agents/
│ │ ├── payloads.ts # Побудова payload-відповідей із результатів запуску
│ │ ├── images.ts # Впровадження зображень для vision-моделі
│ │ └── types.ts # EmbeddedRunAttemptResult
│ ├── abort.ts # Визначення помилки переривання
│ ├── cache-ttl.ts # Відстеження Cache TTL для обрізання контексту
│ ├── abort.ts # Виявлення помилок переривання
│ ├── cache-ttl.ts # Відстеження TTL кешу для обрізання контексту
│ ├── compact.ts # Логіка ручного/автоматичного ущільнення
│ ├── extensions.ts # Завантаження розширень pi для вбудованих запусків
│ ├── extra-params.ts # Додаткові параметри потоку для конкретних провайдерів
│ ├── google.ts # Виправлення порядку ходів для Google/Gemini
│ ├── history.ts # Обмеження історії (DM проти груп)
│ ├── lanes.ts # Смуги команд сесії/глобальні
│ ├── history.ts # Обмеження історії (DM проти групи)
│ ├── lanes.ts # Командні доріжки сесії/глобальні
│ ├── logger.ts # Логер підсистеми
│ ├── model.ts # Визначення моделі через ModelRegistry
│ ├── runs.ts # Відстеження активних запусків, переривання, черга
│ ├── sandbox-info.ts # Інформація про sandbox для системного prompt
│ ├── sandbox-info.ts # Інформація про sandbox для системного промпту
│ ├── session-manager-cache.ts # Кешування екземплярів SessionManager
│ ├── session-manager-init.ts # Ініціалізація файлу сесії
│ ├── system-prompt.ts # Побудовник системного prompt
│ ├── tool-split.ts # Розділення інструментів на builtIn і custom
│ ├── system-prompt.ts # Побудова системного промпту
│ ├── tool-split.ts # Поділ інструментів на builtIn та custom
│ ├── types.ts # EmbeddedPiAgentMeta, EmbeddedPiRunResult
│ └── utils.ts # Відображення ThinkLevel, опис помилок
├── pi-embedded-subscribe.ts # Підписка/диспетчеризація подій сесії
@ -82,23 +82,23 @@ src/agents/
├── pi-embedded-subscribe.handlers.ts # Фабрика обробників подій
├── pi-embedded-subscribe.handlers.lifecycle.ts
├── pi-embedded-subscribe.handlers.types.ts
├── pi-embedded-block-chunker.ts # Розбиття потокових блоків відповіді на частини
├── pi-embedded-messaging.ts # Відстеження надсилань інструмента повідомлень
├── pi-embedded-block-chunker.ts # Поділ потокових відповідей на блоки
├── pi-embedded-messaging.ts # Відстеження надісланих інструментом повідомлень
├── pi-embedded-helpers.ts # Класифікація помилок, валідація ходів
├── pi-embedded-helpers/ # Допоміжні модулі
├── pi-embedded-utils.ts # Утиліти форматування
├── pi-tools.ts # createOpenClawCodingTools()
├── pi-tools.abort.ts # Обгортання AbortSignal для інструментів
├── pi-tools.policy.ts # Політика allowlist/denylist для інструментів
├── pi-tools.read.ts # Кастомізації інструмента читання
├── pi-tools.read.ts # Кастомізації інструмента read
├── pi-tools.schema.ts # Нормалізація схем інструментів
├── pi-tools.types.ts # Псевдонім типу AnyAgentTool
├── pi-tool-definition-adapter.ts # Адаптер AgentTool -> ToolDefinition
├── pi-settings.ts # Перевизначення налаштувань
├── pi-hooks/ # Користувацькі hooks pi
│ ├── compaction-safeguard.ts # Розширення safeguard
├── pi-hooks/ # Власні hooks для pi
│ ├── compaction-safeguard.ts # Захисне розширення
│ ├── compaction-safeguard-runtime.ts
│ ├── context-pruning.ts # Розширення обрізання контексту на основі Cache-TTL
│ ├── context-pruning.ts # Розширення обрізання контексту на основі TTL кешу
│ └── context-pruning/
├── model-auth.ts # Визначення профілю автентифікації
├── auth-profiles.ts # Сховище профілів, cooldown, failover
@ -109,20 +109,20 @@ src/agents/
├── failover-error.ts # Клас FailoverError
├── defaults.ts # DEFAULT_PROVIDER, DEFAULT_MODEL
├── system-prompt.ts # buildAgentSystemPrompt()
├── system-prompt-params.ts # Визначення параметрів системного prompt
├── system-prompt-report.ts # Генерація налагоджувального звіту
├── system-prompt-params.ts # Визначення параметрів системного промпту
├── system-prompt-report.ts # Генерація звіту для налагодження
├── tool-summaries.ts # Підсумки описів інструментів
├── tool-policy.ts # Визначення політики інструментів
├── transcript-policy.ts # Політика валідації транскрипту
├── skills.ts # Знімок Skills/побудова prompt
├── skills.ts # Побудова знімків/промптів Skills
├── skills/ # Підсистема Skills
├── sandbox.ts # Визначення контексту sandbox
├── sandbox/ # Підсистема sandbox
├── channel-tools.ts # Впровадження інструментів для конкретних каналів
├── openclaw-tools.ts # Специфічні для OpenClaw інструменти
├── openclaw-tools.ts # Інструменти, специфічні для OpenClaw
├── bash-tools.ts # Інструменти exec/process
├── apply-patch.ts # Інструмент apply_patch (OpenAI)
├── tools/ # Окремі реалізації інструментів
├── tools/ # Реалізації окремих інструментів
│ ├── browser-tool.ts
│ ├── canvas-tool.ts
│ ├── cron-tool.ts
@ -136,12 +136,12 @@ src/agents/
└── ...
```
Рантайми дій повідомлень для конкретних каналів тепер розміщені в каталогах розширень, якими володіють відповідні plugin, а не в `src/agents/tools`, наприклад:
Середовища виконання дій із повідомленнями для конкретних каналів тепер розміщені в каталогах розширень, якими володіють plugins, а не в `src/agents/tools`, наприклад:
- файли рантайму дій plugin Discord
- файл рантайму дій plugin Slack
- файл рантайму дій plugin Telegram
- файл рантайму дій plugin WhatsApp
- файли середовища виконання дій plugin Discord
- файл середовища виконання дій plugin Slack
- файл середовища виконання дій plugin Telegram
- файл середовища виконання дій plugin WhatsApp
## Основний потік інтеграції
@ -171,7 +171,7 @@ const result = await runEmbeddedPiAgent({
### 2. Створення сесії
Усередині `runEmbeddedAttempt()` (яка викликається з `runEmbeddedPiAgent()`) використовується Pi SDK:
Усередині `runEmbeddedAttempt()` (яка викликається з `runEmbeddedPiAgent()`) використовується SDK pi:
```typescript
import {
@ -233,33 +233,33 @@ const subscription = subscribeEmbeddedPiSession({
- `agent_start` / `agent_end`
- `auto_compaction_start` / `auto_compaction_end`
### 4. Надсилання prompt
### 4. Надсилання промпту
Після налаштування сесії їй надсилається prompt:
Після налаштування сесії надсилається промпт:
```typescript
await session.prompt(effectivePrompt, { images: imageResult.images });
```
SDK обробляє повний цикл агента: надсилання до LLM, виконання викликів інструментів, потокову передачу відповідей.
SDK обробляє весь цикл роботи агента: надсилання до LLM, виконання викликів інструментів, потокове передавання відповідей.
Впровадження зображень є локальним для prompt: OpenClaw завантажує посилання на зображення з поточного prompt і передає їх через `images` лише для цього ходу. Попередні ходи історії не скануються повторно для повторного впровадження payload зображень.
Впровадження зображень є локальним для промпту: OpenClaw завантажує посилання на зображення з поточного промпту та передає їх через `images` лише для цього ходу. Він не сканує повторно попередні ходи історії, щоб повторно впроваджувати payload-и зображень.
## Архітектура інструментів
### Конвеєр інструментів
1. **Базові інструменти**: `codingTools` із pi (read, bash, edit, write)
2. **Користувацькі заміни**: OpenClaw замінює bash на `exec`/`process`, налаштовує read/edit/write для sandbox
1. **Базові інструменти**: `codingTools` із pi (`read`, `bash`, `edit`, `write`)
2. **Власні заміни**: OpenClaw замінює bash на `exec`/`process`, налаштовує `read`/`edit`/`write` для sandbox
3. **Інструменти OpenClaw**: повідомлення, browser, canvas, sessions, cron, gateway тощо
4. **Інструменти каналів**: інструменти дій для Discord/Telegram/Slack/WhatsApp
5. **Фільтрація політиками**: інструменти фільтруються за профілем, провайдером, агентом, групою, політиками sandbox
6. **Нормалізація схем**: схеми очищуються для особливостей Gemini/OpenAI
6. **Нормалізація схем**: схеми очищуються з урахуванням особливостей Gemini/OpenAI
7. **Обгортання AbortSignal**: інструменти обгортаються для підтримки сигналів переривання
### Адаптер визначень інструментів
`AgentTool` у pi-agent-core має інший сигнатурний `execute`, ніж `ToolDefinition` у pi-coding-agent. Адаптер у `pi-tool-definition-adapter.ts` з’єднує їх:
`AgentTool` із pi-agent-core має іншу сигнатуру `execute`, ніж `ToolDefinition` у pi-coding-agent. Адаптер у `pi-tool-definition-adapter.ts` з’єднує їх:
```typescript
export function toToolDefinitions(tools: AnyAgentTool[]): ToolDefinition[] {
@ -269,33 +269,33 @@ export function toToolDefinitions(tools: AnyAgentTool[]): ToolDefinition[] {
description: tool.description ?? "",
parameters: tool.parameters,
execute: async (toolCallId, params, onUpdate, _ctx, signal) => {
// Сигнатура pi-coding-agent відрізняється від pi-agent-core
// pi-coding-agent signature differs from pi-agent-core
return await tool.execute(toolCallId, params, signal, onUpdate);
},
}));
}
```
### Стратегія розділення інструментів
### Стратегія поділу інструментів
`splitSdkTools()` передає всі інструменти через `customTools`:
```typescript
export function splitSdkTools(options: { tools: AnyAgentTool[]; sandboxEnabled: boolean }) {
return {
builtInTools: [], // Порожньо. Ми перевизначаємо все
builtInTools: [], // Empty. We override everything
customTools: toToolDefinitions(options.tools),
};
}
```
Це гарантує, що фільтрація політиками в OpenClaw, інтеграція sandbox і розширений набір інструментів залишаються узгодженими для всіх провайдерів.
Це забезпечує узгодженість фільтрації політиками, інтеграції sandbox і розширеного набору інструментів OpenClaw для всіх провайдерів.
## Побудова системного prompt
## Побудова системного промпту
Системний prompt будується в `buildAgentSystemPrompt()` (`system-prompt.ts`). Він формує повний prompt із розділами, зокрема Tooling, Tool Call Style, Safety guardrails, довідка CLI OpenClaw, Skills, Docs, Workspace, Sandbox, Messaging, Reply Tags, Voice, Silent Replies, Heartbeats, Runtime metadata, а також Memory і Reactions, якщо вони ввімкнені, і додатково — optional context files та extra system prompt content. Для режиму мінімального prompt, який використовують субагенти, розділи обрізаються.
Системний промпт будується в `buildAgentSystemPrompt()` (`system-prompt.ts`). Він формує повний промпт із розділами, зокрема Tooling, Tool Call Style, Safety guardrails, довідка CLI OpenClaw, Skills, Docs, Workspace, Sandbox, Messaging, Reply Tags, Voice, Silent Replies, Heartbeats, Runtime metadata, а також Memory і Reactions, якщо вони ввімкнені, плюс необов’язкові файли контексту й додатковий вміст системного промпту. Для мінімального режиму промпту, який використовується субагентами, розділи обрізаються.
Prompt застосовується після створення сесії через `applySystemPromptOverrideToSession()`:
Промпт застосовується після створення сесії через `applySystemPromptOverrideToSession()`:
```typescript
const systemPromptOverride = createSystemPromptOverride(appendPrompt);
@ -306,17 +306,17 @@ applySystemPromptOverrideToSession(session, systemPromptOverride);
### Файли сесій
Сесії — це файли JSONL із деревоподібною структурою (зв’язки id/parentId). За збереження відповідає `SessionManager` у Pi:
Сесії — це JSONL-файли з деревоподібною структурою (зв’язки id/parentId). За збереження відповідає `SessionManager` із Pi:
```typescript
const sessionManager = SessionManager.open(params.sessionFile);
```
OpenClaw обгортає це через `guardSessionManager()` для безпечної роботи з результатами інструментів.
OpenClaw обгортає його за допомогою `guardSessionManager()` для безпечної обробки результатів інструментів.
### Кешування сесій
`session-manager-cache.ts` кешує екземпляри SessionManager, щоб уникати повторного розбору файлів:
`session-manager-cache.ts` кешує екземпляри SessionManager, щоб уникнути повторного розбору файлу:
```typescript
await prewarmSessionFile(params.sessionFile);
@ -330,8 +330,8 @@ trackSessionManagerAccess(params.sessionFile);
### Ущільнення
Автоматичне ущільнення запускається при переповненні контексту. Поширені ознаки
переповнення: `request_too_large`, `context length exceeded`, `input exceeds the
Автоматичне ущільнення запускається при переповненні контексту. Типові сигнатури переповнення включають
`request_too_large`, `context length exceeded`, `input exceeds the
maximum number of tokens`, `input token count exceeds the maximum number of
input tokens`, `input is too long for the model` і `ollama error: context
length exceeded`. `compactEmbeddedPiSessionDirect()` обробляє ручне
@ -347,14 +347,14 @@ const compactResult = await compactEmbeddedPiSessionDirect({
### Профілі автентифікації
OpenClaw підтримує сховище профілів автентифікації з кількома API-ключами для кожного провайдера:
OpenClaw підтримує сховище профілів автентифікації з кількома API-ключами на провайдера:
```typescript
const authStore = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
const profileOrder = resolveAuthProfileOrder({ cfg, store: authStore, provider, preferredProfile });
```
Профілі ротуються після збоїв із відстеженням cooldown:
Профілі обертаються при збоях із відстеженням cooldown:
```typescript
await markAuthProfileFailure({ store, profileId, reason, cfg, agentDir });
@ -373,13 +373,13 @@ const { model, error, authStorage, modelRegistry } = resolveModel(
config,
);
// Використовує ModelRegistry і AuthStorage з pi
// Uses pi's ModelRegistry and AuthStorage
authStorage.setRuntimeApiKey(model.provider, apiKeyInfo.apiKey);
```
### Failover
`FailoverError` запускає резервне перемикання моделі, якщо його налаштовано:
`FailoverError` запускає резервне перемикання моделі, якщо це налаштовано:
```typescript
if (fallbackConfigured && isFailoverErrorMessage(errorText)) {
@ -395,11 +395,11 @@ if (fallbackConfigured && isFailoverErrorMessage(errorText)) {
## Розширення Pi
OpenClaw завантажує користувацькі розширення pi для спеціалізованої поведінки:
OpenClaw завантажує власні розширення pi для спеціалізованої поведінки:
### Захист ущільнення
`src/agents/pi-hooks/compaction-safeguard.ts` додає guardrails до ущільнення, зокрема адаптивне бюджетування токенів, а також підсумки помилок інструментів і файлових операцій:
`src/agents/pi-hooks/compaction-safeguard.ts` додає захисні механізми для ущільнення, зокрема адаптивне бюджетування токенів, а також зведення про збої інструментів і файлові операції:
```typescript
if (resolveCompactionMode(params.cfg) === "safeguard") {
@ -410,7 +410,7 @@ if (resolveCompactionMode(params.cfg) === "safeguard") {
### Обрізання контексту
`src/agents/pi-hooks/context-pruning.ts` реалізує обрізання контексту на основі Cache-TTL:
`src/agents/pi-hooks/context-pruning.ts` реалізує обрізання контексту на основі TTL кешу:
```typescript
if (cfg?.agents?.defaults?.contextPruning?.mode === "cache-ttl") {
@ -424,11 +424,11 @@ if (cfg?.agents?.defaults?.contextPruning?.mode === "cache-ttl") {
}
```
## Потокова передача та блоки відповідей
## Потокова передача та блокові відповіді
### Розбиття блоків
### Поділ на блоки
`EmbeddedBlockChunker` керує перетворенням потокового тексту на окремі блоки відповіді:
`EmbeddedBlockChunker` керує потоковим перетворенням тексту на окремі блоки відповіді:
```typescript
const blockChunker = blockChunking ? new EmbeddedBlockChunker(blockChunking) : null;
@ -436,18 +436,18 @@ const blockChunker = blockChunking ? new EmbeddedBlockChunker(blockChunking) : n
### Видалення тегів thinking/final
Потоковий вивід обробляється для видалення блоків `<think>`/`<thinking>` та виділення вмісту `<final>`:
Потоковий вивід обробляється для видалення блоків `<think>`/`<thinking>` і виділення вмісту `<final>`:
```typescript
const stripBlockTags = (text: string, state: { thinking: boolean; final: boolean }) => {
// Видалити вміст <think>...</think>
// Якщо enforceFinalTag увімкнено, повертати лише вміст <final>...</final>
// Strip <think>...</think> content
// If enforceFinalTag, only return <final>...</final> content
};
```
### Директиви відповіді
Директиви відповіді, як-от `[[media:url]]`, `[[voice]]`, `[[reply:id]]`, розбираються та витягуються:
Директиви відповіді, такі як `[[media:url]]`, `[[voice]]`, `[[reply:id]]`, аналізуються та виділяються:
```typescript
const { text: cleanedText, mediaUrls, audioAsVoice, replyToId } = consumeReplyDirectives(chunk);
@ -457,14 +457,14 @@ const { text: cleanedText, mediaUrls, audioAsVoice, replyToId } = consumeReplyDi
### Класифікація помилок
`pi-embedded-helpers.ts` класифікує помилки для належної обробки:
`pi-embedded-helpers.ts` класифікує помилки для відповідної обробки:
```typescript
isContextOverflowError(errorText) // Контекст надто великий
isCompactionFailureError(errorText) // Не вдалося ущільнення
isAuthAssistantError(lastAssistant) // Помилка автентифікації
isRateLimitAssistantError(...) // Досягнуто ліміту швидкості
isFailoverAssistantError(...) // Потрібне резервне перемикання
isContextOverflowError(errorText) // Context too large
isCompactionFailureError(errorText) // Compaction failed
isAuthAssistantError(lastAssistant) // Auth failure
isRateLimitAssistantError(...) // Rate limited
isFailoverAssistantError(...) // Should failover
classifyFailoverReason(errorText) // "auth" | "rate_limit" | "quota" | "timeout" | ...
```
@ -495,23 +495,23 @@ const sandbox = await resolveSandboxContext({
});
if (sandboxRoot) {
// Використовувати sandboxed інструменти read/edit/write
// Exec виконується в контейнері
// Browser використовує URL мосту
// Use sandboxed read/edit/write tools
// Exec runs in container
// Browser uses bridge URL
}
```
## Обробка, специфічна для провайдерів
## Обробка для конкретних провайдерів
### Anthropic
- Очищення магічного рядка відмови
- Валідація ходів для послідовних ролей
- Сумісність параметрів Claude Code
- Сувора валідація параметрів інструментів Pi на upstream-рівні
### Google/Gemini
- Санітизація схем інструментів, якою володіють plugin
- Санітизація схем інструментів, якою володіє plugin
### OpenAI
@ -527,29 +527,29 @@ OpenClaw також має локальний режим TUI, який безп
import { ... } from "@mariozechner/pi-tui";
```
Це забезпечує інтерактивний термінальний інтерфейс, подібний до нативного режиму pi.
Це забезпечує інтерактивний досвід роботи в терміналі, подібний до нативного режиму pi.
## Ключові відмінності від Pi CLI
| Аспект | Pi CLI | Вбудований OpenClaw |
| --------------- | ----------------------- | ------------------------------------------------------------------------------------------------- |
| Виклик | Команда `pi` / RPC | SDK через `createAgentSession()` |
| Інструменти | Стандартні інструменти для програмування | Користувацький набір інструментів OpenClaw |
| Системний prompt | AGENTS.md + prompts | Динамічний для кожного каналу/контексту |
| Аспект | Pi CLI | Вбудований OpenClaw |
| --------------- | ----------------------- | --------------------------------------------------------------------------------------------------- |
| Виклик | Команда `pi` / RPC | SDK через `createAgentSession()` |
| Інструменти | Стандартні інструменти для програмування | Власний набір інструментів OpenClaw |
| Системний промпт | AGENTS.md + промпти | Динамічний для кожного каналу/контексту |
| Зберігання сесій | `~/.pi/agent/sessions/` | `~/.openclaw/agents/<agentId>/sessions/` (або `$OPENCLAW_STATE_DIR/agents/<agentId>/sessions/`) |
| Auth | Одна облікова інформація | Кілька профілів із ротацією |
| Розширення | Завантажуються з диска | Програмно + шляхи на диску |
| Обробка подій | Рендеринг TUI | На основі callback-функцій (`onBlockReply` тощо) |
| Auth | Окремі облікові дані | Кілька профілів із ротацією |
| Розширення | Завантажуються з диска | Програмно + шляхи на диску |
| Обробка подій | Рендеринг TUI | На основі callback-ів (`onBlockReply` тощо) |
## Майбутні міркування
Області для потенційного перегляду:
Напрями для потенційного доопрацювання:
1. **Узгодження сигнатур інструментів**: зараз виконується адаптація між сигнатурами pi-agent-core і pi-coding-agent
1. **Узгодження сигнатур інструментів**: наразі виконується адаптація між сигнатурами pi-agent-core і pi-coding-agent
2. **Обгортання менеджера сесій**: `guardSessionManager` додає безпеку, але підвищує складність
3. **Завантаження розширень**: можна було б пряміше використовувати `ResourceLoader` з pi
4. **Складність обробника потоків**: `subscribeEmbeddedPiSession` став занадто великим
5. **Особливості провайдерів**: багато кодових шляхів, специфічних для провайдерів, які потенційно міг би обробляти pi
3. **Завантаження розширень**: можна безпосередніше використовувати `ResourceLoader` із pi
4. **Складність обробника потоків**: `subscribeEmbeddedPiSession` значно розрісся
5. **Особливості провайдерів**: багато кодових шляхів для конкретних провайдерів, які pi потенційно міг би обробляти сам
## Тести
@ -567,7 +567,7 @@ import { ... } from "@mariozechner/pi-tui";
- `src/agents/pi-settings.test.ts`
- `src/agents/pi-hooks/**/*.test.ts`
Live/опційно:
Живі/опціональні:
- `src/agents/pi-embedded-runner-extraparams.live.test.ts` (увімкніть `OPENCLAW_LIVE_TEST=1`)