mister-wolf 2.18.4 → 2.19.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 +1 -1
  2. package/README.ru.md +16 -14
  3. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  4. package/dist/adapters/cli/cli-entry.js +10 -1
  5. package/dist/adapters/cli/cli-entry.js.map +1 -1
  6. package/dist/adapters/cli/commands/claim.d.ts.map +1 -1
  7. package/dist/adapters/cli/commands/claim.js +2 -1
  8. package/dist/adapters/cli/commands/claim.js.map +1 -1
  9. package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -1
  10. package/dist/adapters/cli/commands/memory-sync.js +3 -0
  11. package/dist/adapters/cli/commands/memory-sync.js.map +1 -1
  12. package/dist/adapters/cli/commands/memory-upgrade.d.ts +133 -0
  13. package/dist/adapters/cli/commands/memory-upgrade.d.ts.map +1 -1
  14. package/dist/adapters/cli/commands/memory-upgrade.js +507 -5
  15. package/dist/adapters/cli/commands/memory-upgrade.js.map +1 -1
  16. package/dist/adapters/cli/commands/upgrade-projects.d.ts +17 -0
  17. package/dist/adapters/cli/commands/upgrade-projects.d.ts.map +1 -0
  18. package/dist/adapters/cli/commands/upgrade-projects.js +75 -0
  19. package/dist/adapters/cli/commands/upgrade-projects.js.map +1 -0
  20. package/dist/adapters/cli/report-renderer.d.ts +43 -0
  21. package/dist/adapters/cli/report-renderer.d.ts.map +1 -0
  22. package/dist/adapters/cli/report-renderer.js +184 -0
  23. package/dist/adapters/cli/report-renderer.js.map +1 -0
  24. package/dist/adapters/fs/claim-registry.d.ts.map +1 -1
  25. package/dist/adapters/fs/claim-registry.js +15 -2
  26. package/dist/adapters/fs/claim-registry.js.map +1 -1
  27. package/dist/adapters/fs/projects-registry.d.ts +21 -0
  28. package/dist/adapters/fs/projects-registry.d.ts.map +1 -1
  29. package/dist/adapters/fs/projects-registry.js +54 -1
  30. package/dist/adapters/fs/projects-registry.js.map +1 -1
  31. package/dist/adapters/fs/update-map.d.ts +102 -0
  32. package/dist/adapters/fs/update-map.d.ts.map +1 -0
  33. package/dist/adapters/fs/update-map.js +95 -0
  34. package/dist/adapters/fs/update-map.js.map +1 -0
  35. package/dist/adapters/fs/upgrade-lock.d.ts +23 -0
  36. package/dist/adapters/fs/upgrade-lock.d.ts.map +1 -0
  37. package/dist/adapters/fs/upgrade-lock.js +59 -0
  38. package/dist/adapters/fs/upgrade-lock.js.map +1 -0
  39. package/dist/adapters/render/opencode/opencode-renderer.d.ts +13 -1
  40. package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -1
  41. package/dist/adapters/render/opencode/opencode-renderer.js +76 -8
  42. package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -1
  43. package/dist/app/use-cases/claim-artifact.d.ts +4 -1
  44. package/dist/app/use-cases/claim-artifact.d.ts.map +1 -1
  45. package/dist/app/use-cases/claim-artifact.js +9 -2
  46. package/dist/app/use-cases/claim-artifact.js.map +1 -1
  47. package/dist/app/use-cases/project-step.d.ts +52 -0
  48. package/dist/app/use-cases/project-step.d.ts.map +1 -0
  49. package/dist/app/use-cases/project-step.js +77 -0
  50. package/dist/app/use-cases/project-step.js.map +1 -0
  51. package/dist/app/use-cases/scan-unregistered.d.ts +25 -0
  52. package/dist/app/use-cases/scan-unregistered.d.ts.map +1 -0
  53. package/dist/app/use-cases/scan-unregistered.js +74 -0
  54. package/dist/app/use-cases/scan-unregistered.js.map +1 -0
  55. package/dist/app/use-cases/seed-base-playbooks.d.ts +10 -0
  56. package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -1
  57. package/dist/app/use-cases/seed-base-playbooks.js +54 -13
  58. package/dist/app/use-cases/seed-base-playbooks.js.map +1 -1
  59. package/dist/app/use-cases/upgrade-projects.d.ts +61 -0
  60. package/dist/app/use-cases/upgrade-projects.d.ts.map +1 -0
  61. package/dist/app/use-cases/upgrade-projects.js +379 -0
  62. package/dist/app/use-cases/upgrade-projects.js.map +1 -0
  63. package/dist/app/use-cases/verify-against-map.d.ts +48 -0
  64. package/dist/app/use-cases/verify-against-map.d.ts.map +1 -0
  65. package/dist/app/use-cases/verify-against-map.js +161 -0
  66. package/dist/app/use-cases/verify-against-map.js.map +1 -0
  67. package/dist/ports/base-set-renderer.port.d.ts +13 -0
  68. package/dist/ports/base-set-renderer.port.d.ts.map +1 -1
  69. package/package.json +3 -2
  70. package/templates/.wolf/router.log +1 -1
  71. package/templates/opencode/plugins/wolf-router.ts +158 -48
  72. package/update-map.json +204 -0
@@ -1,10 +1,32 @@
1
1
  import { spawn } from 'child_process';
2
- import { realpathSync, readFileSync } from 'fs';
2
+ import { existsSync, mkdtempSync, readdirSync, readFileSync, realpathSync, writeFileSync } from 'fs';
3
+ import { tmpdir } from 'os';
3
4
  import { fileURLToPath } from 'url';
4
- import { dirname, join } from 'path';
5
+ import { basename, dirname, join } from 'path';
6
+ import { createInterface } from 'node:readline/promises';
5
7
  import { Command } from 'commander';
6
8
  import { runUpgrade } from '../../../app/use-cases/upgrade.js';
7
9
  import { UserFacingError } from '../../../domain/errors.js';
10
+ import { runProjectStep } from '../../../app/use-cases/project-step.js';
11
+ import { mapCategories, STATUS_TEXT, statusOf } from '../../../app/use-cases/upgrade-projects.js';
12
+ import { projectPath } from '../../../app/use-cases/verify-against-map.js';
13
+ import { compareVersions, loadUpdateMap } from '../../fs/update-map.js';
14
+ import { ProjectsRegistry } from '../../fs/projects-registry.js';
15
+ import { wolfUserConfigDir } from '../../fs/user-config.js';
16
+ import { loadSyncState } from '../../render/sync-state.js';
17
+ import { parseStamp } from '../../render/stamp.js';
18
+ import { harnessTemplatesRoot, templatesRoot } from '../../render/templates-root.js';
19
+ import { OpencodeBaseSetRenderer } from '../../render/opencode/opencode-renderer.js';
20
+ import { MarkdownMemoryStore } from '../../fs/markdown-memory-store.js';
21
+ import { JsonlEventLog } from '../../fs/jsonl-event-log.js';
22
+ import { SQLiteSearchIndex } from '../../sqlite/sqlite-search-index.js';
23
+ import { SystemClock } from '../../fs/system-clock.js';
24
+ import { HashIdGenerator } from '../../fs/hash-id-generator.js';
25
+ import { FsMemoryLock } from '../../fs/memory-lock.js';
26
+ import { eventsPath, indexPath, memoryDir } from '../../fs/project-paths.js';
27
+ import { colorsEnabled } from '../../../domain/facet-colors.js';
28
+ import { renderReport, } from '../report-renderer.js';
29
+ import { safeCwd } from '../cli-entry.js';
8
30
  // wolf upgrade (бриф 2026-09-02): npm-самообновление глобальной установки.
9
31
  // spawn npm идёт через PATH — e2e подменяет npm фейком первой записью PATH,
10
32
  // реальный registry в тестах не дёргается.
@@ -85,20 +107,500 @@ function printOutcome(outcome) {
85
107
  throw new UserFacingError(`a dev/linked copy is installed (${outcome.binaryPath ?? 'path unknown'}) — upgrade not applicable; to update: npm rm -g mister-wolf && npm i -g mister-wolf`);
86
108
  }
87
109
  }
110
+ const HERE_TITLE = 'wolf upgrade — here';
111
+ const msg = (err) => (err instanceof Error ? err.message : String(err));
112
+ const line = (marker, text, dim = false) => ({ kind: 'line', marker, text, dim });
113
+ /** Справочный состав/штамп cwd (формат T7 stampVersions): max/min set= по
114
+ * штампованным файлам свидетеля рендера; штамп недостоверен — свидетель, не истина. */
115
+ function stampVersions(root) {
116
+ let max = null;
117
+ let min = null;
118
+ for (const rel of Object.keys(loadSyncState(root).files)) {
119
+ let stamp;
120
+ try {
121
+ stamp = parseStamp(readFileSync(join(root, rel), 'utf-8'));
122
+ }
123
+ catch {
124
+ continue;
125
+ }
126
+ if (!stamp)
127
+ continue;
128
+ if (max === null || compareVersions(stamp.set, max) > 0)
129
+ max = stamp.set;
130
+ if (min === null || compareVersions(stamp.set, min) < 0)
131
+ min = stamp.set;
132
+ }
133
+ return { max, min };
134
+ }
135
+ /** Одиночный план (правила REQ-02 для одного проекта, формат строк T7):
136
+ * имя · путь · состав/штамп → цель · категории карты числами · режим
137
+ * «вне реестра». Пinned не проверяем — --here осознанный ручной инструмент. */
138
+ function planSection(cwd, map) {
139
+ const cats = mapCategories(map);
140
+ const stamps = stampVersions(cwd);
141
+ const floor = stamps.min !== null && stamps.min !== stamps.max ? ` (stamps from ${stamps.min})` : '';
142
+ return {
143
+ kind: 'section',
144
+ title: 'Plan',
145
+ children: [
146
+ line('info', `plan: ${basename(cwd)} · ${cwd}`),
147
+ line('info', `composition ${stamps.max ?? 'unknown'}${floor} → ${map.version}`, true),
148
+ line('info', `map: ${cats.new} new · ${cats.changed} changed · ${cats.deprecated} deprecated · ${cats.removed} removed · seed×${map.faces.filter((f) => f.seed).length}`, true),
149
+ line('info', 'outside the registry — manual mode', true),
150
+ ],
151
+ };
152
+ }
153
+ /** Детали шага одного проекта (REQ-05): base-set/лица/схема/сверка — формат
154
+ * строк T7 projectsSection. */
155
+ function stepDetailLines(report) {
156
+ const out = [];
157
+ const counts = { updated: 0, created: 0, appended: 0, identical: 0, mutated: 0, conflict: 0 };
158
+ for (const o of report.sync.outcomes) {
159
+ if (o.action === 'skipped') {
160
+ if (o.mutated)
161
+ counts.mutated++;
162
+ else
163
+ counts.identical++;
164
+ }
165
+ else {
166
+ counts[o.action]++;
167
+ }
168
+ }
169
+ const bsParts = Object.entries(counts)
170
+ .filter(([, n]) => n > 0)
171
+ .map(([k, n]) => `${n} ${k}`);
172
+ if (bsParts.length > 0)
173
+ out.push(line('info', `base-set: ${bsParts.join(', ')}`, true));
174
+ if (report.seed.length > 0) {
175
+ const faces = report.seed.map((s) => `${s.file.replace(/-playbook\.md$/, '')} ${s.kind ?? s.action}`).join(', ');
176
+ out.push(line('info', `faces: ${faces}`, true));
177
+ }
178
+ if (report.schema.status !== 'ok') {
179
+ out.push(line('warn', `schema: ${report.schema.status}${report.schema.error ? ` — ${report.schema.error}` : ''}`, true));
180
+ }
181
+ const v = report.verify.summary;
182
+ const ok = report.verify.items.length - v.needsDecision - v.errors;
183
+ const parts = [`${ok}/${report.verify.items.length} ok`];
184
+ if (v.needsDecision > 0)
185
+ parts.push(`${v.needsDecision} needs decision`);
186
+ if (v.errors > 0)
187
+ parts.push(`${v.errors} errors`);
188
+ out.push(line(v.errors > 0 ? 'error' : v.needsDecision > 0 ? 'warn' : 'info', `verify: ${parts.join(' · ')}`, true));
189
+ return out;
190
+ }
191
+ /** Счётчик статуса одного проекта — лейблы паркового словаря T7. */
192
+ const STATUS_COUNTER = {
193
+ updated: 'updated',
194
+ 'up-to-date': 'up-to-date',
195
+ 'needs-decision': 'needs decision',
196
+ error: 'errors',
197
+ };
198
+ /** Ручной режим (REQ-14): полный проектный шаг (T6) в cwd из текущего
199
+ * бинарника. Guard — именно .wolf/memory (не .wolf): каталог с .wolf без
200
+ * памяти — не живой проект, честный отказ с подсказкой init (exit 1 кладёт
201
+ * caller: UserFacingError → одна строка Error:, прецедент runCli).
202
+ * Отчёт — один проект REQ-05: план → статус+детали → summary → финальная
203
+ * строка exit-таблицы (та же таблица, что у прохода парка). Без banner. */
204
+ export async function runUpgradeHere(deps, opts = {}) {
205
+ if (!existsSync(join(deps.cwd, '.wolf', 'memory'))) {
206
+ throw new UserFacingError(`no wolf memory in ${deps.cwd} — run wolf init first`);
207
+ }
208
+ const map = deps.loadMap();
209
+ const plan = planSection(deps.cwd, map);
210
+ // Подтверждение — правила REQ-02 для одиночного плана; список покрывает и
211
+ // удаления (ADR-4), второго вопроса шаг не задаёт.
212
+ let proceed = opts.yes === true;
213
+ let declinedByUser = false;
214
+ if (!proceed && opts.tty && opts.confirm) {
215
+ proceed = await opts.confirm(plan);
216
+ declinedByUser = !proceed;
217
+ }
218
+ if (!proceed) {
219
+ const finalText = declinedByUser ? 'Cancelled — no changes' : 'Cancelled: --yes is required';
220
+ return {
221
+ exitCode: 0,
222
+ report: { kind: 'section', title: HERE_TITLE, children: [plan, line('info', finalText, true)] },
223
+ };
224
+ }
225
+ const confirmedRemovals = map.files.filter((f) => f.category === 'removed').map(projectPath);
226
+ const runStep = deps.runStep ?? runProjectStep;
227
+ let report = null;
228
+ let error = null;
229
+ try {
230
+ report = await runStep(deps.makeStepDeps(deps.cwd), deps.cwd, map, { confirmedRemovals });
231
+ }
232
+ catch (err) {
233
+ error = msg(err); // изоляция сбоя шага: error-строка, не крах команды (REQ-06)
234
+ }
235
+ const status = report ? statusOf(report) : 'error';
236
+ const cats = mapCategories(map);
237
+ const seeded = report ? report.seed.filter((s) => s.kind === 'seeded' || s.kind === 'legacy-absorbed').length : 0;
238
+ const counters = [
239
+ { label: STATUS_COUNTER[status], count: 1 },
240
+ { label: 'new', count: cats.new },
241
+ { label: 'changed', count: cats.changed },
242
+ { label: 'deprecated', count: cats.deprecated },
243
+ { label: 'removed', count: cats.removed },
244
+ { label: 'faces seeded', count: seeded },
245
+ ];
246
+ // Exit-модель (design §«Exit-модель», та же таблица для одного проекта)
247
+ const exitCode = status === 'error' ? 1 : status === 'needs-decision' ? 2 : 0;
248
+ const finalText = status === 'error' ? 'Failed' : status === 'needs-decision' ? 'Done with attention' : 'Done';
249
+ const marker = status === 'error' ? 'error' : status === 'needs-decision' ? 'warn' : 'ok';
250
+ const children = [
251
+ plan,
252
+ line(marker, error !== null ? `${basename(deps.cwd)} — error: ${error}` : `${basename(deps.cwd)} — ${STATUS_TEXT[status]}`, status === 'up-to-date'),
253
+ ...(report ? stepDetailLines(report) : []),
254
+ { kind: 'summary', counters, done: false },
255
+ line(marker, finalText),
256
+ ];
257
+ return { exitCode, report: { kind: 'section', title: HERE_TITLE, children } };
258
+ }
259
+ /** Прод-deps шага для root (контейнер-прецедент по адаптерам, но БЕЗ
260
+ * createCliContainer: его selfHealRegistry пишет реестр, а --here реестр
261
+ * не трогает — REQ-14). Привязка к root напрямую, как per-project deps T7.
262
+ * Экспорт — точечный reuse фазы 2 (T8 upgrade-projects), не дубль сборки. */
263
+ export function hereStepDeps(root) {
264
+ const tplPlaybooks = join(templatesRoot(), 'playbooks');
265
+ const files = new Map();
266
+ if (existsSync(tplPlaybooks)) {
267
+ for (const f of readdirSync(tplPlaybooks)) {
268
+ if (f.endsWith('.md'))
269
+ files.set(f, readFileSync(join(tplPlaybooks, f), 'utf-8'));
270
+ }
271
+ }
272
+ return {
273
+ renderer: new OpencodeBaseSetRenderer(templatesRoot(), {
274
+ harnessTemplatesRoot: harnessTemplatesRoot('opencode'),
275
+ }),
276
+ files,
277
+ store: new MarkdownMemoryStore(root),
278
+ log: new JsonlEventLog(eventsPath(root)),
279
+ index: new SQLiteSearchIndex(indexPath(root)),
280
+ clock: new SystemClock(),
281
+ idGen: new HashIdGenerator(),
282
+ lock: new FsMemoryLock(memoryDir(root)),
283
+ };
284
+ }
285
+ /** TermEnv из реального stdout/env (REQ-15): не-TTY/пайп/NO_COLOR → plain;
286
+ * глубина цвета деградирует COLORTERM → TERM → 16; ширина — columns (80).
287
+ * Экспорт — точечный reuse фазы 2 (T8 upgrade-projects). */
288
+ export function termEnv(stdout, env) {
289
+ if (!colorsEnabled(stdout, env))
290
+ return { tty: false, colors: 'mono', width: 80 };
291
+ const colorterm = env.COLORTERM ?? '';
292
+ const colors = colorterm.includes('truecolor') || colorterm.includes('24bit')
293
+ ? 'truecolor'
294
+ : (env.TERM ?? '').includes('256color')
295
+ ? '256'
296
+ : '16';
297
+ return { tty: true, colors, width: stdout.columns ?? 80 };
298
+ }
299
+ /** CLI-обвязка --here: прод-deps + TTY-подтверждение (план показан ДО вопроса,
300
+ * REQ-02) + печать отчёта renderer'ом и простановка exit-кода. */
301
+ async function upgradeHereAction(cwd, yes) {
302
+ const isTty = Boolean(process.stdout.isTTY);
303
+ const env = termEnv(process.stdout, process.env);
304
+ const confirm = isTty
305
+ ? async (plans) => {
306
+ process.stdout.write(`${renderReport(plans, env)}\n`);
307
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
308
+ try {
309
+ const ans = (await rl.question('Upgrade this project? [y/N] ')).trim().toLowerCase();
310
+ return ans === 'y' || ans === 'yes';
311
+ }
312
+ finally {
313
+ rl.close();
314
+ }
315
+ }
316
+ : undefined;
317
+ const res = await runUpgradeHere({ cwd, loadMap: () => loadUpdateMap(), makeStepDeps: hereStepDeps }, { yes, tty: isTty, confirm });
318
+ process.stdout.write(`${renderReport(res.report, env)}\n`);
319
+ process.exitCode = res.exitCode;
320
+ }
321
+ const CLASS_TEXT = {
322
+ current: 'current',
323
+ behind: 'behind',
324
+ 'needs-decision': 'needs decision',
325
+ unknown: 'unknown — out of coverage',
326
+ };
327
+ /** Чистая классификация (design §«--check»), приоритет правил — как в брифе:
328
+ * mutated → «требует решения»; differs/missing по целям карты и существующий
329
+ * removed-файл → «отстаёт»; foreign/unknown → «unknown — вне покрытия»;
330
+ * иначе «актуальный». AGENTS.md — цель карты agents_md тем же словарём.
331
+ * deprecated — report-only (REQ-11), вне-карты — справочно. */
332
+ export function classifyProject(map, outcomes, removedExisting) {
333
+ const out = {
334
+ cls: 'current',
335
+ differs: [],
336
+ missing: [],
337
+ mutated: [],
338
+ foreign: [],
339
+ uncertain: [],
340
+ removedPresent: [...removedExisting],
341
+ deprecated: [],
342
+ outsideMap: [],
343
+ };
344
+ const byFile = new Map(outcomes.map((o) => [o.file, o.action]));
345
+ const targetRels = new Set();
346
+ const absorb = (rel, action) => {
347
+ if (action === 'mutated')
348
+ out.mutated.push(rel);
349
+ else if (action === 'foreign')
350
+ out.foreign.push(rel);
351
+ else if (action === 'unknown')
352
+ out.uncertain.push(rel);
353
+ else if (action === 'differs')
354
+ out.differs.push(rel);
355
+ else if (action === 'missing')
356
+ out.missing.push(rel);
357
+ };
358
+ for (const entry of map.files) {
359
+ const rel = projectPath(entry);
360
+ targetRels.add(rel);
361
+ if (entry.category === 'deprecated') {
362
+ out.deprecated.push(rel); // report-only (REQ-11)
363
+ continue;
364
+ }
365
+ absorb(rel, byFile.get(rel));
366
+ }
367
+ if (map.agents_md.category !== 'deprecated')
368
+ absorb('AGENTS.md', byFile.get('AGENTS.md'));
369
+ for (const o of outcomes) {
370
+ if (o.file !== 'AGENTS.md' && !targetRels.has(o.file))
371
+ out.outsideMap.push(o.file);
372
+ }
373
+ out.cls =
374
+ out.mutated.length > 0
375
+ ? 'needs-decision'
376
+ : out.differs.length > 0 || out.missing.length > 0 || out.removedPresent.length > 0
377
+ ? 'behind'
378
+ : out.foreign.length > 0 || out.uncertain.length > 0
379
+ ? 'unknown'
380
+ : 'current';
381
+ return out;
382
+ }
383
+ const CHECK_TITLE = 'wolf upgrade — check';
384
+ /** Детали проекта одной строкой: `2 differ · 1 missing · mutated: …`. */
385
+ function freshnessDetails(f) {
386
+ const parts = [];
387
+ if (f.differs.length > 0)
388
+ parts.push(`${f.differs.length} differ`);
389
+ if (f.missing.length > 0)
390
+ parts.push(`${f.missing.length} missing`);
391
+ if (f.mutated.length > 0)
392
+ parts.push(`mutated: ${f.mutated.join(', ')}`);
393
+ if (f.foreign.length > 0)
394
+ parts.push(`foreign: ${f.foreign.join(', ')}`);
395
+ if (f.uncertain.length > 0)
396
+ parts.push(`unknown: ${f.uncertain.join(', ')}`);
397
+ if (f.removedPresent.length > 0)
398
+ parts.push(`removed present: ${f.removedPresent.join(', ')}`);
399
+ if (f.outsideMap.length > 0)
400
+ parts.push(`${f.outsideMap.length} files outside the map`);
401
+ return parts.length > 0 ? parts.join(' · ') : null;
402
+ }
403
+ const stampNote = (root) => {
404
+ const stamps = stampVersions(root);
405
+ const floor = stamps.min !== null && stamps.min !== stamps.max ? ` (stamps from ${stamps.min})` : '';
406
+ return `stamps ${stamps.max ?? 'unknown'}${floor}`;
407
+ };
408
+ /** Секция одного проекта (REQ-08): имя · путь · класс · штамп/состав (справочно) ·
409
+ * детали · deprecated-строка. Сбой инспекции — error-строка, не крах (REQ-06). */
410
+ async function projectCheckLines(entry, map, deps) {
411
+ const name = basename(entry.path);
412
+ if (!existsSync(entry.path)) {
413
+ return [line('info', `${name} · ${entry.path} — ${CLASS_TEXT.unknown} (path does not exist)`, true)];
414
+ }
415
+ try {
416
+ const outcomes = await deps.inspect(entry.path);
417
+ const removedExisting = map.files
418
+ .filter((e) => e.category === 'removed' && existsSync(join(entry.path, projectPath(e))))
419
+ .map(projectPath);
420
+ const f = classifyProject(map, outcomes, removedExisting);
421
+ const marker = f.cls === 'current' ? 'ok' : f.cls === 'unknown' ? 'info' : 'warn';
422
+ const lines = [
423
+ line(marker, `${name} · ${entry.path} — ${CLASS_TEXT[f.cls]}`, f.cls === 'current'),
424
+ line('info', `${stampNote(entry.path)} · map ${map.version}`, true),
425
+ ];
426
+ const details = freshnessDetails(f);
427
+ if (details)
428
+ lines.push(line('info', details, true));
429
+ if (f.deprecated.length > 0) {
430
+ lines.push(line('info', `deprecated: ${f.deprecated.join(', ')} (report-only)`, true));
431
+ }
432
+ return lines;
433
+ }
434
+ catch (err) {
435
+ return [line('error', `${name} — error: ${msg(err)}`)];
436
+ }
437
+ }
438
+ /** `--check`-сводка парка (REQ-08): CLI-строка (installed vs available) →
439
+ * перечисление проектов реестра. Деградации не крахят: битый реестр/npm —
440
+ * error-строка; карты нет — штампы с пометкой недостоверности и классом
441
+ * unknown (никогда current); пустой реестр — «no projects». exit 0. */
442
+ export async function runUpgradeCheck(deps) {
443
+ const children = [];
444
+ try {
445
+ children.push(line('info', `cli: installed ${deps.installedVersion()} · available ${await deps.registryVersion()}`));
446
+ }
447
+ catch (err) {
448
+ children.push(line('error', `cli: installed ${deps.installedVersion()} · available unknown — ${msg(err)}`));
449
+ }
450
+ let registered = null;
451
+ try {
452
+ registered = await deps.registry.listStrict();
453
+ }
454
+ catch (err) {
455
+ children.push(line('error', `failed to read the projects registry: ${msg(err)}`));
456
+ }
457
+ if (registered !== null) {
458
+ if (registered.length === 0) {
459
+ children.push(line('info', 'no projects in the registry — run wolf init in a project to register it'));
460
+ }
461
+ else {
462
+ let map = null;
463
+ try {
464
+ map = deps.loadMap();
465
+ }
466
+ catch {
467
+ map = null;
468
+ }
469
+ if (map) {
470
+ for (const entry of registered)
471
+ children.push(...(await projectCheckLines(entry, map, deps)));
472
+ }
473
+ else {
474
+ // Деградация (design §«--check»): карты нет у самого CLI — только штампы
475
+ // (свидетель касания, не истина) с явной пометкой недостоверности.
476
+ children.push(line('warn', 'map unavailable in this CLI — stamps only, unreliable'));
477
+ for (const entry of registered) {
478
+ children.push(line('info', `${basename(entry.path)} · ${entry.path} — ${CLASS_TEXT.unknown}`));
479
+ children.push(line('info', stampNote(entry.path), true));
480
+ }
481
+ }
482
+ }
483
+ }
484
+ children.push(line('ok', 'Done (read-only)'));
485
+ return { exitCode: 0, report: { kind: 'section', title: CHECK_TITLE, children } };
486
+ }
487
+ /** CLI-обвязка check-сводки (REQ-08): реестр — как projects (wolfUserConfigDir),
488
+ * инспекция — read-only inspectBaseSet ('omit' — паритет sync-рендера);
489
+ * exit не меняется (--check всегда 0). */
490
+ async function upgradeCheckAction(viewVersion) {
491
+ const renderer = new OpencodeBaseSetRenderer(templatesRoot(), {
492
+ harnessTemplatesRoot: harnessTemplatesRoot('opencode'),
493
+ });
494
+ const res = await runUpgradeCheck({
495
+ registry: new ProjectsRegistry(wolfUserConfigDir()),
496
+ loadMap: () => loadUpdateMap(),
497
+ registryVersion: viewVersion,
498
+ installedVersion: readInstalledVersion,
499
+ inspect: (root) => renderer.inspectBaseSet(root, { models: 'omit' }),
500
+ });
501
+ process.stdout.write(`${renderReport(res.report, termEnv(process.stdout, process.env))}\n`);
502
+ }
503
+ /** Re-exec нового бинарника (ADR-2, «Контракт spawn»): state-файл
504
+ * `{ from, to, startedAt }` пишется ДО spawn; spawn без shell со stdio
505
+ * inherit и env: process.env (склейка фаз, REQ-15); код родителя = код
506
+ * ребёнка (убит сигналом → 1); сбой spawn/старта → UserFacingError —
507
+ * npm-фаза идемпотентна, повторный `wolf upgrade` при up-to-date сразу
508
+ * уходит в проектный проход. State — только контекст отчёта (NFR-02),
509
+ * чистка не требуется (ОС-tmp). */
510
+ export async function reExecUpgradeProjects(from, to, npmPrefix, opts = {}) {
511
+ const stateDir = opts.stateDir ?? mkdtempSync(join(tmpdir(), 'wolf-upgrade-state-'));
512
+ const statePath = join(stateDir, 'state.json');
513
+ writeFileSync(statePath, JSON.stringify({ from, to, startedAt: (opts.now ?? Date.now)() }));
514
+ const childBin = opts.childBin ?? process.env.WOLF_UPGRADE_CHILD_BIN ?? join(npmPrefix ?? tmpdir(), 'bin', 'wolf');
515
+ const argv = [
516
+ 'upgrade-projects',
517
+ '--from',
518
+ from,
519
+ '--to',
520
+ to,
521
+ ...(opts.yes === true ? ['--yes'] : []),
522
+ '--no-banner',
523
+ '--state',
524
+ statePath,
525
+ ];
526
+ const child = (opts.spawnImpl ?? spawn)(childBin, argv, { stdio: 'inherit', env: process.env });
527
+ const exit = opts.exit ?? ((code) => process.exit(code));
528
+ await new Promise((resolve, reject) => {
529
+ let settled = false; // error и close могут прийти оба (порядок не гарантирован)
530
+ child.on('error', () => {
531
+ if (settled)
532
+ return;
533
+ settled = true;
534
+ reject(new UserFacingError('CLI updated; projects not touched — run wolf upgrade again for the project pass'));
535
+ });
536
+ child.on('close', (code) => {
537
+ if (settled)
538
+ return;
539
+ settled = true;
540
+ exit(code ?? 1); // code null — ребёнок убит сигналом
541
+ resolve(); // прод: exit не возвращает; юнит: exit — колбэк
542
+ });
543
+ });
544
+ }
545
+ /** npm-фаза + re-exec (T8, REQ-01/04, ADR-2): шапку печатает ТОЛЬКО фаза 1
546
+ * (склейка фаз, REQ-15 — фаза 2 идёт с --no-banner); npm-сбой закрывает
547
+ * секцию `└ Failed` (REQ-01 AC3) и падает ДО spawn — проекты не тронуты;
548
+ * up-to-date НЕ выход — фаза идемпотентна, идём к re-exec; local-newer —
549
+ * реестру нечему обновляться, spawn не нужен (exit 0); linked-refusal —
550
+ * отказ printOutcome. reExec-шов — юнит/R01.3-контур (шпион вместо spawn). */
551
+ export async function runUpgradeWithProjects(deps, opts = {}) {
552
+ const env = termEnv(process.stdout, process.env);
553
+ process.stdout.write(`${renderReport({ kind: 'banner', version: deps.currentVersion }, env)}\n`);
554
+ let outcome;
555
+ try {
556
+ outcome = await runUpgrade(deps, false);
557
+ }
558
+ catch (err) {
559
+ console.log('└ Failed'); // секция закрыта; Error:-строку и exit 1 даст runCli
560
+ throw err;
561
+ }
562
+ printOutcome(outcome);
563
+ const reExec = deps.reExec ?? reExecUpgradeProjects;
564
+ if (outcome.kind === 'updated') {
565
+ await reExec(outcome.from, outcome.to, deps.npmPrefix, { yes: opts.yes });
566
+ }
567
+ else if (outcome.kind === 'up-to-date') {
568
+ await reExec(outcome.current, outcome.current, deps.npmPrefix, { yes: opts.yes });
569
+ }
570
+ }
88
571
  export function memoryUpgradeCommand() {
89
572
  return new Command('upgrade')
90
- .description('Upgrade the global wolf installation to the latest npm version (runs npm install -g mister-wolf@latest); --check only compares versions, no install')
573
+ .description('One command updates everything: npm phase (npm install -g mister-wolf@latest) followed by the registered-projects pass; --check only reports CLI + park freshness, no install; --here runs the full project update step in the current directory only (no npm self-update, no registry)')
91
574
  .option('--check', 'Only check for a newer version, do not install anything')
575
+ .option('--here', 'Update this project only: full project step in cwd (no npm, no re-exec, no registry)')
576
+ .option('--yes', 'Apply the plan without interactive confirmation (--here or the projects pass)')
92
577
  .action(async (options) => {
578
+ if (options.here === true) {
579
+ await upgradeHereAction(safeCwd(), options.yes === true);
580
+ return; // npm-ветка при --here не выполняется вообще (REQ-14)
581
+ }
93
582
  const checkOnly = options.check === true;
583
+ // npm view один на запуск: CLI-часть и парковая сводка делят результат
584
+ let available = null;
585
+ const viewOnce = async () => {
586
+ if (available === null)
587
+ available = await registryVersion();
588
+ return available;
589
+ };
94
590
  const deps = {
95
591
  currentVersion: readInstalledVersion(),
96
592
  binaryPath: process.argv[1] ? realPathOrNull(process.argv[1]) : null,
97
593
  npmPrefix: checkOnly ? null : await npmGlobalPrefix(), // --check тип установки не проверяет
98
- registryVersion,
594
+ registryVersion: viewOnce,
99
595
  installLatest,
100
596
  };
101
- printOutcome(await runUpgrade(deps, checkOnly));
597
+ if (options.check === true) {
598
+ printOutcome(await runUpgrade(deps, true));
599
+ await upgradeCheckAction(viewOnce); // порядок: CLI-версии → парк (REQ-08)
600
+ return;
601
+ }
602
+ // npm-фаза + re-exec фазы 2 (T8): --here выше вышел раньше, re-exec там нет
603
+ await runUpgradeWithProjects(deps, { yes: options.yes === true });
102
604
  });
103
605
  }
104
606
  //# sourceMappingURL=memory-upgrade.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-upgrade.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-upgrade.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Command } from 'commander';
2
+ import { type UpgradeProjectsDeps } from '../../../app/use-cases/upgrade-projects.js';
3
+ import { type TermEnv } from '../report-renderer.js';
4
+ /** IO-шов юнит-контура фазы 2: tty/печать/вопрос; прод — process stdio + readline. */
5
+ export interface ProjectsIo {
6
+ tty: boolean;
7
+ env: TermEnv;
8
+ write(text: string): void;
9
+ ask(): Promise<boolean>;
10
+ }
11
+ /** Прод-deps фазы 2 (T8): реестр/карта/фабрика шага/lock/скан — риск-список Ф4. */
12
+ export declare function upgradeProjectsDeps(): UpgradeProjectsDeps;
13
+ /** Обвязка фазы 2: deps + TTY-confirm (plans ДО вопроса, REQ-02) + печать
14
+ * отчёта renderer'ом и простановка exit-кода. */
15
+ export declare function upgradeProjectsAction(yes: boolean, deps?: UpgradeProjectsDeps, io?: ProjectsIo): Promise<void>;
16
+ export declare function upgradeProjectsCommand(): Command;
17
+ //# sourceMappingURL=upgrade-projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade-projects.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/upgrade-projects.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAO1G,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEpF,sFAAsF;AACtF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACzB;AAoBD,mFAAmF;AACnF,wBAAgB,mBAAmB,IAAI,mBAAmB,CAQzD;AAED;kDACkD;AAClD,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,mBAA2C,EACjD,EAAE,GAAE,UAAqB,GACxB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAchD"}