Команда Management

/dr-plugin

Управление opt-in плагинами: list, enable, disable, sync, doctor

Обзор

/dr-plugin — CLI plugin-системы Datarim, представленная в v1.23.0 (<TASK-ID>). Управляет opt-in набором skills, agents, commands и templates за пределами встроенного datarim-core. Плагины opt-in по дизайну: ничего не подгружается, пока оператор явно не включит — это держит AI-контекст лёгким и dependency graph детерминированным.

Плагины — локальные директории (или git URL в будущей фазе) формата {plugin-id}/{plugin.yaml, skills/, agents/, commands/, templates/}. CLI создаёт симлинки в рантайм проекта, .datarim-runtime/local/{category}/{plugin-id}/, с namespace-изоляцией (в домашний каталог ничего не пишется), опциональная root-position установка через поле overrides:. Активный набор хранится в datarim/enabled-plugins.md — единственный source of truth.

Использование

# Активные + bootstrap на первом запуске
/dr-plugin list

# Включить локальный plugin (абсолютный путь)
/dr-plugin enable /path/to/my-plugin

# Отключить активный plugin (удалит symlinks + manifest entry)
/dr-plugin disable my-plugin

# Отключить / вернуть встроенную политику, включённую по умолчанию (только tombstone)
/dr-plugin disable tdd-enforcement
/dr-plugin enable tdd-enforcement

# Реконсиляция runtime ↔ manifest (идемпотентно)
/dr-plugin sync

# 10 проверок здоровья; --fix авто-чинит sync-fixable
/dr-plugin doctor
/dr-plugin doctor --fix

Контракт plugin source

Каталог plugin source должен содержать plugin.yaml минимум с полями:

schema_version: 1
id: my-plugin                # kebab-case, [a-z][a-z0-9-]{0,31}
title: My Plugin
version: 0.1.0
author: ...
license: MIT
description: ...
categories:
  - skills
  - commands
overrides:                   # опционально — root-position install
  - my-shadow-skill.md
depends_on:                  # опционально — другие plugin id
  - some-other-plugin

Проверки doctor (10)

  1. manifest-syntax — обязательные scalar-поля, валидные ID (error)
  2. inventory-consistency — declared symlinks присутствуют (error, --fix → sync)
  3. broken-symlinks — target symlink-а отсутствует (error, --fix → sync)
  4. orphan-files — runtime-файлы не в inventory (warning, --fix → sync)
  5. override-integrity — overrides должны быть в file_inventory (error, --fix → sync)
  6. dependency-graph — DFS детекция cycle/dangling (error)
  7. git-state — uncommitted manifest в git-репо (warning)
  8. snapshot-cleanup — snapshots старше 30 дней (warning, --fix → purge)
  9. skill-registry — frontmatter name: совпадает с basename (warning) — закрывает Skill-tool resolution gap при некорректном frontmatter
  10. disabled-defaults — раздел-tombstone ## Disabled Defaults для встроенных политик, включённых по умолчанию (например, tdd-enforcement), отсутствует или корректен (warning; при ошибке состояние и так откатывается к более строгой политике)

Exit-коды

  • 0 — clean
  • 1 — только warnings
  • 2 — найдены errors
  • 3 — concurrent invocation (lock держит другой процесс)
  • 64 — usage error

Безопасность

Каждый enable снимает tarball-snapshot runtime/ + manifest.md до применения изменений. При mid-apply сбое restore_from_snapshot атомарно откатывает. FIFO cap DR_PLUGIN_SNAPSHOT_MAX=50; age-based purge через DR_PLUGIN_SNAPSHOT_AGE_DAYS=30. Path traversal, embedded credentials в URL, CRLF в YAML — отклоняются на validation gate. Critical-core overrides (evolution, datarim-system, pre-archive-check) — warning на stderr, но allow: оператор решает.

Поставляемые плагины

Репозиторий фреймворка поставляет эти плагины в plugins/. Ни один из них не входит в 28 core-команд.

  • dr-orchestrate — раннер в терминальной панели для /dr-orchestrate: tmux-драйвер, семантический резолвер, бот-транспорт и audit-бэкенды.
  • dr-jev-control — опциональная проектная маршрутизация Jev для Claude Code, Codex и Cursor с полом против деструктивных команд и kill switch.
  • tdd-enforcement — метаданные без кода, включён по умолчанию: переключатель строгого test-first для workspace.
  • dr-fleet-evolution — Bash-цикл, улучшающий стартовые fleet-скиллы по сигналам исполнения за fail-closed гейтами.
  • controller-continuation (v3.1.0+) — рабочая точка входа /dr-continue-checkpoint для проектов со своим внешним контроллером. Возобновляет ровно записанную стадию по ресурсам контроллера, доступным только на чтение, с сохранением production HOLD. Подключайте с read-only монтирования фреймворка, а не через enable внутри недоверенного workspace. Только Linux; на других платформах — отказ continuation_unsupported_platform.

Когда плагины vs local/ overlay

  • Personal additions для одного чекаута проекта → .datarim-runtime/local/{skills,agents,commands,templates}/ (gitignored overlay; loader policy: local wins на name conflict).
  • Shareable extensions версионируемые как единое целое, распространяемые директорией или репо → /dr-plugin enable.

Отчёт о результате

Перед сообщением человеку применяется Human Outcome Reporting. Объясняются изменение для пользователя, исходные условия, проверки и доказательства, а также открытые ограничения. Итог этапа не означает завершения всей задачи. Точные протоколы и технические записи сохраняются. Для повторного объяснения без продолжения работы — /dr-explain.