mister-wolf 2.22.1 → 2.23.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.
- package/README.md +2 -2
- package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
- package/dist/adapters/cli/cli-entry.js +6 -0
- package/dist/adapters/cli/cli-entry.js.map +1 -1
- package/dist/adapters/cli/commands/usage.d.ts +3 -0
- package/dist/adapters/cli/commands/usage.d.ts.map +1 -0
- package/dist/adapters/cli/commands/usage.js +103 -0
- package/dist/adapters/cli/commands/usage.js.map +1 -0
- package/dist/adapters/fs/opencode-usage-db.d.ts +12 -0
- package/dist/adapters/fs/opencode-usage-db.d.ts.map +1 -0
- package/dist/adapters/fs/opencode-usage-db.js +116 -0
- package/dist/adapters/fs/opencode-usage-db.js.map +1 -0
- package/dist/app/use-cases/import-usage.d.ts +17 -0
- package/dist/app/use-cases/import-usage.d.ts.map +1 -0
- package/dist/app/use-cases/import-usage.js +69 -0
- package/dist/app/use-cases/import-usage.js.map +1 -0
- package/dist/app/use-cases/usage-signal.d.ts +91 -0
- package/dist/app/use-cases/usage-signal.d.ts.map +1 -0
- package/dist/app/use-cases/usage-signal.js +169 -0
- package/dist/app/use-cases/usage-signal.js.map +1 -0
- package/package.json +1 -1
- package/templates/base/agents/mr-wolf.md +20 -7
- package/templates/base/skills/finishing-a-development-branch/SKILL.md +2 -0
- package/templates/base/skills/using-git-worktrees/SKILL.md +2 -0
- package/templates/base/skills/using-skills/SKILL.md +10 -5
- package/templates/base/skills/wolf-brainstorm/SKILL.md +129 -16
- package/templates/base/skills/wolf-explain/SKILL.md +138 -99
- package/templates/base/skills/wolf-git/SKILL.md +54 -0
- package/templates/base/skills/wolf-git/reference/git-collaboration-policy-v1.1.md +553 -0
- package/templates/base/skills/wolf-handoff/SKILL.md +2 -0
- package/update-map.json +16 -6
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A1.1: чистый маппинг записи usage-источника (assistant-turn OpenCode 2.2.5) в
|
|
3
|
+
* событие `run` существующей схемы SignalEvent и агрегация run-итогов.
|
|
4
|
+
* Пишутся только поля SignalEventSchema (ADR-6): схема памяти не расширяется.
|
|
5
|
+
* Дизайн: docs/dev/2026-10-31-a1-1-measurements/design.md.
|
|
6
|
+
*/
|
|
7
|
+
import { createHash } from 'crypto';
|
|
8
|
+
export const USAGE_SOURCE_LIMITATIONS = [
|
|
9
|
+
'model variant is not carried over (no field in the signal schema)',
|
|
10
|
+
'reasoning and cache.write have undocumented semantics and are not added to output/cache_read or weighted',
|
|
11
|
+
'cost is not computed (the source has no pricing table)',
|
|
12
|
+
'task_id comes only from an explicit session-to-task map',
|
|
13
|
+
'attempt exists only when the source recorded a retry',
|
|
14
|
+
'duration_ms is turn wall-clock time, not answer length',
|
|
15
|
+
'unfinished turns (no completed timestamp) are not imported',
|
|
16
|
+
'an empty event set means unknown coverage, not zero usage',
|
|
17
|
+
];
|
|
18
|
+
/** Детерминированный id события: sha256("opencode-usage:v1|"+messageId), первые 32 hex. */
|
|
19
|
+
export function usageEventId(messageId) {
|
|
20
|
+
return createHash('sha256').update(`opencode-usage:v1|${messageId}`).digest('hex').slice(0, 32);
|
|
21
|
+
}
|
|
22
|
+
function modelRef(id, providerId) {
|
|
23
|
+
if (!id)
|
|
24
|
+
return null;
|
|
25
|
+
return providerId ? `${providerId}/${id}` : id;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* null — turn не завершён (нет completedMs) или нет session_id; иначе событие run.
|
|
29
|
+
*/
|
|
30
|
+
export function signalFromTurn(turn, ctx) {
|
|
31
|
+
const { completedMs, createdMs } = turn;
|
|
32
|
+
if (completedMs == null || !turn.sessionId)
|
|
33
|
+
return null;
|
|
34
|
+
const agent = turn.agent || ctx?.sessionAgent || null;
|
|
35
|
+
const modelId = modelRef(turn.modelId, turn.providerId) ?? modelRef(ctx?.sessionModel?.id, ctx?.sessionModel?.providerID);
|
|
36
|
+
const event = {
|
|
37
|
+
ts: new Date(completedMs).toISOString(),
|
|
38
|
+
event: 'run',
|
|
39
|
+
schema_version: 2,
|
|
40
|
+
session_id: turn.sessionId,
|
|
41
|
+
run_id: turn.sessionId,
|
|
42
|
+
event_id: usageEventId(turn.messageId),
|
|
43
|
+
gen_ai: { modelID: modelId, agent },
|
|
44
|
+
orchestration: { task: null, actor: agent ? `agent:${agent}` : 'opencode:unknown' },
|
|
45
|
+
};
|
|
46
|
+
if (ctx?.traceId)
|
|
47
|
+
event.trace_id = ctx.traceId;
|
|
48
|
+
if (ctx?.taskId)
|
|
49
|
+
event.task_id = ctx.taskId;
|
|
50
|
+
if (turn.attempt != null)
|
|
51
|
+
event.attempt = turn.attempt;
|
|
52
|
+
if (turn.tokens) {
|
|
53
|
+
const { input, output, cacheRead } = turn.tokens;
|
|
54
|
+
event.tokens = { input, output, cache_read: cacheRead };
|
|
55
|
+
event.weighted = input + 0.1 * cacheRead + 5 * output;
|
|
56
|
+
}
|
|
57
|
+
if (createdMs != null && completedMs - createdMs >= 0) {
|
|
58
|
+
event.duration_ms = completedMs - createdMs;
|
|
59
|
+
}
|
|
60
|
+
if (turn.finish === 'stop' || turn.finish === 'tool-calls')
|
|
61
|
+
event.outcome = 'ok';
|
|
62
|
+
else if (turn.finish === 'error')
|
|
63
|
+
event.outcome = 'error';
|
|
64
|
+
return event;
|
|
65
|
+
}
|
|
66
|
+
/** Агрегация по run_id; порядок — по возрастанию первого ts. */
|
|
67
|
+
export function summarizeRuns(events, runs) {
|
|
68
|
+
const runById = new Map();
|
|
69
|
+
for (const run of runs)
|
|
70
|
+
runById.set(run.sessionId, run);
|
|
71
|
+
const groups = new Map();
|
|
72
|
+
for (const ev of events) {
|
|
73
|
+
const runId = ev.run_id ?? ev.session_id;
|
|
74
|
+
if (!runId)
|
|
75
|
+
continue;
|
|
76
|
+
const group = groups.get(runId);
|
|
77
|
+
if (group)
|
|
78
|
+
group.push(ev);
|
|
79
|
+
else
|
|
80
|
+
groups.set(runId, [ev]);
|
|
81
|
+
}
|
|
82
|
+
for (const run of runs) {
|
|
83
|
+
if (!groups.has(run.sessionId))
|
|
84
|
+
groups.set(run.sessionId, []);
|
|
85
|
+
}
|
|
86
|
+
const ordered = [];
|
|
87
|
+
for (const [runId, group] of groups) {
|
|
88
|
+
const run = runById.get(runId);
|
|
89
|
+
ordered.push({
|
|
90
|
+
ts: group[0]?.ts ?? (run?.createdMs != null ? new Date(run.createdMs).toISOString() : ''),
|
|
91
|
+
summary: summarizeRun(runId, group, run),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
ordered.sort((a, b) => (a.ts === b.ts ? a.summary.runId.localeCompare(b.summary.runId) : a.ts.localeCompare(b.ts)));
|
|
95
|
+
return ordered.map((entry) => entry.summary);
|
|
96
|
+
}
|
|
97
|
+
function summarizeRun(runId, group, run) {
|
|
98
|
+
const unknowns = [];
|
|
99
|
+
const firstString = (pick) => {
|
|
100
|
+
for (const ev of group) {
|
|
101
|
+
const value = pick(ev);
|
|
102
|
+
if (typeof value === 'string' && value !== '')
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
};
|
|
107
|
+
const taskIds = new Set();
|
|
108
|
+
for (const ev of group) {
|
|
109
|
+
if (typeof ev.task_id === 'string' && ev.task_id !== '')
|
|
110
|
+
taskIds.add(ev.task_id);
|
|
111
|
+
}
|
|
112
|
+
const taskId = taskIds.size === 1 ? ([...taskIds][0] ?? null) : null;
|
|
113
|
+
if (!taskId)
|
|
114
|
+
unknowns.push('task-unknown');
|
|
115
|
+
const attemptSet = new Set();
|
|
116
|
+
for (const ev of group) {
|
|
117
|
+
if (typeof ev.attempt === 'number')
|
|
118
|
+
attemptSet.add(ev.attempt);
|
|
119
|
+
}
|
|
120
|
+
const attempts = [...attemptSet].sort((a, b) => a - b);
|
|
121
|
+
if (attempts.length === 0)
|
|
122
|
+
unknowns.push('attempt-unknown');
|
|
123
|
+
let tokens = null;
|
|
124
|
+
for (const ev of group) {
|
|
125
|
+
if (!ev.tokens)
|
|
126
|
+
continue;
|
|
127
|
+
tokens = tokens ?? { input: 0, output: 0, cacheRead: 0 };
|
|
128
|
+
tokens.input += ev.tokens.input;
|
|
129
|
+
tokens.output += ev.tokens.output;
|
|
130
|
+
tokens.cacheRead += ev.tokens.cache_read;
|
|
131
|
+
}
|
|
132
|
+
if (!tokens)
|
|
133
|
+
unknowns.push('tokens-unknown');
|
|
134
|
+
let generationMs = null;
|
|
135
|
+
for (const ev of group) {
|
|
136
|
+
if (typeof ev.duration_ms !== 'number')
|
|
137
|
+
continue;
|
|
138
|
+
generationMs = (generationMs ?? 0) + ev.duration_ms;
|
|
139
|
+
}
|
|
140
|
+
if (generationMs === null)
|
|
141
|
+
unknowns.push('duration-unknown');
|
|
142
|
+
const outcomes = { ok: 0, error: 0, unknown: 0 };
|
|
143
|
+
for (const ev of group) {
|
|
144
|
+
if (ev.outcome === 'ok')
|
|
145
|
+
outcomes.ok += 1;
|
|
146
|
+
else if (ev.outcome === 'error')
|
|
147
|
+
outcomes.error += 1;
|
|
148
|
+
else
|
|
149
|
+
outcomes.unknown += 1;
|
|
150
|
+
}
|
|
151
|
+
if (group.length === 0)
|
|
152
|
+
unknowns.push('no-events');
|
|
153
|
+
return {
|
|
154
|
+
runId,
|
|
155
|
+
sessionId: firstString((ev) => ev.session_id) ?? run?.sessionId ?? runId,
|
|
156
|
+
traceId: firstString((ev) => ev.trace_id),
|
|
157
|
+
taskId,
|
|
158
|
+
attempts: attempts.length > 0 ? attempts : null,
|
|
159
|
+
model: firstString((ev) => ev.gen_ai.modelID),
|
|
160
|
+
agent: firstString((ev) => ev.gen_ai.agent),
|
|
161
|
+
tokens,
|
|
162
|
+
generationMs,
|
|
163
|
+
busyMs: run?.busyMs ?? null,
|
|
164
|
+
events: group.length,
|
|
165
|
+
outcomes,
|
|
166
|
+
unknowns,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=usage-signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-signal.js","sourceRoot":"","sources":["../../../src/app/use-cases/usage-signal.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,8 +29,11 @@ git-метаданные, веб), не для исполнения работы
|
|
|
29
29
|
## Контекст-бюджет уровня L0
|
|
30
30
|
|
|
31
31
|
- Только метаданные: брифы, решения, отчёты, вердикты. Кода не касается.
|
|
32
|
+
Содержательное изучение материалов задачи, включая документацию и репозиторий,
|
|
33
|
+
— тоже исполнение через L1. Read-only, Markdown, информационный вопрос и малый
|
|
34
|
+
объём не дают L0 исключения из роли.
|
|
32
35
|
- Не выполняй реализацию и не выдавай непроверенные детали кода за факт.
|
|
33
|
-
Объяснять пользователю
|
|
36
|
+
Объяснять пользователю ход работы, причины решений и последствия
|
|
34
37
|
изменений по проверенным материалам исполнителей — твоя обязанность.
|
|
35
38
|
- Раскукоженный Mr.Wolf (сам собирает, тестирует, правит) = утечка
|
|
36
39
|
исполнения наверх: запустил сам — потерял право вердикть по отчёту.
|
|
@@ -86,8 +89,12 @@ Wolf. Не считай их уроками, жалобами или утвер
|
|
|
86
89
|
загрузи через механизм скиллов; не считай краткое описание методикой.
|
|
87
90
|
Проверяй применимость перед ответом/действием при новом запросе, смене цели
|
|
88
91
|
или этапа. Не загружай ту же актуальную инструкцию на каждом сообщении.
|
|
89
|
-
Новая
|
|
90
|
-
|
|
92
|
+
Новая идея, разработка, существенное изменение или новое содержательное
|
|
93
|
+
поручение (изучить, сравнить, написать документ) требуют wolf-brainstorm
|
|
94
|
+
ДО исследования предмета, диспетча, требований и реализации. Сначала сделай
|
|
95
|
+
понимание цели видимым пользователю и дай его поправить по гейту скилла;
|
|
96
|
+
прямое поручение сокращает разговор, не отменяет сверку. Продолжение уже
|
|
97
|
+
подтверждённой цели и готовый ответ из контекста не требуют нового опроса;
|
|
91
98
|
баг — wolf-debug, заявление о готовности — verification-before-completion.
|
|
92
99
|
|
|
93
100
|
Для новой самостоятельной цели разработки сначала сверь существующие
|
|
@@ -103,9 +110,12 @@ wolf-brainstorm ДО вопросов о требованиях, проекти
|
|
|
103
110
|
|
|
104
111
|
## Процедура
|
|
105
112
|
|
|
106
|
-
1.
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
1. **Общее понимание по wolf-brainstorm**: помоги сформулировать намерение,
|
|
114
|
+
объясни существенные подходы и последствия по wolf-explain. При готовом
|
|
115
|
+
поручении достаточно короткой сверки результата; не подменяй его разработкой
|
|
116
|
+
новой системы. Готовность определяет понимание, а не число вопросов.
|
|
117
|
+
После согласованного перехода организуй требования либо прямо порученный
|
|
118
|
+
результат; не начинай повторное прояснение неизменившегося.
|
|
109
119
|
2. **Бриф и диспетч**: контекст (2–5 предложений), критерии приёмки
|
|
110
120
|
(каждый проверяем по отчёту, без чтения кода), команда валидации,
|
|
111
121
|
scope. Диспетчеризуй `executor-lead`.
|
|
@@ -171,7 +181,10 @@ wolf-brainstorm ДО вопросов о требованиях, проекти
|
|
|
171
181
|
## Общение с пользователем
|
|
172
182
|
|
|
173
183
|
Ты отвечаешь за понимание пользователем цели, результата и следующего шага.
|
|
174
|
-
|
|
184
|
+
Говори понятным человеческим языком: кто что делает, почему это нужно
|
|
185
|
+
для цели и что меняется для пользователя. Точные машинные статусы предназначены
|
|
186
|
+
агентам; человеку объясняй их значение. Реплика продолжает разговор без
|
|
187
|
+
повторного пересказа всего контекста; итоговый ответ должен быть самостоятельным.
|
|
175
188
|
Сначала отвечай на вопрос, затем раскрывай необходимые причины, последствия
|
|
176
189
|
и ограничения. Технически опытный пользователь не обязан знать внутренний
|
|
177
190
|
сленг Wolf. Сохраняй точность, но поясняй нужные термины.
|
|
@@ -12,6 +12,8 @@ L1 проверяет выполненный scope, ACCEPTANCE и текущие
|
|
|
12
12
|
Загрузи полный текст назначенной методики до её выполнения. Обязательные пункты отслеживай в доступном трекере или рабочем брифе; не добавляй новые статусы памяти. Недоступное действие передай ответственному уровню.
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
Уборка и завершение — гейт G9 по `wolf-git` и §15 регламента.
|
|
16
|
+
|
|
15
17
|
## Предусловия
|
|
16
18
|
|
|
17
19
|
Ответственный — L1 с действующими правами. Проверь ACCEPTANCE/ограничения, валидные проверки, project base branch, worktree list и состояние рабочей копии. Сохрани task branch, абсолютный worktree path, base/head и uncommitted/untracked до переключений. Не повторяй full check, если evidence всё ещё применимо; объединённый результат требует проверки.
|
|
@@ -12,6 +12,8 @@ L0 поручает подготовку L1; L2 получает готовую
|
|
|
12
12
|
Загрузи полный текст назначенной методики до её выполнения. Обязательные пункты отслеживай в доступном трекере или рабочем брифе; не добавляй новые статусы памяти. Недоступное действие передай ответственному уровню.
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
Git-этапы задачи ведутся по `wolf-git`; baseline и ownership ниже не меняются.
|
|
16
|
+
|
|
15
17
|
## Владелец
|
|
16
18
|
|
|
17
19
|
Создание, настройка и git-операции — L1 либо разрешённая исполнительская роль. L2 получает готовые cwd, branch и allowlist. Следуй профилю проекта; local .worktrees/<task> — рекомендуемый fallback, не универсальный запрет других путей.
|
|
@@ -7,7 +7,7 @@ description: "Применять L0/L1 в начале общения и пер
|
|
|
7
7
|
|
|
8
8
|
## Сначала методика, затем действие
|
|
9
9
|
|
|
10
|
-
Перед ответом или действием проверь, какие скиллы требуются текущим запросом и стадией работы. Сначала загрузи применимые процессные скиллы, затем задавай вопросы, исследуй, планируй и назначай исполнение.
|
|
10
|
+
Перед ответом или действием проверь, какие скиллы требуются текущим запросом и стадией работы. Сначала загрузи применимые процессные скиллы, затем задавай вопросы, исследуй, планируй и назначай исполнение. Новая содержательная цель сначала проходит сверку понимания по wolf-brainstorm; его вход не требует автоматически писать требования. Продолжение уже согласованной цели не запускает этот этап заново.
|
|
11
11
|
|
|
12
12
|
Описание скилла, его название и память о прошлой версии не заменяют полный текст. Если есть обоснованное сомнение в применимости — загрузи и проверь; неподходящую методику выполнять не обязан. Не перебирай весь каталог. Для следующего сообщения той же стадии применяй уже загруженный актуальный текст. Заново оцени процесс при новой цели, изменении условий, баге или переходе этапа; повторная загрузка нужна при новой методике, смене версии или утрате инструкции из контекста.
|
|
13
13
|
|
|
@@ -17,7 +17,7 @@ description: "Применять L0/L1 в начале общения и пер
|
|
|
17
17
|
|
|
18
18
|
## Полномочия и действующие ограничения
|
|
19
19
|
|
|
20
|
-
L0 держит цель, общается с пользователем, назначает процесс, принимает по отчётам и для поставки вызывает только executor-агентов; служебный steward допускается лишь в явно разрешённом рамкой контуре. L1 фиксирует режим, декомпозирует, управляет L2, интегрирует и выполняет разрешённые git-операции. L2 выполняет одну назначенную подзадачу, читает необходимые источники, пишет только allowlist, не спавнит и не коммитит. Недоступность инструмента не расширяет роль.
|
|
20
|
+
L0 держит цель, общается с пользователем, назначает процесс, принимает по отчётам и для поставки вызывает только executor-агентов; служебный steward допускается лишь в явно разрешённом рамкой контуре. L1 фиксирует режим, декомпозирует, управляет L2, интегрирует и выполняет разрешённые git-операции. L2 выполняет одну назначенную подзадачу, читает необходимые источники, пишет только allowlist, не спавнит и не коммитит. Недоступность инструмента не расширяет роль. Содержательное изучение материалов и проверка фактов задачи — исполнение через L1, даже если это read-only, Markdown или небольшой информационный вопрос; L0 использует доставленные метаданные и не придумывает исключение по формату файла.
|
|
21
21
|
|
|
22
22
|
L2 не запускает заново продуктовый discovery и не выбирает организацию процесса. Он читает назначенные скиллы до исполнения; недостающую методику или противоречие передаёт L1. Назначенную дисциплину выполняет в конечном мандате; неожиданная сложность,
|
|
23
23
|
новая гипотеза/способ или решение вне TASK → результат и вопрос L1 сразу,
|
|
@@ -58,19 +58,21 @@ wolf-debug: один осмысленный обход в scope, затем FRIC
|
|
|
58
58
|
|
|
59
59
|
| Ситуация | Обязательная методика и результат |
|
|
60
60
|
| --- | --- |
|
|
61
|
-
|
|
|
61
|
+
| Новая идея, разработка или существенное изменение | wolf-brainstorm: сначала общее понимание, затем выбранный результат; требования/бриф — при переходе к разработке |
|
|
62
|
+
| Новое поручение изучить, сравнить или подготовить документ | Короткая сверка намерения по wolf-brainstorm до исследования и диспетча; после подтверждения — ограниченное исполнение без обязательного пакета требований |
|
|
62
63
|
| «Спланируй новую возможность» без утверждённых требований | Сначала wolf-brainstorm; планирование не заменяет прояснение цели |
|
|
63
64
|
| Утверждённые требования; FULL или новые контракты | wolf-design; затем после нужного утверждения wolf-plan и wolf-testplan |
|
|
64
65
|
| Утверждённый план, входы сверены | L1: wolf-sdd; разрешённая исполнительская роль без диспетчеризации: wolf-execute |
|
|
65
66
|
| Баг, падение проверки, неожиданное поведение | wolf-debug до исправления; реализация нового поведения/фикса — test-driven-development |
|
|
66
67
|
| Требуется изоляция записи | using-git-worktrees перед изменениями |
|
|
68
|
+
| Git-граница задачи: вход/возобновление, ветка, checkpoint, передача, завершение | wolf-git |
|
|
67
69
|
| Ревью документов / ревью кода | wolf-review / requesting-code-review; обработка замечаний — receiving-code-review |
|
|
68
70
|
| «Готово», «исправлено», «проверено» | verification-before-completion до утверждения; затем согласованный finishing-a-development-branch |
|
|
69
71
|
| Смена сессии, исполнителя или восстановление | wolf-handoff |
|
|
70
72
|
| Создание/изменение методики / внешний пакет | writing-skills / wolf-skill-intake |
|
|
71
73
|
| Ответ Вольфа человеку | wolf-explain; не заменяет процесс и проверки |
|
|
72
74
|
|
|
73
|
-
Процессные скиллы идут раньше исполнительских. Условия FULL/LITE/FIX определяют объём, а не разрешают не загружать нужную методику. Уже утверждённую неизменившуюся задачу не возвращай в брейншторм. Информационный вопрос о существующем состоянии не превращай автоматически в новую разработку.
|
|
75
|
+
Процессные скиллы идут раньше исполнительских. Условия FULL/LITE/FIX определяют объём, а не разрешают не загружать нужную методику. Уже утверждённую неизменившуюся задачу не возвращай в брейншторм. Информационный вопрос о существующем состоянии не превращай автоматически в новую разработку. Известный ответ дай по доставленному контексту; если нужен поиск, соблюдай сверку цели и рамку роли.
|
|
74
76
|
|
|
75
77
|
## Контекст по ответственности
|
|
76
78
|
|
|
@@ -154,6 +156,9 @@ plan.md и test-plan.md. Это документация для следующи
|
|
|
154
156
|
L2 по умолчанию возвращает RESULT/findings/review сообщением. Право создать файл
|
|
155
157
|
должно содержать точный путь и назначение; разрешения на каталог недостаточно.
|
|
156
158
|
Явное задание обновить основной документ допустимо в назначенном разделе.
|
|
159
|
+
Опциональный итог разговора по wolf-brainstorm — pre-requirements.md в папке той же
|
|
160
|
+
цели: он не входит в эти четыре документа, не запускает scaffold и не означает
|
|
161
|
+
утверждённые требования.
|
|
157
162
|
|
|
158
163
|
Дополнения — единичные самостоятельные документы с пользой после этапа, например
|
|
159
164
|
необходимый migration-guide или итоговое исследование. L1 до создания указывает
|
|
@@ -175,7 +180,7 @@ L2 по умолчанию возвращает RESULT/findings/review сооб
|
|
|
175
180
|
|
|
176
181
|
При запросе на реальную разработку или изменение продукта L0 сверяет существующие треды и цель. Продолжение той же цели сохраняет тред. Для новой самостоятельной цели без подходящего треда создай его поддержанным механизмом памяти, например wolf thread add с title и goal; запомни фактический ID. Не создавай тред на каждое уточнение, приветствие или вопрос о текущем состоянии.
|
|
177
182
|
|
|
178
|
-
Передай L1 ID треда, цель, известные ограничения и назначенную методику. L1 фиксирует FULL/LITE/FIX до выбора документного профиля.
|
|
183
|
+
Передай L1 ID треда, цель, известные ограничения и назначенную методику. L1 фиксирует FULL/LITE/FIX до выбора документного профиля. До согласованного перехода к формализации не создавай requirements.md и downstream-шаблоны. По выбору пользователя допустим отдельный итог pre-requirements.md в папке той же цели по wolf-brainstorm; он не запускает scaffold и не означает утверждение требований.
|
|
179
184
|
|
|
180
185
|
В FULL исполнитель использует wolf scaffold artifact <slug>; сохраняет четыре шаблонных файла в docs/dev/<date>-<slug>/. FIX — профиль --fix, когда он подходит задаче; LITE — достаточный бриф. Ссылки на документы и принятые решения связывай с тредом существующим поддержанным способом, не придумывай поля схемы. Если инструменты памяти недоступны, обозначь ограничение и передай запись исполнителю; разговор можно продолжить, нельзя утверждать, что тред создан.
|
|
181
186
|
|
|
@@ -1,32 +1,145 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wolf-brainstorm
|
|
3
|
-
description: "Применять при
|
|
3
|
+
description: "Применять L0 при новой идее, разработке, существенном изменении или новом содержательном поручении, включая анализ и подготовку документа, когда понимание цели ещё не сверено; до исследования предмета, требований, проектирования и постановки исполнения. L1/L2 применяют назначенную часть по согласованному брифу без повторного опроса пользователя."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Намерение пользователя → общее понимание → нужный результат
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Применяй к задачам любой предметной области: разработке, анализу, организации
|
|
9
|
+
работы, подготовке материалов и другим поручениям. Выясняй намерение из текущего
|
|
10
|
+
контекста; не переноси цель, источники или способ работы из прежнего примера.
|
|
11
|
+
Результатом могут быть решение, объяснение, документ или выполненное действие.
|
|
12
|
+
Технические требования и проектная папка нужны только при соответствующей задаче.
|
|
9
13
|
|
|
10
|
-
|
|
14
|
+
## Обязательный вход и роли
|
|
11
15
|
|
|
12
|
-
|
|
16
|
+
Загрузи полный текст до прояснения новой цели. L0 ведёт разговор; L1 организует
|
|
17
|
+
исследование, документы и исполнителей. Поясняй по wolf-explain в этом же
|
|
18
|
+
разговоре, без отдельного агента и повторной загрузки актуальной методики.
|
|
13
19
|
|
|
14
|
-
Вход: запрос,
|
|
20
|
+
Вход: запрос, относящийся контекст, действующие решения/ограничения, доставленные
|
|
21
|
+
брифы/отчёты, task/thread ID при наличии. Не подменяй цель старой подзадачей.
|
|
22
|
+
Продолжение согласованной неизменившейся работы не требует нового discovery.
|
|
15
23
|
|
|
16
|
-
|
|
24
|
+
L0 использует метаданные. Содержательное изучение материалов и поиск
|
|
25
|
+
фактов задачи поручай через L1. Markdown, read-only, «информационный вопрос»
|
|
26
|
+
и «быстро посмотрю» не создают исключений из роли.
|
|
17
27
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
## Выбери глубину разговора, сохрани цель
|
|
29
|
+
|
|
30
|
+
| Ситуация | Действие |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| Пользователь ищет идею/направление | Помоги осмыслить проблему, подходы и последствия; документ или разработка не обязательны. |
|
|
33
|
+
| Конкретное поручение: изучить, сравнить, написать, исправить | Кратко сверь цель/результат; затем организуй порученную работу, без автоматического requirements.md. |
|
|
34
|
+
| Существенно разные прочтения | Покажи различие сценарием или предположением и выясни намерение. |
|
|
35
|
+
| Простой вопрос с ответом в доставленном контексте | Ответь; не запускай тред и исследование ради формальности. |
|
|
36
|
+
|
|
37
|
+
До исследования предмета, диспетча исполнения, scaffold и требований изложи
|
|
38
|
+
своё понимание новой содержательной задачи так, чтобы пользователь мог его
|
|
39
|
+
поправить; по умолчанию дождись ответа. Прямое поручение сокращает разговор,
|
|
40
|
+
не отменяет сверку. Не выдумывай неизвестное ради вопроса. Подтверждение именно
|
|
41
|
+
этой цели/границ сохраняет силу; повторный одинаковый гейт не нужен. Явное
|
|
42
|
+
«продолжай без вопросов» учитывай в его пределах, назвав существенные допущения;
|
|
43
|
+
молчание не подтверждение.
|
|
44
|
+
|
|
45
|
+
Различай желаемый результат и предложенный способ его получить. Не превращай
|
|
46
|
+
сравнение в обязательную унификацию, совет — в проект внедрения, а подготовку
|
|
47
|
+
документа — в разработку новой системы. Широта исходных материалов сама по себе
|
|
48
|
+
не разрешает расширять задачу или применять процесс разработки FULL.
|
|
49
|
+
|
|
50
|
+
## Содержательный диалог вместо анкеты
|
|
51
|
+
|
|
52
|
+
Помоги выразить, чего пользователь хочет добиться и почему. Количество вопросов,
|
|
53
|
+
заполненные поля и уверенный тон не доказывают понимания. Не задавай обязательные
|
|
54
|
+
два, три или пять вопросов и не проходи универсальную анкету.
|
|
55
|
+
|
|
56
|
+
Опирайся на контекст и последний ответ. Выбери полезный ход: проверь предположение,
|
|
57
|
+
покажи сценарий/последствие, предложи подход, выяви противоречие, возрази с
|
|
58
|
+
основанием или спроси. Вопрос нужен, когда ответ меняет понимание, выбор или
|
|
59
|
+
ближайшее действие. Не спрашивай известное и не требуй готовых требований.
|
|
60
|
+
|
|
61
|
+
Одна основная мысль за реплику; обычно один содержательный вопрос, если нужен.
|
|
62
|
+
Не пересказывай весь разговор и не показывай внутренний перебор сомнений.
|
|
63
|
+
Объясняй варианты через конкретные действия и последствия. Рекомендуй с причиной
|
|
64
|
+
и существенным компромиссом. Обсуждай технические предложения пользователя
|
|
65
|
+
на равных; не соглашайся автоматически. Свои предложения не выдавай за его
|
|
66
|
+
решения; число альтернатив определяется реальным выбором.
|
|
67
|
+
|
|
68
|
+
## Исследование и консилиум
|
|
69
|
+
|
|
70
|
+
Разговор не разрешает фоновое исследование, документы и спавн сам по себе.
|
|
71
|
+
Покажи, какой вопрос и зачем нужно проверить; поручай через L1 отдельную задачу
|
|
72
|
+
с источниками/границами, ожидаемым результатом, бюджетом и условием остановки.
|
|
73
|
+
В уже порученном исследовании не запрашивай разрешение на каждое чтение;
|
|
74
|
+
изменение цели или объёма сначала верни на согласование.
|
|
75
|
+
|
|
76
|
+
Выбирай источники по вопросу и требуемой надёжности ответа; используй уже
|
|
77
|
+
доставленный контекст. Углубляй поиск, когда конкретный пробел мешает результату,
|
|
78
|
+
а не ради полного обзора всех материалов. Неизвестное отмечай; оно не всегда
|
|
79
|
+
требует нового исследования. Репозиторий, код и документация — возможные
|
|
80
|
+
источники для подходящих задач, не обязательный маршрут любого поручения.
|
|
81
|
+
|
|
82
|
+
Консилиум поручай L1 по явному запросу или для сложного выбора, когда независимые
|
|
83
|
+
мнения способны изменить решение и оправдывают стоимость. Соблюдай независимость
|
|
84
|
+
первых мнений и контракт ниже. Верни значимое согласие, расхождение и основания,
|
|
85
|
+
не стенограмму. Согласие участников не доказывает верность. Новые агенты и права
|
|
86
|
+
для этого не требуются.
|
|
87
|
+
|
|
88
|
+
## Готовность к следующему действию
|
|
89
|
+
|
|
90
|
+
Перед требованиями или исполнением проверь по разговору:
|
|
91
|
+
|
|
92
|
+
- Можешь объяснить проблему, результат и пользу своими словами.
|
|
93
|
+
- Учёл границы и поправки; пользователь мог проверить понимание, основание
|
|
94
|
+
продолжения относится к этой задаче.
|
|
95
|
+
- Различимы факты, подтверждённые решения, предложения и неизвестное.
|
|
96
|
+
- Нет расхождения, меняющего цель, результат или ближайший дорогой шаг.
|
|
97
|
+
|
|
98
|
+
Если пробел существенен, продолжи разговор либо поставь адресное исследование
|
|
99
|
+
в согласованном мандате. Знать весь дизайн заранее не нужно. Не экзаменуй
|
|
100
|
+
пользователя и не согласовывай повторно неизменившееся. После поправки цели
|
|
101
|
+
обнови понимание и затронутые решения до продолжения.
|
|
102
|
+
|
|
103
|
+
## Выход разговора и сохранение контекста
|
|
104
|
+
|
|
105
|
+
Допустимы продолжение и завершение без документа/разработки. Когда есть что
|
|
106
|
+
фиксировать, а следующий шаг не выбран, предложи: «Зафиксируем выводы документом
|
|
107
|
+
или перейдём к требованиям?» Не повторяй в каждой реплике и не навязывай два
|
|
108
|
+
выхода. Явный выбор действия пользователем не требует ещё такого же вопроса.
|
|
109
|
+
|
|
110
|
+
Для разговора о будущей разработке по выбору сохранить итог поручай L1 `pre-requirements.md` в
|
|
111
|
+
`docs/dev/<date>-<slug>/` рядом с будущими документами той же цели: намерение/польза,
|
|
112
|
+
границы, принятые решения с основаниями, варианты, предложения и открытые вопросы.
|
|
113
|
+
Это необязательный итог, не временный отчёт и не новый тип памяти. Сверь папку,
|
|
114
|
+
владельца и права записи/claim; для одного итога не вызывай scaffold четырёх файлов.
|
|
115
|
+
Отдельный CLI-профиль/авторегистрация этим скиллом не поставляются. После
|
|
116
|
+
утверждения требований актуальное поведение задаёт requirements.md; здесь
|
|
117
|
+
остаётся замысел. Рабочие следы — адресные note/context/history по using-skills,
|
|
118
|
+
без новых статусов и lessons/complaints для черновиков.
|
|
119
|
+
|
|
120
|
+
Для иных задач выбирай результат и место сохранения по их назначению и правилам
|
|
121
|
+
проекта; не создавай docs/dev и pre-requirements.md автоматически.
|
|
122
|
+
|
|
123
|
+
Передавай цель, решения/ограничения, существенные отклонённые варианты с причинами
|
|
124
|
+
и неизвестное, не стенограмму и повторный опрос. Для порученного анализа или
|
|
125
|
+
руководства передай исполнителю именно этот результат и критерии, без нового
|
|
126
|
+
пакета требований. Для самостоятельной разработки L0 сверяет/создаёт один
|
|
127
|
+
реальный тред; при недоступной записи обозначает ограничение и поручает её L1.
|
|
128
|
+
Свяжи сохранённый итог с тредом поддержанным способом.
|
|
129
|
+
|
|
130
|
+
При переходе к формализации разработки FULL даёт requirements.md, LITE —
|
|
131
|
+
утверждённый бриф; режим определяет L1. Сверка намерения не утверждает ещё
|
|
132
|
+
не написанные требования, дизайн или реализацию. Далее действуют правила ниже.
|
|
24
133
|
|
|
25
134
|
## Документы по штатному шаблону
|
|
26
135
|
|
|
27
|
-
|
|
136
|
+
Этот раздел и гейты требований ниже применяй при выбранном переходе к требованиям
|
|
137
|
+
разработки. Для обсуждения, анализа и иных поручений они не являются обязательным
|
|
138
|
+
продолжением разговора. Контракт совета применяй, только когда совет проводится.
|
|
139
|
+
|
|
140
|
+
До записи полного requirements L1 определяет режим и назначает ответственного за папку. Для новой папки в FULL выполни wolf scaffold artifact <slug>. Команда создаёт requirements.md, design.md, plan.md и test-plan.md; пустые downstream-шаблоны не являются утверждёнными документами. Для подтверждённого FIX подходит wolf scaffold artifact <slug> --fix; LITE не требует набора из четырёх файлов.
|
|
28
141
|
|
|
29
|
-
Проверь доступность команды перед выбором fallback. Если папка уже существует, проверь её связь с той же целью и продолжи её; не перезаписывай и не создавай дубликат. Если генератор недоступен, используй точный шаблон установленной версии из доступного проверенного источника. При недоступном шаблоне сохрани черновик и ограничение; не объявляй произвольный формат штатным. L0 поручает запись документов исполнителю.
|
|
142
|
+
Проверь доступность команды перед выбором fallback. Если папка уже существует, проверь её связь с той же целью и продолжи её; не перезаписывай и не создавай дубликат. В том числе для папки с pre-requirements.md не вызывай scaffold повторно: он отклоняет существующую папку. Подготовь только недостающие документы по точному шаблону установленной версии, сохранив итог дискуссии и прежние файлы. Если генератор недоступен, используй точный шаблон установленной версии из доступного проверенного источника. При недоступном шаблоне сохрани черновик и ограничение; не объявляй произвольный формат штатным. L0 поручает запись документов исполнителю.
|
|
30
143
|
|
|
31
144
|
Для FULL сохрани frontmatter slug/title/status/created и семь разделов:
|
|
32
145
|
|
|
@@ -90,4 +203,4 @@ L0 сверяет цель с существующими тредами; для
|
|
|
90
203
|
| «Создам папку как привык» | Используй штатный генератор либо точный проверенный шаблон |
|
|
91
204
|
| «Тред появится сам от scaffold» | Создание документов и треда — разные действия; проверь оба |
|
|
92
205
|
| «Вызвал скилл вручную — дальше обычный разговор» | Пройди обязательные шаги и проверь выход |
|
|
93
|
-
| «Нужно спрашивать даже очевидное» |
|
|
206
|
+
| «Нужно спрашивать даже очевидное» | После сверки намерения не устраивай дополнительный опрос ради формы |
|