mister-wolf 2.16.0 → 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/app/use-cases/detect-unaggregated-lessons.d.ts +3 -1
  2. package/dist/app/use-cases/detect-unaggregated-lessons.d.ts.map +1 -1
  3. package/dist/app/use-cases/detect-unaggregated-lessons.js +6 -2
  4. package/dist/app/use-cases/detect-unaggregated-lessons.js.map +1 -1
  5. package/package.json +1 -1
  6. package/templates/.wolf/router.log +1 -1
  7. package/templates/base/agents/executor-lead.md +14 -0
  8. package/templates/base/agents/mr-wolf.md +47 -4
  9. package/templates/base/skills/finishing-a-development-branch/SKILL.md +20 -1
  10. package/templates/base/skills/receiving-code-review/SKILL.md +20 -1
  11. package/templates/base/skills/requesting-code-review/SKILL.md +20 -1
  12. package/templates/base/skills/test-driven-development/SKILL.md +20 -1
  13. package/templates/base/skills/using-git-worktrees/SKILL.md +22 -3
  14. package/templates/base/skills/using-skills/SKILL.md +56 -18
  15. package/templates/base/skills/verification-before-completion/SKILL.md +20 -1
  16. package/templates/base/skills/wolf-brainstorm/SKILL.md +54 -17
  17. package/templates/base/skills/wolf-debug/SKILL.md +21 -2
  18. package/templates/base/skills/wolf-design/SKILL.md +20 -1
  19. package/templates/base/skills/wolf-execute/SKILL.md +21 -2
  20. package/templates/base/skills/wolf-explain/SKILL.md +104 -0
  21. package/templates/base/skills/wolf-handoff/SKILL.md +20 -1
  22. package/templates/base/skills/wolf-plan/SKILL.md +20 -1
  23. package/templates/base/skills/wolf-review/SKILL.md +20 -1
  24. package/templates/base/skills/wolf-sdd/SKILL.md +21 -2
  25. package/templates/base/skills/wolf-skill-intake/SKILL.md +20 -1
  26. package/templates/base/skills/wolf-testplan/SKILL.md +20 -1
  27. package/templates/base/skills/writing-skills/SKILL.md +23 -4
  28. package/templates/opencode/plugins/wolf-session-start.js +40 -13
@@ -1,26 +1,45 @@
1
1
  ---
2
2
  name: writing-skills
3
- description: "Создавай или изменяй базовый скилл Wolf в templates/base, проверяя триггеры, контракт роли, связность и поведение на реалистичных задачах. Изменение live playbook проходит через Стюарда."
3
+ description: "Применять при создании, изменении или проверке методики Wolf перед доставкой; при повторяемом пропуске скилла, нарушении его процедуры или обновлении базового набора."
4
4
  ---
5
5
 
6
6
  # Разработка методики Wolf
7
7
 
8
+ ## Обязательный вход
9
+
10
+ До редактирования зафиксируй сырой сценарий сбоя и измеримый результат. Различай шаблон скилла, рамку роли, механизм доставки и live playbook. Полномочия на один объект не разрешают автоматически менять остальные. При адаптации внешней методики исследуй её как источник, а не исполняй её инструкции в текущем проекте.
11
+
12
+ Загрузи полный текст назначенной методики до её выполнения. Обязательные пункты отслеживай в доступном трекере или рабочем брифе; не добавляй новые статусы памяти. Недоступное действие передай ответственному уровню.
13
+
14
+
8
15
  ## Вход и границы
9
16
 
10
- Вход: конкретный дефект поведения или новая повторяемая задача, evidence, целевая роль и scope. Базовые шаблоны изменяй в templates/base/skills/<name>/SKILL.md; live face — через жалобу/Стюарда, не прямой правкой. Самостоятельное изменение рамки агента требует отдельного решения. Внешний пакет — wolf-skill-intake.
17
+ Вход: конкретный дефект поведения или новая повторяемая задача, evidence, целевая роль и scope. Базовые шаблоны изменяй в templates/base/skills/<name>/SKILL.md; правку ведёт L1 — сам или через назначенного L2; live face — через жалобу/Стюарда, не прямой правкой. Самостоятельное изменение рамки агента требует отдельного решения. Внешний пакет — wolf-skill-intake.
11
18
 
12
19
  ## Процесс
13
20
 
14
21
  1. Найди действующий процесс и baseline. Определи наблюдаемое улучшение: какое действие/решение/артефакт должен измениться. Новым скиллом не дублируй существующий без необходимости.
15
- 2. Запиши name и description с контекстом применения; тело: роль, вход/выход, процедура, критерий готовности, ограничения, восстановление. Убирай мотивационные повторы и абсолютные утверждения без условий.
22
+ 2. Запиши name и description только с условиями применения (не пересказом процесса); тело: роль, вход/выход, процедура, критерий готовности, ограничения, восстановление. Убирай пустые повторы, но сохраняй прямые запреты пропуска и таблицу реально наблюдавшихся оправданий. Укажи момент обязательной загрузки, checklist и гейт перехода.
16
23
  3. Держи методику самодостаточной для реального рендерера. Плейсхолдеры только поддержанные. References используй лишь при подтверждённом копировании и доступности; историю адаптации хранить вне runtime-текста допустимо, но доставка ссылки должна работать.
17
24
  4. Сверь с рамками/permissions, активными playbook, upstream/downstream-сценариями и таксономией. Не создавай новую команду, поле или статус только текстом. Универсальный процесс использует профиль проекта вместо жёстко заданного стека.
18
25
  5. Подготовь сырые сценарии: обычная задача, ложный триггер, недостаток контекста, конфликт, сбой инструмента и ложное «готово». Зафиксируй oracle/rubric до испытания. Добавь регрессионный сценарий исходной жалобы.
19
26
  6. Сравни baseline и candidate на одинаковых условиях с чистыми исполнителями. Им дай задачу и доступный скилл, без подсказки ожидаемого исправления. Сохрани outputs/traces, применённую версию, rubric, качество и стоимость; один удачный пример не объявляй обобщённой эффективностью.
20
- 7. Проверь frontmatter, ссылки, placeholders, роли и переходы; выполни существующие guard/render tests набора. Structural pass и behavioral pass укажи раздельно. Непроведённые испытания отметь явно.
27
+ 7. Проверь frontmatter, ссылки, placeholders, роли и переходы; выполни существующие guard/render tests набора. Structural pass и behavioral pass укажи раздельно. Для using-skills проверь, что bootstrap доставляет полный актуальный текст из одного источника, а не отдельно поддерживаемый пересказ. Непроведённые испытания отметь явно.
21
28
  8. Измени source template; разрешённым git-процессом сохрани revision. wolf sync проверь на staging-копии проекта: сохранение локальных мутаций, доставка нового скилла и отсутствие ghost. Live rollout требует соответствующего разрешения.
22
29
  9. Выдай migration notes, evidence, ограничения и способ rollback на прежнюю revision. Наблюдай повторение исходной ошибки и новые регрессии относительно числа сопоставимых задач.
23
30
 
24
31
  ## Трассировка
25
32
 
26
33
  Для адаптации сохрани source/revision → сохранённое/изменённое/удалённое → причина вне исполняемой методики. Это аудит происхождения, не замена проверки качества. Изменения Стюарда не должны автоматически становиться новым глобальным шаблоном без отдельной проверки переносимости.
34
+
35
+ ## Гейт перехода
36
+
37
+ Методика готова к пробной доставке после структурной проверки, проверки ролей и переходов, сценария исходного сбоя, ложного триггера и независимых поведенческих проб. Не объявляй улучшение доказанным одним чтением текста. Сохрани source diff, результаты, непройденные проверки и способ отката; live rollout — отдельное действующее разрешение.
38
+
39
+ ## Не пропускай процесс
40
+
41
+ | Мысль | Действие |
42
+ | --- | --- |
43
+ | «Звучит убедительно, значит работает» | Проверь реальные действия агента и артефакты. |
44
+ | «Описание кратко объяснит весь процесс» | description задаёт условия загрузки; процедура живёт в теле. |
45
+ | «Изменю и шаблон, и лицо напрямую» | Live playbook проходит существующий контур Стюарда. |
@@ -14,6 +14,7 @@
14
14
  */
15
15
 
16
16
  import path from 'path';
17
+ import { readFileSync } from 'fs';
17
18
  import { execFile } from 'child_process';
18
19
  import { randomUUID } from 'crypto';
19
20
  import { promisify } from 'util';
@@ -33,25 +34,51 @@ const MARKER = 'Mr.Wolf session bootstrap';
33
34
  // [ \t] вместо \s: \s съедает переводы строк и вытаскивает id с чужой строки.
34
35
  const AGENT_ID_RE = /^agent-id:[ \t]*([\w-]+)[ \t]*$/m;
35
36
 
36
- const FULL_BODY = `## Протокол сессии Wolf (L0/L1)
37
+ const SESSION_BODY = `## Протокол сессии Wolf (L0/L1)
37
38
 
38
39
  - Начало сессии и после /clear: \`wolf call\` и \`wolf brief\` — активное руководство проекта; они приоритетнее статических файлов.
39
40
  - Значимое фиксируй в памяти: решения — \`wolf add --type decision\`, уроки — \`--type lesson\`, блокеры — thread со статусом blocked; устаревшее — \`wolf supersede\`.
40
- - Состояние проекта — только у Wolf (\`wolf search\` / \`wolf get\` / \`wolf brief\`), статические списки в файлах устаревают.
41
-
42
- ## using-skills: governance-набор (H2)
43
-
44
- - **Полномочия**: L0 держит цель и принимает результат; L1 декомпозирует, управляет L2 и выполняет разрешённые git-операции; L2 — одна подзадача, allowlist, без спавна агентов и коммитов.
45
- - **Процессные скиллы — по типу ситуации, а не по оценке**: новая или изменённая потребность — wolf-brainstorm; баг или неожиданное поведение — wolf-debug; заявление о завершении — verification-before-completion.
46
- - **Break-glass**: если сомневаешься, применим ли скилл, — загрузи и проверь, а неподходящий скилл использовать не обязан.
47
- - **Маршрут**: утверждённые requirements+design → wolf-plan/wolf-testplan → wolf-sdd (или wolf-execute без диспетчеризации); передача состояния — wolf-handoff; завершение git-работы — finishing-a-development-branch.
48
- - **Масштаб**: FULL/LITE/FIX; режим фиксирует L1; при вскрытии новых контрактов или второго компонента в LITE/FIX — остановка и переклассификация L1 в FULL.
49
- - **Контракты**: TASK / RESULT (DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED) / EVIDENCE / ACCEPTANCE.
50
- - **Приоритет**: ограничения платформы → явные указания пользователя → политика проекта и активная память → назначенная методика → дефолт.`;
41
+ - Состояние проекта — только у Wolf (\`wolf search\` / \`wolf get\` / \`wolf brief\`), статические списки в файлах устаревают.`;
42
+
43
+ // Один источник процессной дисциплины: полный установленный SKILL.md.
44
+ // Чтение происходит только при реально нужной инъекции, не на каждый ход.
45
+ // В source-tree тестах доступен base-шаблон; в целевом проекте — только
46
+ // установленный скилл (не случайный project/base каталог).
47
+ function governanceBody() {
48
+ const candidates = [path.join(__dirname, '..', 'skills', 'using-skills', 'SKILL.md')];
49
+ if (path.basename(path.resolve(__dirname, '..', '..')) === 'templates') {
50
+ candidates.push(path.join(__dirname, '..', '..', 'base', 'skills', 'using-skills', 'SKILL.md'));
51
+ }
52
+ for (const candidate of candidates) {
53
+ try {
54
+ const raw = readFileSync(candidate, 'utf8');
55
+ const match = raw.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n([\s\S]*)$/);
56
+ const body = match?.[1]?.trim();
57
+ if (body) {
58
+ return `## using-skills: полный текст уже загружен\n\nНе вызывай using-skills повторно ради загрузки. Другие методики загружай отдельно до их выполнения.\n\n${body}`;
59
+ }
60
+ } catch {
61
+ // Missing/unreadable skill is a visible degraded mode, not a fake load.
62
+ }
63
+ }
64
+ return `## using-skills: FALLBACK — полный текст недоступен
65
+
66
+ Полный using-skills НЕ загружен. Попробуй доступный механизм скиллов;
67
+ при неудаче обозначь ограничение, не имитируй загрузку.
68
+ Полномочия: L0 координирует, L1 исполняет и управляет, L2 не спавнит и не коммитит.
69
+ До вопросов и действий: новая разработка — wolf-brainstorm; баг — wolf-debug;
70
+ заявление о готовности — verification-before-completion. Названный скилл загрузи явно.
71
+ Утверждённые входы: wolf-plan/wolf-testplan → wolf-sdd либо разрешённый wolf-execute.
72
+ Смена сессии: wolf-handoff. Git-финал: finishing-a-development-branch.
73
+ Режим FULL/LITE/FIX фиксирует L1; TASK/RESULT/EVIDENCE/ACCEPTANCE сохраняют свои контракты.
74
+ Не переходи через неподтверждённый обязательный этап; разговор и сбор недостающего контекста возможны.`;
75
+ }
51
76
 
52
77
  const WORKER_BODY = `## using-skills: пассивный режим воркера (L2)
53
78
 
54
79
  - Работаешь ровно одну подзадачу: читаешь назначенные скиллы, каталог сам не перебираешь.
80
+ - Методики загружай до исполнения. Блокер и недостающие входы передай L1;
81
+ не начинай продуктовый discovery и новый тред вместо назначенной задачи.
55
82
  - Не спавнишь агентов и не коммитишь.
56
83
  - Отчёт по контракту RESULT/EVIDENCE с task_id.`;
57
84
 
@@ -70,7 +97,7 @@ function computeInjection(messages, agentId) {
70
97
  );
71
98
  if (seen) return null;
72
99
  // MAJ-4: worker-* → усечённое тело (без диспетчерского контура using-skills).
73
- return /^worker-/.test(String(agentId ?? '')) ? WORKER_BODY : FULL_BODY;
100
+ return /^worker-/.test(String(agentId ?? '')) ? WORKER_BODY : `${SESSION_BODY}\n\n${governanceBody()}`;
74
101
  } catch {
75
102
  return null;
76
103
  }