Gateway
Контракт плана применения секретов
На этой странице определяется строгий контракт, соблюдение которого обеспечивает openclaw secrets apply. Если целевой объект не соответствует этим правилам, применение завершается ошибкой до изменения какого-либо файла.
Структура файла плана
openclaw secrets apply --from <plan.json> ожидает массив targets целевых объектов плана:
{ version: 1, protocolVersion: 1, targets: [ { type: "models.providers.apiKey", path: "models.providers.openai.apiKey", pathSegments: ["models", "providers", "openai", "apiKey"], providerId: "openai", ref: { source: "env", provider: "default", id: "OPENAI_API_KEY" }, }, { type: "auth-profiles.api_key.key", path: "profiles.openai:default.key", pathSegments: ["profiles", "openai:default", "key"], agentId: "main", ref: { source: "env", provider: "default", id: "OPENAI_API_KEY" }, }, ],}openclaw secrets configure создаёт планы в такой структуре. План также можно написать или отредактировать вручную.
Добавление, обновление и удаление провайдеров
Планы также могут содержать два необязательных поля верхнего уровня, которые изменяют отображение secrets.providers наряду с записью отдельных целевых объектов:
providerUpserts— объект, ключами которого служат псевдонимы провайдеров. Каждое значение представляет собой определение провайдера (той же структуры, которая принимается вsecrets.providers.<alias>файлаopenclaw.json, например провайдерexecилиfile).providerDeletes— массив псевдонимов провайдеров, которые нужно удалить.
providerUpserts выполняется перед targets, поэтому target.ref.provider может ссылаться на псевдоним провайдера, добавляемый тем же планом в providerUpserts. Без такого порядка планы, ссылающиеся на ещё не настроенный в openclaw.json псевдоним, завершаются ошибкой provider "<alias>" is not configured.
{ version: 1, protocolVersion: 1, providerUpserts: { onepassword_anthropic: { source: "exec", command: "/usr/bin/op", args: ["read", "op://Vault/Anthropic/credential"], }, }, providerDeletes: ["legacy_unused_alias"], targets: [ { type: "models.providers.apiKey", path: "models.providers.anthropic.apiKey", pathSegments: ["models", "providers", "anthropic", "apiKey"], providerId: "anthropic", ref: { source: "exec", provider: "onepassword_anthropic", id: "credential" }, }, ],}На exec-провайдеры, добавленные через providerUpserts, по-прежнему распространяются правила согласия на выполнение из раздела Поведение согласия для exec-провайдеров: для планов, содержащих exec-провайдеры, в режиме записи требуется --allow-exec.
Поддерживаемая область целевых объектов
Целевые объекты плана принимаются для поддерживаемых путей учётных данных, перечисленных в разделе Поверхность учётных данных SecretRef.
Поведение типов целевых объектов
target.type должен быть распознаваемым типом целевого объекта, а нормализованный target.path должен соответствовать зарегистрированной для этого типа структуре пути.
Для совместимости с существующими планами некоторые типы целевых объектов принимают в качестве target.type также псевдоним наряду с каноническим именем типа:
| Канонический тип | Принимаемый псевдоним |
|---|---|
models.providers.apiKey |
models.providers.*.apiKey |
skills.entries.apiKey |
skills.entries.*.apiKey |
channels.googlechat.serviceAccount |
channels.googlechat.accounts.*.serviceAccount |
Правила проверки путей
Каждый целевой объект проверяется по всем следующим правилам:
typeдолжен быть распознаваемым типом целевого объекта.pathдолжен быть непустым путём с разделителями-точками.pathSegmentsможно не указывать. Если он указан, после нормализации он должен в точности совпадать с путёмpath.- Запрещённые сегменты отклоняются:
__proto__,prototype,constructor. - Нормализованный путь должен соответствовать зарегистрированной структуре пути для данного типа целевого объекта.
- Если задан
providerIdилиaccountId, он должен совпадать с идентификатором, закодированным в пути. - Для целевых объектов
auth-profiles.jsonтребуетсяagentId. - При создании нового отображения
auth-profiles.jsonукажитеauthProfileProvider.
Поведение при ошибке
Если целевой объект не проходит проверку, применение завершается с ошибкой следующего вида:
Недопустимый путь целевого объекта плана для models.providers.apiKey: models.providers.openai.baseUrlДля недопустимого плана изменения не фиксируются: разрешение целевых объектов и проверка путей выполняются до изменения какого-либо файла. Кроме того, после начала записи допустимого плана применение сначала создаёт снимки всех затрагиваемых файлов и восстанавливает их, если последующая запись в рамках того же запуска завершается ошибкой. Поэтому частичная запись никогда не приводит к рассинхронизации конфигурации, профилей аутентификации или состояния переменных окружения.
Поведение согласия для exec-провайдеров
--dry-runпо умолчанию пропускает проверки exec SecretRef.- Планы, содержащие exec SecretRef или exec-провайдеры, отклоняются в режиме записи, если не задан
--allow-exec. - При проверке и применении планов, содержащих exec, передавайте
--allow-execкак в командах пробного запуска, так и в командах записи.
Примечания об области выполнения и аудита
- Записи
auth-profiles.json, содержащие только ссылки (keyRef/tokenRef), включаются в разрешение учётных данных во время выполнения и в область аудита. secrets applyзаписывает поддерживаемые целевые объектыopenclaw.json, поддерживаемые целевые объектыauth-profiles.jsonи выполняет три необязательных прохода очистки, каждый из которых включён по умолчанию:scrubEnv(удаляет перенесённые значения в виде открытого текста из.env),scrubAuthProfilesForProviderTargets(удаляет остаточные значения в виде открытого текста и неиспользуемые ссылки изauth-profiles.jsonдля провайдеров, только что перенесённых планом) иscrubLegacyAuthJson(удаляет перенесённые записиapi_keyиз устаревших хранилищauth.json). Чтобы пропустить соответствующий проход, задайте в плане для любого изoptions.scrubEnv,options.scrubAuthProfilesForProviderTargets,options.scrubLegacyAuthJsonзначениеfalse.
Проверки оператора
# Проверить план без записиopenclaw secrets apply --from /tmp/openclaw-secrets-plan.json --dry-run # Затем применить измененияopenclaw secrets apply --from /tmp/openclaw-secrets-plan.json # Для планов, содержащих exec, явно разрешить его в обоих режимахopenclaw secrets apply --from /tmp/openclaw-secrets-plan.json --dry-run --allow-execopenclaw secrets apply --from /tmp/openclaw-secrets-plan.json --allow-execЕсли применение завершается сообщением о недопустимом пути целевого объекта, повторно создайте план с помощью openclaw secrets configure или исправьте путь целевого объекта так, чтобы он соответствовал одной из поддерживаемых выше структур.