На этой странице
На этой странице
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 или исправьте путь целевого объекта так, чтобы он соответствовал одной из поддерживаемых выше структур.