61 lines
3.0 KiB
Markdown
61 lines
3.0 KiB
Markdown
# 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`.
|