claude-harness/docs/superpowers/plans/2026-10-24-dsh-role-loader.md
2026-10-24 16:30:25 +04:00

61 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DSH role loader — план
Ветка: `feat/39-dsh-role-loader` (issue #39).
Спека/дизайн: `dsh/PORT.md`.
## Цель
Дать модели DSH штатный способ загрузить роль: skill `role`, который читает
`~/.dsh/roles/<r>.md`. `/role` остаётся пользовательской командой; глобальные
инструкции больше не требуют от модели вызвать slash-команду.
## Scope
1. `dsh/skills/role/SKILL.md` — model-invocable инструкция: определить роль,
прочитать файл, объявить роль, следовать процессу.
2. `dsh/install.sh --skills`: копировать локальные `dsh/skills/*` в
`$DSH_HOME/skills` вместе с superpowers.
3. `install_global`: adapter-строка «модель использует skill `role`; `/role` —
пользовательская команда».
4. Тесты: наличие/содержимое skill, install-копирование, `--check`.
5. README/PORT.
## Non-goals
- Кастомный `ctx.tools.register('role')` — отдельный вариант, если skill
окажется недостаточно.
- Автоматическая инъекция роли в `agent/pre-step` — возможный следующий шаг.
- Изменение `global/CLAUDE.md` (он общий с Claude Code и ограничен 3 КБ).
## Задачи
- [x] **Task 1: skill `role`**
- Create: `dsh/skills/role/SKILL.md`
- Frontmatter: `name: role`, description для каталога.
- Body: роль из первого сообщения; пути `~/.dsh/roles`, `~/.claude/roles`,
repo `roles/`; прочитать файл; объявить «Роль: <r>; если не так — скажи».
- Не вызывать `/role`; это команда пользователя.
- [x] **Task 2: install.sh**
- Modify: `dsh/install.sh`
- `install_local_skills()` копирует `$ROOT/dsh/skills/*` в `$DSH_HOME/skills`.
- `--skills` вызывает superpowers + local; `--all` уже включает.
- `check` проверяет `$DSH_HOME/skills/role/SKILL.md`.
- `install_global` добавляет adapter-строку про skill `role`.
- [x] **Task 3: тесты**
- Modify: `dsh/tests/install.test.mjs` — role skill скопирован.
- Add: `dsh/tests/role-skill.test.mjs` — frontmatter, пути, запрет `/role`.
- [x] **Task 4: docs**
- Modify: `dsh/README.md`, `dsh/PORT.md` — skill `role` vs `/role`.
- [x] **Task 5: проверки и коммит**
- `bash dsh/tests/run.sh`
- `bash tests/run.sh`
- Commit, push, PR #40 (base main).
## Acceptance
Свежая сессия DSH, «Let's make a react todo list»:
- модель вызывает `skill({name:"role"})`;
- читает `~/.dsh/roles/dev.md`;
- объявляет роль и следует процессу, без ручного `/role`.