Команда Management

/dr-plugin

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

Обзор

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

Плагины — локальные директории (или git URL в будущей фазе) формата {plugin-id}/{plugin.yaml, skills/, agents/, commands/, templates/}. CLI создаёт симлинки в ~/.claude/{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

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

# 9 проверок здоровья; --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 (9)

  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

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: оператор решает.

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

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