mister-wolf 2.19.0 → 2.20.0

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 (72) hide show
  1. package/README.md +12 -1
  2. package/README.ru.md +19 -2
  3. package/dist/adapters/cli/commands/memory-doctor.d.ts.map +1 -1
  4. package/dist/adapters/cli/commands/memory-doctor.js.map +1 -1
  5. package/dist/adapters/cli/commands/memory-uninstall.d.ts.map +1 -1
  6. package/dist/adapters/cli/commands/memory-uninstall.js.map +1 -1
  7. package/dist/adapters/cli/commands/memory-upgrade.d.ts +143 -2
  8. package/dist/adapters/cli/commands/memory-upgrade.d.ts.map +1 -1
  9. package/dist/adapters/cli/commands/memory-upgrade.js +887 -41
  10. package/dist/adapters/cli/commands/memory-upgrade.js.map +1 -1
  11. package/dist/adapters/cli/commands/upgrade-projects.d.ts +4 -2
  12. package/dist/adapters/cli/commands/upgrade-projects.d.ts.map +1 -1
  13. package/dist/adapters/cli/commands/upgrade-projects.js +17 -7
  14. package/dist/adapters/cli/commands/upgrade-projects.js.map +1 -1
  15. package/dist/adapters/render/opencode/opencode-renderer.d.ts +35 -7
  16. package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -1
  17. package/dist/adapters/render/opencode/opencode-renderer.js +395 -115
  18. package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -1
  19. package/dist/adapters/render/stamp.d.ts +2 -0
  20. package/dist/adapters/render/stamp.d.ts.map +1 -1
  21. package/dist/adapters/render/stamp.js +9 -1
  22. package/dist/adapters/render/stamp.js.map +1 -1
  23. package/dist/adapters/render/sync-state.d.ts +15 -3
  24. package/dist/adapters/render/sync-state.d.ts.map +1 -1
  25. package/dist/adapters/render/sync-state.js +52 -8
  26. package/dist/adapters/render/sync-state.js.map +1 -1
  27. package/dist/app/use-cases/decisions.d.ts +247 -0
  28. package/dist/app/use-cases/decisions.d.ts.map +1 -0
  29. package/dist/app/use-cases/decisions.js +528 -0
  30. package/dist/app/use-cases/decisions.js.map +1 -0
  31. package/dist/app/use-cases/init-project.d.ts.map +1 -1
  32. package/dist/app/use-cases/init-project.js +34 -1
  33. package/dist/app/use-cases/init-project.js.map +1 -1
  34. package/dist/app/use-cases/platform-mismatch.d.ts +2 -1
  35. package/dist/app/use-cases/platform-mismatch.d.ts.map +1 -1
  36. package/dist/app/use-cases/platform-mismatch.js.map +1 -1
  37. package/dist/app/use-cases/project-step.d.ts +20 -1
  38. package/dist/app/use-cases/project-step.d.ts.map +1 -1
  39. package/dist/app/use-cases/project-step.js +101 -15
  40. package/dist/app/use-cases/project-step.js.map +1 -1
  41. package/dist/app/use-cases/repair-platform.d.ts +2 -1
  42. package/dist/app/use-cases/repair-platform.d.ts.map +1 -1
  43. package/dist/app/use-cases/repair-platform.js.map +1 -1
  44. package/dist/app/use-cases/sync-base-set.d.ts +4 -2
  45. package/dist/app/use-cases/sync-base-set.d.ts.map +1 -1
  46. package/dist/app/use-cases/sync-base-set.js +4 -2
  47. package/dist/app/use-cases/sync-base-set.js.map +1 -1
  48. package/dist/app/use-cases/uninstall.d.ts +2 -1
  49. package/dist/app/use-cases/uninstall.d.ts.map +1 -1
  50. package/dist/app/use-cases/uninstall.js.map +1 -1
  51. package/dist/app/use-cases/upgrade-projects.d.ts +30 -0
  52. package/dist/app/use-cases/upgrade-projects.d.ts.map +1 -1
  53. package/dist/app/use-cases/upgrade-projects.js +119 -4
  54. package/dist/app/use-cases/upgrade-projects.js.map +1 -1
  55. package/dist/app/use-cases/verify-against-map.d.ts +5 -1
  56. package/dist/app/use-cases/verify-against-map.d.ts.map +1 -1
  57. package/dist/app/use-cases/verify-against-map.js +34 -6
  58. package/dist/app/use-cases/verify-against-map.js.map +1 -1
  59. package/dist/domain/line-diff.d.ts +36 -0
  60. package/dist/domain/line-diff.d.ts.map +1 -0
  61. package/dist/domain/line-diff.js +175 -0
  62. package/dist/domain/line-diff.js.map +1 -0
  63. package/dist/domain/protect-key.d.ts +21 -0
  64. package/dist/domain/protect-key.d.ts.map +1 -0
  65. package/dist/domain/protect-key.js +112 -0
  66. package/dist/domain/protect-key.js.map +1 -0
  67. package/dist/ports/base-set-renderer.port.d.ts +51 -3
  68. package/dist/ports/base-set-renderer.port.d.ts.map +1 -1
  69. package/package.json +1 -1
  70. package/templates/.wolf/router.log +1 -1
  71. package/templates/base/AGENTS.md +6 -3
  72. package/update-map.json +3 -3
@@ -0,0 +1,528 @@
1
+ // src/app/use-cases/decisions.ts
2
+ // T7 (волна 2.20.0, REQ-06/REQ-05 AC3, design §4.7/§4.8/§4.12/§4.17):
3
+ // реестр решений владельца (read-only сбор + нумерация), разбор `--resolve`
4
+ // (грамматика, область целей, матрица «глагол × класс», двухфазная валидация)
5
+ // и применение решений (take/keep/protect/pin) с бэкапом локального контента.
6
+ // Сбор и валидация ничего не пишут; запись — только applyResolutions, после
7
+ // того как все ошибки собраны (AC3 «к другим файлам ничего не применено»).
8
+ import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
9
+ import { mkdir } from 'fs/promises';
10
+ import { basename, dirname, join } from 'path';
11
+ import { dedupeByRealpath } from '../../adapters/fs/projects-registry.js';
12
+ import { loadSyncState, saveSyncState, sha256 } from '../../adapters/render/sync-state.js';
13
+ import { parseStamp } from '../../adapters/render/stamp.js';
14
+ import { writeFileAtomic } from '../../adapters/fs/markdown-memory-store.js';
15
+ import { insertProtect, normalizeManaged, parseProtect, removeProtect } from '../../domain/protect-key.js';
16
+ import { projectPath } from './verify-against-map.js';
17
+ import { planOf } from './upgrade-projects.js';
18
+ import { backupLocalFile } from './project-step.js';
19
+ const KIND_OF = {
20
+ agent: 'agent',
21
+ skill: 'skill',
22
+ command: 'command',
23
+ plugin: 'plugin',
24
+ };
25
+ /** Каталоги base-set (LAYOUT рендерера): область wolf-управляемых файлов. */
26
+ const BASE_DIRS = ['.opencode/agents', '.opencode/skills', '.opencode/command', '.opencode/plugins'];
27
+ /**
28
+ * Тело шаблона лица — то же извлечение, что в `seed-base-playbooks.ts`
29
+ * (единственный источник предиката diverged: живое лицо сравнивается с телом
30
+ * шаблона, дрейф при initiator вне seed/migration — зона Стюарда).
31
+ */
32
+ function templateBody(raw) {
33
+ const m = raw.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
34
+ return m ? m[2] : raw;
35
+ }
36
+ async function divergedFaces(root, map, deps) {
37
+ if (!deps.liveFaces)
38
+ return [];
39
+ const live = await deps.liveFaces(root);
40
+ const out = [];
41
+ const seen = new Set();
42
+ for (const face of map.faces) {
43
+ if (!face.seed || seen.has(face.owner_skill))
44
+ continue;
45
+ seen.add(face.owner_skill);
46
+ const tpl = deps.faceTemplates?.get(basename(face.template));
47
+ if (tpl === undefined)
48
+ continue;
49
+ const active = live.find((f) => f.ownerSkill === face.owner_skill);
50
+ if (!active)
51
+ continue; // лица нет — штатный посев прохода, не решение владельца
52
+ if (active.body === templateBody(tpl))
53
+ continue; // совпало с шаблоном
54
+ if (active.initiator === 'seed' || active.initiator === 'migration')
55
+ continue; // штатное отставание
56
+ out.push({
57
+ project: basename(root),
58
+ file: `faces/${face.owner_skill}.md`,
59
+ ownerSkill: face.owner_skill,
60
+ version: active.version ?? null,
61
+ });
62
+ }
63
+ return out;
64
+ }
65
+ /**
66
+ * Реестр решений (design §4.7): строго read-only — `inspectBaseSet` +
67
+ * свидетель + чтение лиц. Порядок: реестр проектов → цели карты в порядке
68
+ * `map.files` → AGENTS.md; нумерация сквозная 1-based и стабильна при
69
+ * неизменном состоянии (NFR-06). `removed`-цели не нумеруются (их решает
70
+ * проход, адресация — только по пути), `deprecated` — тоже: они report-only
71
+ * (design §4.6/§4.7), orphan-дрейф — тоже (решается путём).
72
+ */
73
+ export async function collectDecisions(deps) {
74
+ const map = deps.loadMap();
75
+ const projects = [];
76
+ const skippedProjects = [];
77
+ if (deps.here !== undefined) {
78
+ projects.push({ name: basename(deps.here), root: deps.here });
79
+ }
80
+ else {
81
+ const registered = deps.registry ? await deps.registry.listStrict() : [];
82
+ const { unique } = dedupeByRealpath(registered);
83
+ for (const entry of unique) {
84
+ const plan = planOf(entry);
85
+ if (plan.status !== null) {
86
+ skippedProjects.push({ name: plan.name, reason: plan.status });
87
+ continue;
88
+ }
89
+ projects.push({ name: plan.name, root: plan.path });
90
+ }
91
+ }
92
+ const targets = [];
93
+ const diverged = [];
94
+ for (const project of projects) {
95
+ const outcomes = await deps.inspect(project.root);
96
+ const byFile = new Map(outcomes.map((o) => [o.file, o]));
97
+ const add = (file, kind, code) => {
98
+ targets.push({ n: targets.length + 1, project: project.name, root: project.root, file, kind, code });
99
+ };
100
+ // `foreign` с `detail` — наблюдение (сломанные onboarding-маркеры), а не
101
+ // решение: design §4.5 «needs-decision НЕ выставляется», причина — полем.
102
+ const decisionCode = (outcome) => {
103
+ if (outcome === undefined)
104
+ return null;
105
+ if (outcome.action === 'mutated')
106
+ return 'mutated';
107
+ if (outcome.action === 'foreign' && outcome.detail === undefined)
108
+ return 'conflict';
109
+ return null;
110
+ };
111
+ for (const entry of map.files) {
112
+ // deprecated — report-only (design §4.6/§4.7): как и removed, не решение;
113
+ // адресуется только путём (матрица §4.8, цель карты по пути).
114
+ if (entry.category === 'removed' || entry.category === 'deprecated')
115
+ continue;
116
+ const rel = projectPath(entry);
117
+ const code = decisionCode(byFile.get(rel));
118
+ if (code !== null)
119
+ add(rel, KIND_OF[entry.kind], code);
120
+ }
121
+ const agentsCode = decisionCode(byFile.get('AGENTS.md'));
122
+ if (agentsCode !== null)
123
+ add('AGENTS.md', 'agents-md', agentsCode);
124
+ diverged.push(...(await divergedFaces(project.root, map, deps)));
125
+ }
126
+ return { targets, diverged, skippedProjects, projects };
127
+ }
128
+ export const emptyPlan = () => ({
129
+ projects: 0,
130
+ new: 0,
131
+ changed: 0,
132
+ deprecated: 0,
133
+ removed: 0,
134
+ faces: 0,
135
+ });
136
+ export const jsonDecisions = (reg) => reg.targets.map((t) => ({ n: t.n, project: t.project, path: t.file, code: t.code }));
137
+ export const jsonDiverged = (reg) => reg.diverged.map((d) => ({ project: d.project, face: d.file, version: d.version, ownerSkill: d.ownerSkill }));
138
+ export const jsonProtections = (entries) => entries.map((e) => ({
139
+ project: basename(e.project),
140
+ path: e.file,
141
+ value: e.value,
142
+ recognized: e.recognized,
143
+ behind: e.behind,
144
+ }));
145
+ /** Похожие цели (§4.9, критерий «все к похожим»): та же пара `kind` + `code`. */
146
+ export function similarTargets(reg, target) {
147
+ return reg.targets.filter((t) => t.n !== target.n && t.kind === target.kind && t.code === target.code);
148
+ }
149
+ const VERBS = ['take', 'keep', 'protect', 'pin'];
150
+ const EXPECTED = '--resolve: expected <file|N>=take|keep|protect|pin';
151
+ /** Грамматика CLI: повторяемый флаг, в значении допускается список через запятую. */
152
+ export function parseResolveValues(values) {
153
+ const requests = [];
154
+ const errors = [];
155
+ for (const raw of values) {
156
+ for (const item of raw.split(',')) {
157
+ const text = item.trim();
158
+ if (text === '') {
159
+ errors.push(EXPECTED);
160
+ continue;
161
+ }
162
+ const eq = text.lastIndexOf('=');
163
+ if (eq <= 0 || eq === text.length - 1) {
164
+ errors.push(`${EXPECTED} (got "${text}")`);
165
+ continue;
166
+ }
167
+ const target = text.slice(0, eq).trim();
168
+ const verb = text.slice(eq + 1).trim();
169
+ if (target === '' || verb === '') {
170
+ errors.push(`${EXPECTED} (got "${text}")`);
171
+ continue;
172
+ }
173
+ if (!VERBS.includes(verb)) {
174
+ errors.push(`unknown verb "${verb}" — expected ${VERBS.join('|')}`);
175
+ continue;
176
+ }
177
+ requests.push({ target, verb: verb });
178
+ }
179
+ }
180
+ return { requests, errors };
181
+ }
182
+ const normRel = (raw) => {
183
+ let rel = raw.trim().replace(/\\/g, '/');
184
+ while (rel.startsWith('./'))
185
+ rel = rel.slice(2);
186
+ return rel.replace(/\/+$/, '');
187
+ };
188
+ function walkAll(dir, root, out) {
189
+ if (!existsSync(dir))
190
+ return;
191
+ for (const entry of readdirSync(dir)) {
192
+ const abs = join(dir, entry);
193
+ if (statSync(abs).isDirectory())
194
+ walkAll(abs, root, out);
195
+ else
196
+ out.push(abs.slice(root.length + 1).replace(/\\/g, '/'));
197
+ }
198
+ }
199
+ /** Управляемые цели проекта: карта → AGENTS.md → orphan-файлы base-set (алфавит). */
200
+ function managedTargets(root, map) {
201
+ const out = [];
202
+ const seen = new Set();
203
+ for (const entry of map.files) {
204
+ const rel = projectPath(entry);
205
+ if (seen.has(rel))
206
+ continue;
207
+ seen.add(rel);
208
+ out.push(rel);
209
+ }
210
+ if (!seen.has('AGENTS.md')) {
211
+ seen.add('AGENTS.md');
212
+ out.push('AGENTS.md');
213
+ }
214
+ const orphans = [];
215
+ for (const dir of BASE_DIRS) {
216
+ const found = [];
217
+ walkAll(join(root, dir), root, found);
218
+ for (const rel of found.sort()) {
219
+ if (seen.has(rel))
220
+ continue;
221
+ seen.add(rel);
222
+ orphans.push(rel);
223
+ }
224
+ }
225
+ out.push(...orphans);
226
+ return out;
227
+ }
228
+ /** Матрица «глагол × класс» (design §4.8): `true` — можно, строка — причина отказа. */
229
+ const MATRIX = {
230
+ mutated: { take: true, keep: true, protect: true, pin: true },
231
+ conflict: {
232
+ take: true,
233
+ keep: 'conflict stays: use protect (hold) or take (base)',
234
+ protect: true,
235
+ pin: true,
236
+ },
237
+ protected: { take: true, keep: true, protect: true, pin: true },
238
+ kept: { take: true, keep: true, protect: true, pin: true },
239
+ orphan: {
240
+ take: 'no base for a file outside the update map',
241
+ keep: 'conflict comes from the map, not the witness — use protect',
242
+ protect: true,
243
+ pin: true,
244
+ },
245
+ 'agents-stamped': {
246
+ take: true,
247
+ keep: true,
248
+ protect: 'AGENTS.md has no YAML frontmatter',
249
+ pin: 'AGENTS.md has no YAML frontmatter',
250
+ },
251
+ 'agents-block': {
252
+ take: true,
253
+ keep: true,
254
+ protect: 'AGENTS.md has no YAML frontmatter',
255
+ pin: 'AGENTS.md has no YAML frontmatter',
256
+ },
257
+ removed: { take: 'no base for a file outside the update map', keep: true, protect: true, pin: true },
258
+ plain: { take: true, keep: true, protect: true, pin: true },
259
+ missing: {
260
+ take: true,
261
+ keep: 'nothing to keep: the file does not exist — use take',
262
+ protect: 'cannot protect the file: no YAML frontmatter — add one or use keep',
263
+ pin: 'cannot protect the file: no YAML frontmatter — add one or use keep',
264
+ },
265
+ };
266
+ const NO_FRONTMATTER = 'no YAML frontmatter — add one or use keep';
267
+ /** Класс цели по фактическому состоянию (порядок: AGENTS.md → категория карты →
268
+ * решение реестра → защита/keep → plain). */
269
+ function classifyTarget(root, file, map, reg) {
270
+ const abs = join(root, file);
271
+ if (file === 'AGENTS.md') {
272
+ if (!existsSync(abs))
273
+ return 'missing';
274
+ return parseStamp(readFileSync(abs, 'utf-8')) !== null ? 'agents-stamped' : 'agents-block';
275
+ }
276
+ const entry = map.files.find((e) => projectPath(e) === file);
277
+ if (!entry)
278
+ return 'orphan';
279
+ if (entry.category === 'removed')
280
+ return 'removed';
281
+ const target = reg.targets.find((t) => t.root === root && t.file === file);
282
+ if (target)
283
+ return target.code;
284
+ if (!existsSync(abs))
285
+ return 'missing';
286
+ const current = readFileSync(abs, 'utf-8');
287
+ if (parseProtect(current).held)
288
+ return 'protected';
289
+ const entryState = loadSyncState(root).files[file];
290
+ if (entryState !== undefined &&
291
+ typeof entryState === 'object' &&
292
+ entryState.origin === 'keep' &&
293
+ entryState.hash === sha256(normalizeManaged(current))) {
294
+ return 'kept';
295
+ }
296
+ return 'plain';
297
+ }
298
+ /** Проверка глагола по матрице + структурная проверка вставки ключа ДО записи. */
299
+ function verbError(op, root, map) {
300
+ const verdict = MATRIX[op.cls][op.verb];
301
+ if (verdict !== true)
302
+ return `cannot ${op.verb} ${op.file}: ${verdict}`;
303
+ if (op.verb !== 'protect' && op.verb !== 'pin')
304
+ return null;
305
+ const abs = join(root, op.file);
306
+ if (!existsSync(abs))
307
+ return `cannot ${op.verb} ${op.file}: ${NO_FRONTMATTER}`;
308
+ const current = readFileSync(abs, 'utf-8');
309
+ const probe = insertProtect(current, op.verb === 'protect' ? 'true' : map.version);
310
+ if (probe.error === 'no-yaml-frontmatter')
311
+ return `cannot ${op.verb} ${op.file}: ${NO_FRONTMATTER}`;
312
+ if (probe.error)
313
+ return `cannot ${op.verb} ${op.file}: frontmatter would break`;
314
+ return null;
315
+ }
316
+ /** Адресация пути: `--here` — от cwd, парк — `<project>/<rel>` или уникальный `<rel>`. */
317
+ function pathCandidates(reg, map, raw, here) {
318
+ const rel = normRel(raw);
319
+ if (rel === '')
320
+ return { candidates: [], error: `unknown target ${raw}` };
321
+ if (here) {
322
+ const project = reg.projects[0];
323
+ if (!project)
324
+ return { candidates: [], error: `unknown target ${raw}` };
325
+ const managed = managedTargets(project.root, map);
326
+ if (managed.includes(rel) || reg.targets.some((t) => t.root === project.root && t.file === rel)) {
327
+ return { candidates: [{ root: project.root, project: project.name, file: rel }] };
328
+ }
329
+ return { candidates: [], error: `unknown target ${raw}` };
330
+ }
331
+ const [head, ...rest] = rel.split('/');
332
+ const explicit = reg.projects.find((p) => p.name === head);
333
+ if (explicit && rest.length > 0) {
334
+ const file = rest.join('/');
335
+ const managed = managedTargets(explicit.root, map);
336
+ if (managed.includes(file) || reg.targets.some((t) => t.root === explicit.root && t.file === file)) {
337
+ return { candidates: [{ root: explicit.root, project: explicit.name, file }] };
338
+ }
339
+ return { candidates: [], error: `unknown target ${raw}` };
340
+ }
341
+ const candidates = [];
342
+ for (const project of reg.projects) {
343
+ const managed = managedTargets(project.root, map);
344
+ if (managed.includes(rel) || reg.targets.some((t) => t.root === project.root && t.file === rel)) {
345
+ candidates.push({ root: project.root, project: project.name, file: rel });
346
+ }
347
+ }
348
+ if (candidates.length === 0)
349
+ return { candidates: [], error: `unknown target ${raw}` };
350
+ if (candidates.length > 1) {
351
+ const list = candidates.map((c) => `${c.project}/${c.file}`).join(', ');
352
+ return { candidates: [], error: `ambiguous target ${raw}: ${list} (use <project>/<path>)` };
353
+ }
354
+ return { candidates };
355
+ }
356
+ /** Одна цель по адресу: `N` — только запись реестра; путь — §4.8 область целей. */
357
+ function candidateFor(reg, map, raw, opts) {
358
+ if (/^\d+$/.test(raw)) {
359
+ const n = Number(raw);
360
+ const target = reg.targets.find((t) => t.n === n);
361
+ if (!target) {
362
+ return { error: `unknown target ${raw} (the decision list has ${reg.targets.length} entries)` };
363
+ }
364
+ return { candidate: { root: target.root, project: target.project, file: target.file } };
365
+ }
366
+ const found = pathCandidates(reg, map, raw, opts.here);
367
+ if (found.error !== undefined)
368
+ return { error: found.error };
369
+ return { candidate: found.candidates[0] };
370
+ }
371
+ export function resolveShowTarget(reg, map, raw, opts) {
372
+ const found = candidateFor(reg, map, raw, opts);
373
+ if (found.candidate === undefined)
374
+ return { error: found.error };
375
+ const { root, project, file } = found.candidate;
376
+ const target = reg.targets.find((t) => t.root === root && t.file === file);
377
+ return {
378
+ target: {
379
+ root,
380
+ project,
381
+ file,
382
+ kind: target ? target.kind : file === 'AGENTS.md' ? 'agents-md' : 'unknown',
383
+ cls: classifyTarget(root, file, map, reg),
384
+ },
385
+ };
386
+ }
387
+ /**
388
+ * Разбор и валидация ВСЕХ аргументов (design §4.8, шаг 2): ошибки собираются
389
+ * полностью, ни одна не пишет; `ops` — только при пустом списке ошибок.
390
+ * Порядок применения — порядок реестра (карта → AGENTS.md → orphan), не ввода.
391
+ */
392
+ export function planResolutions(reg, map, requests, opts) {
393
+ const errors = [];
394
+ const resolved = [];
395
+ const seen = new Set();
396
+ // Глобальный порядок целей: проект (порядок реестра) × managed-порядок.
397
+ const order = new Map();
398
+ let index = 0;
399
+ for (const project of reg.projects) {
400
+ for (const file of managedTargets(project.root, map))
401
+ order.set(`${project.root}\u0000${file}`, index++);
402
+ }
403
+ for (const request of requests) {
404
+ const found = candidateFor(reg, map, request.target, opts);
405
+ if (found.candidate === undefined) {
406
+ errors.push(found.error);
407
+ continue;
408
+ }
409
+ const candidate = found.candidate;
410
+ const key = `${candidate.root}\u0000${candidate.file}`;
411
+ if (seen.has(key)) {
412
+ errors.push(`target listed twice: ${request.target}`);
413
+ continue;
414
+ }
415
+ seen.add(key);
416
+ const target = reg.targets.find((t) => t.root === candidate.root && t.file === candidate.file);
417
+ const op = {
418
+ root: candidate.root,
419
+ project: candidate.project,
420
+ file: candidate.file,
421
+ kind: target ? target.kind : candidate.file === 'AGENTS.md' ? 'agents-md' : 'unknown',
422
+ cls: classifyTarget(candidate.root, candidate.file, map, reg),
423
+ verb: request.verb,
424
+ };
425
+ const error = verbError(op, candidate.root, map);
426
+ if (error !== null) {
427
+ errors.push(error);
428
+ continue;
429
+ }
430
+ resolved.push(op);
431
+ }
432
+ resolved.sort((a, b) => (order.get(`${a.root}\u0000${a.file}`) ?? 0) - (order.get(`${b.root}\u0000${b.file}`) ?? 0));
433
+ return { ops: errors.length > 0 ? [] : resolved, errors };
434
+ }
435
+ const entryEquals = (a, b) => a !== undefined && typeof a === 'object' && a.hash === b.hash && a.origin === b.origin && a.base === b.base;
436
+ /**
437
+ * Применение решений в порядке реестра. Каждая операция: бэкап (если нужен) →
438
+ * атомарная запись файла → атомарная запись свидетеля. Сбой k-й операции
439
+ * останавливает обход (`applied` 1..k−1 сохраняются), ошибка возвращается
440
+ * вызывающему для exit 1.
441
+ */
442
+ export async function applyResolutions(ops, deps) {
443
+ const now = deps.now ?? Date.now;
444
+ const applied = [];
445
+ const backups = [];
446
+ const errors = [];
447
+ for (const op of ops) {
448
+ try {
449
+ const abs = join(op.root, op.file);
450
+ const state = loadSyncState(op.root);
451
+ const current = existsSync(abs) ? readFileSync(abs, 'utf-8') : null;
452
+ let nextContent = current;
453
+ let entry;
454
+ let backupPath;
455
+ switch (op.verb) {
456
+ case 'take': {
457
+ const fresh = deps.renderer.renderFreshFile(op.root, op.file);
458
+ if (fresh === null)
459
+ throw new Error('no base for a file outside the update map');
460
+ if (current !== null && normalizeManaged(current) !== fresh) {
461
+ backupPath = (await backupLocalFile(op.root, op.file, current, new Date(now()))).path;
462
+ }
463
+ nextContent = fresh;
464
+ entry = { hash: sha256(normalizeManaged(fresh)), origin: 'render', base: deps.map.version };
465
+ break;
466
+ }
467
+ case 'keep': {
468
+ // блочный AGENTS.md живёт вне синка: keep — законный no-op без записи
469
+ if (current === null)
470
+ throw new Error('nothing to keep: the file does not exist — use take');
471
+ if (op.file === 'AGENTS.md' && op.cls === 'agents-block') {
472
+ applied.push({ root: op.root, project: op.project, file: op.file, verb: op.verb, noop: true });
473
+ continue;
474
+ }
475
+ // keep может снимать ключ protect (unprotect, REQ-05) — контент иначе не меняется
476
+ nextContent = parseProtect(current).held ? removeProtect(current) : current;
477
+ entry = { hash: sha256(normalizeManaged(nextContent)), origin: 'keep', base: deps.map.version };
478
+ break;
479
+ }
480
+ case 'protect':
481
+ case 'pin': {
482
+ if (current === null)
483
+ throw new Error(`cannot protect ${op.file}: ${NO_FRONTMATTER}`);
484
+ const value = op.verb === 'protect' ? 'true' : deps.map.version;
485
+ const inserted = insertProtect(current, value);
486
+ if (inserted.error === 'no-yaml-frontmatter') {
487
+ throw new Error(`cannot protect ${op.file}: ${NO_FRONTMATTER}`);
488
+ }
489
+ if (inserted.error)
490
+ throw new Error(`${op.file} — frontmatter would break`);
491
+ nextContent = inserted.content;
492
+ entry = { hash: sha256(normalizeManaged(nextContent)), origin: 'keep', base: deps.map.version };
493
+ break;
494
+ }
495
+ }
496
+ const stateDirty = !entryEquals(state.files[op.file], entry);
497
+ const fileDirty = nextContent !== current;
498
+ if (!stateDirty && !fileDirty) {
499
+ applied.push({ root: op.root, project: op.project, file: op.file, verb: op.verb, noop: true });
500
+ continue;
501
+ }
502
+ if (fileDirty) {
503
+ await mkdir(dirname(abs), { recursive: true });
504
+ await writeFileAtomic(abs, nextContent);
505
+ }
506
+ if (stateDirty) {
507
+ state.files[op.file] = entry;
508
+ saveSyncState(op.root, state);
509
+ }
510
+ applied.push({
511
+ root: op.root,
512
+ project: op.project,
513
+ file: op.file,
514
+ verb: op.verb,
515
+ ...(backupPath !== undefined ? { backup: backupPath } : {}),
516
+ });
517
+ if (backupPath !== undefined)
518
+ backups.push({ file: op.file, backup: backupPath });
519
+ }
520
+ catch (err) {
521
+ const message = err instanceof Error ? err.message : String(err);
522
+ errors.push(`error: ${op.file} — ${message}`);
523
+ break; // оставшиеся цели не трогаем (design §4.8, сбой k-й операции)
524
+ }
525
+ }
526
+ return { applied, backups, errors };
527
+ }
528
+ //# sourceMappingURL=decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.js","sourceRoot":"","sources":["../../../src/app/use-cases/decisions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
@@ -191,7 +191,40 @@ export async function initProject(deps, baseDir, input) {
191
191
  }
192
192
  }
193
193
  else {
194
- // WP1: без --platform платформенные конфиги не пишутся (минимальный путь, спека §4)
194
+ // §4.14 (REQ-04): без --platform платформа уже настроена — чиним только
195
+ // отсутствующую/испорченную wolf-запись в СУЩЕСТВУЮЩЕМ конфиге. Новый конфиг
196
+ // не создаём (WP1: минимальный init остаётся минимальным), битый JSONC —
197
+ // fail-soft skipped (exit 0). Условие «надо ли писать» живёт только в
198
+ // writeConfig — второй копии каноничности здесь нет (design §4.14).
199
+ const BROKEN = Symbol('broken-config');
200
+ for (const adapter of deps.adapters) {
201
+ if (!adapter.detect(baseDir))
202
+ continue;
203
+ const cfg = await adapter.readConfig(baseDir).catch(() => BROKEN);
204
+ if (cfg === null)
205
+ continue; // конфиг-файла нет — минимальный init его не создаёт
206
+ if (cfg === BROKEN) {
207
+ platformOutcomes.push({
208
+ platform: adapter.id,
209
+ action: 'skipped',
210
+ reason: 'config is not valid JSONC — fix it first',
211
+ });
212
+ continue;
213
+ }
214
+ const r = await adapter.writeConfig(baseDir, deps.mcpCommand);
215
+ const repaired = r.action === 'written' || r.action === 'replaced';
216
+ platformOutcomes.push({
217
+ platform: adapter.id,
218
+ action: r.action,
219
+ ...(repaired
220
+ ? { reason: `init: repaired missing/corrupted ${adapter.id} wolf entry` }
221
+ : r.reason !== undefined
222
+ ? { reason: r.reason }
223
+ : {}),
224
+ ...(r.configFile !== undefined ? { configFile: r.configFile } : {}),
225
+ ...(r.keys !== undefined ? { keys: r.keys } : {}),
226
+ });
227
+ }
195
228
  }
196
229
  // §4 п.8: реестр проектов
197
230
  await deps.registry.register(baseDir, CURRENT_SCHEMA_VERSION);