Ресурсы и возможности
Область версии: эта страница излагает четыре нормативных документа текущего стандарта DWP 7.0.0 в релизе
v7.9.0:V6_CONTEXT.md,V6_RESOURCES.md,CONFIG.mdиV7_ABILITIES.md. Если эта страница расходится с этими файлами, приоритет у файлов.
Статус: стабильный (контекст и ресурсы — с 6.0.0; конфигурация и возможности — с 7.0.0). Эти правила обязательны для планов линии v6 (Слой записей); стандарт v5 не затрагивается. Ключевые слова MUST, MUST NOT, SHOULD, SHOULD NOT и MAY следует трактовать так, как описано в RFC 2119.
Манифест контекста для каждой задачи
Перед каждой задачей агент выводит манифест контекста из контракта и полного журнала (context_manifest.py). Это производное представление, которое никогда не хранится как состояние: двукратный вывод из одних и тех же записей MUST давать идентичные байты, и манифест MUST NOT читать что-либо за пределами плана и его репозитория. Его форма опубликована как context-manifest/v6.
| Раздел | Источник |
|---|---|
identity |
имя плана, идентификатор и ревизия действующего контракта |
authorization |
события одобрения дословно, включая контрольные точки согласия |
repository_rules |
область действия контракта и инварианты с их текущим состоянием оценки |
acceptance |
критерии задачи с их состоянием закрытия |
touched_surface |
объявленные файлы с текущими хешами содержимого; отсутствующий файл отображается как отсутствующий |
evidence |
указатели на доказательства внутри окна, которые разрешаются на диске |
dead_ends |
непройденные gate, отказы, отклонённые адаптации и неразличающие контроли |
freshness |
отпечаток входных данных, которые обобщает манифест |
next_action |
ровно один следующий шаг с конкретной командой |
authorization, repository_rules и acceptance обязательны: сокращение контекста никогда не может скрыть границу приёмки или авторизации. Лестница следующих действий упорядочена (одобрение, старт, полномочия, контроль, доказательство, завершение) и никогда не представляет обычный пройденный gate как закрывающий контролируемый критерий.
Тупики сохраняются. Запись покидает дайджест только на основании доказанных фактов из записей (тот же отпечаток позже прошёл, более новый дублирующий отказ заменил её или ревизия контракта сделала её устаревшей); простое изменение поверхности MUST NOT её удалять. Свежесть проверяется: сводка, чей зафиксированный отпечаток входных данных больше не совпадает, устарела, а сводка без отпечатка устарела по построению. История загружается только по триггеру — зафиксированная передача работы или поправка, затрагивающая задачу; в остальных случаях контекстом задачи служит только манифест.
Учёт четырёх величин
Нагрузка инструкций и стоимость сообщаются как четыре отдельные величины: статические байты инструкций, токены провайдера (только там, где их зафиксировал счётчик хоста), денежная стоимость (только по зафиксированным выборкам реальных тарифов) и время по часам (по временным меткам событий). Отсутствующая величина сообщается как отсутствующая с указанием причины, никогда не домысливается, и байты никогда не пересчитываются в токены или деньги.
Возможности хоста
Хост выполнения заявляет свои возможности из закрытого набора: stop_agent, meter_spend, meter_tokens, meter_wall_clock, cancel_children, model_routing, subagents, telemetry. Неизвестная возможность MUST быть отклонена, а незаявленная возможность равна false. Минимальный хост — без переключения моделей, без субагентов, без телеметрии, без остановки — это поддерживаемая конфигурация, а не ошибка; каждое ограничение, которому нужна отсутствующая возможность, понижается до рекомендательного с указанием этой возможности.
Возможности — это не гранты. Грант в контракте — это полномочие; возможность — это то, что окружение действительно умеет делать. Каждой конфигурации, которой нужна возможность, по-прежнему нужен и соответствующий грант.
Ресурсный конверт
Контракт MAY объявлять ограничения в своём ресурсном конверте. Ограничение принудительно только тогда, когда оно указывает реальный источник измерения; в противном случае оно рекомендательное, и одинаковое принуждение на всех хостах никогда не заявляется.
- Источники счётчиков. Счётчики, наблюдаемые по журналу (интервал времени по часам, повторы gate, вызовы диспетчеризации), вычисляются по собственным записям плана. Счётчикам, доступным только хосту (расходы, токены провайдера), нужна соответствующая возможность измерения и наблюдаемая выборка от адаптера хоста; отсутствующий счётчик не означает бесплатного использования.
- Резервы. Ограничение MAY объявлять
reserve, чтобы обычная работа не могла лишить ресурсов верификацию, повторы и возобновление: диспетчеризация отклоняется, если потраченное плюс ожидающее превысило бы ограничение за вычетом резерва. - Исчерпание. Достижение ограничения сохраняет незавершённую контрольную точку, фиксирует
LIMIT: exhausted <id>: <detail>и приостанавливает диспетчеризацию до явной записиLIMIT: recovered <id>. Исчерпание никогда не может удовлетворить критерий приёмки. - Расчёт при отмене. Незавершённое резервирование рассчитывается ровно один раз — как освобождённое или зафиксированное; конфликтующий второй расчёт отклоняется, а не разрешается арбитражем.
- Конфигурация маршрутизации. По умолчанию используется фиксированная модель. Переключению уровня модели нужны и грант
model_routing, и одноимённая возможность; параллельной диспетчеризации нужны и грантagent_delegation, и возможностьsubagents. Конфигурация маршрутизации — это заявление о разрешениях, а не заявление об эффективности.
Файл конфигурации и реестр аддонов
.dwp/config.json (репозиторий) и ~/.dwp/config.json (пользователь) имеют одну форму, опубликованную как dwp-config/v1, и один парсер (config.py). Методология работает без файла конфигурации и без аддонов; ничто в этом файле не может сделать план, поток или соответствие зависимыми от аддона.
- Отслеживается по умолчанию. Файл репозитория содержит решения, а не секреты, и отслеживается в git, чтобы коллеги и CI читали один и тот же реестр: онбординг записывает правило
.gitignore.dwp/*плюс!.dwp/config.json. Планы и записи бенчмарков остаются игнорируемыми. - Приоритет. Файл репозитория важнее пользовательского файла, а отсутствие файла означает, что всё отключено. Ключ
addonsразрешается по каждому ключу аддона; ключbenchmarkразрешается целиком. - Ключи реестра — это имена каталогов аддонов внутри пакета:
ai-diff-reviewer,agentkit,dailybot,dependency-upgrade,design-system,devcontainer,herdr,vim. Каждая запись содержитenabled(включает толькоtrue), необязательныйversionи необязательный однострочныйnote. Неизвестный ключ игнорируется с одним предупреждением. - Отсутствие означает «не включено». Включить что-либо могут только онбординг с согласия разработчика, собственный шаг установки аддона или человек. Включённый аддон, который не обнаружен и содержит заметку, отображается как отложенный.
- Чтение с отказом в закрытое состояние. Нечитаемый файл или некорректное значение ничего не вносят и порождают ровно одно предупреждение; читатель никогда не прерывает поток и никогда не умалчивает о том, что отбросил. Писатель выполняет согласование атомарно и отказывается перезаписывать файл, который не может разобрать.
- Запись хоста. Необязательный ключ
hostфиксирует заявленные возможности машины (булевы значения из закрытого набора).telemetry: trueпо-прежнему требует согласия разработчика. - Базовый уровень не меняется. Локальный обзор AI Diff Reviewer остаётся частью каждого Final Review независимо от того, указан ли он в реестре.
Возможности, предоставляемые аддонами
Начиная с 7.0.0 включённые аддоны могут добавлять возможности во время выполнения:
effective abilities = host-declared abilities ∪ abilities provided by every addon that is enabled, described by a valid addon.json, detected, and on a compatible interface version
- Дескрипторы. Каждый аддон внутри пакета поставляет
addon.json(addon-descriptor/v1), который объявляет его ключ, то, что он предоставляет, и способ его обнаружения. - Обнаружение только для чтения. Команда обнаружения запускается без оболочки, с закрытым stdin и таймаутом 10 секунд, и ничто из её вывода не выполняется. Продукт, чья сообщаемая мажорная версия интерфейса отличается от закреплённой, недоступен, с одним предупреждением.
- Не включён — значит, не опрашивается. Дескриптор отключённого аддона не открывается, и его команда обнаружения не запускается. Объединение монотонно: включение аддона может только добавлять возможности.
- Никогда не сохраняются. Эффективные возможности пересчитываются при каждом вызове и MUST NOT записываться в план. План фиксирует то, что он использовал, — событие делегирования называет свой транспорт и аддон, — а не то, что было доступно.
- Возможности — это не полномочия. Аддон agentkit может предоставлять
subagents,cancel_childrenиmodel_routing; аддон Herdr может предоставлятьsubagentsиcancel_children. Для делегирования по-прежнему нужен грантagent_delegationв контракте (Делегирование).
resources.py abilities выводит эффективный набор и источник каждой возможности; команда работает только на чтение.
Связанные страницы
- Слой записей — контракт, журнал и доказательства.
- Делегирование — как план использует возможность
subagents. - Аддоны — сами необязательные аддоны.