diff --git a/docs/uk/pi.md b/docs/uk/pi.md index 1a82749f7..cb1c3b23e 100644 --- a/docs/uk/pi.md +++ b/docs/uk/pi.md @@ -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 -Потоковий вивід обробляється для видалення блоків ``/`` та виділення вмісту ``: +Потоковий вивід обробляється для видалення блоків ``/`` і виділення вмісту ``: ```typescript const stripBlockTags = (text: string, state: { thinking: boolean; final: boolean }) => { - // Видалити вміст ... - // Якщо enforceFinalTag увімкнено, повертати лише вміст ... + // Strip ... content + // If enforceFinalTag, only return ... 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//sessions/` (або `$OPENCLAW_STATE_DIR/agents//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`)