mister-wolf 2.0.1 → 2.2.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.
- package/README.md +1 -0
- package/README.ru.md +3 -0
- package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
- package/dist/adapters/cli/cli-entry.js +2 -0
- package/dist/adapters/cli/cli-entry.js.map +1 -1
- package/dist/adapters/cli/commands/memory-complain.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-complain.js +3 -2
- package/dist/adapters/cli/commands/memory-complain.js.map +1 -1
- package/dist/adapters/cli/commands/memory-effectiveness.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-effectiveness.js +2 -1
- package/dist/adapters/cli/commands/memory-effectiveness.js.map +1 -1
- package/dist/adapters/cli/commands/memory-init.d.ts +14 -0
- package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-init.js +27 -8
- package/dist/adapters/cli/commands/memory-init.js.map +1 -1
- package/dist/adapters/cli/commands/memory-learn.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-learn.js +2 -1
- package/dist/adapters/cli/commands/memory-learn.js.map +1 -1
- package/dist/adapters/cli/commands/memory-list.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-list.js +15 -3
- package/dist/adapters/cli/commands/memory-list.js.map +1 -1
- package/dist/adapters/cli/commands/memory-migrate.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-migrate.js +45 -2
- package/dist/adapters/cli/commands/memory-migrate.js.map +1 -1
- package/dist/adapters/cli/commands/memory-scan.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-scan.js +5 -0
- package/dist/adapters/cli/commands/memory-scan.js.map +1 -1
- package/dist/adapters/cli/commands/memory-update.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-update.js +2 -1
- package/dist/adapters/cli/commands/memory-update.js.map +1 -1
- package/dist/adapters/cli/commands/memory-upgrade.d.ts +3 -0
- package/dist/adapters/cli/commands/memory-upgrade.d.ts.map +1 -0
- package/dist/adapters/cli/commands/memory-upgrade.js +104 -0
- package/dist/adapters/cli/commands/memory-upgrade.js.map +1 -0
- package/dist/adapters/fs/doc-id-migration.d.ts +33 -0
- package/dist/adapters/fs/doc-id-migration.d.ts.map +1 -0
- package/dist/adapters/fs/doc-id-migration.js +158 -0
- package/dist/adapters/fs/doc-id-migration.js.map +1 -0
- package/dist/adapters/fs/document-id.d.ts +23 -0
- package/dist/adapters/fs/document-id.d.ts.map +1 -0
- package/dist/adapters/fs/document-id.js +52 -0
- package/dist/adapters/fs/document-id.js.map +1 -0
- package/dist/adapters/fs/hash-id-generator.d.ts +1 -1
- package/dist/adapters/fs/hash-id-generator.d.ts.map +1 -1
- package/dist/adapters/fs/hash-id-generator.js +1 -1
- package/dist/adapters/fs/hash-id-generator.js.map +1 -1
- package/dist/adapters/fs/layout-migration.d.ts +7 -0
- package/dist/adapters/fs/layout-migration.d.ts.map +1 -1
- package/dist/adapters/fs/layout-migration.js +4 -2
- package/dist/adapters/fs/layout-migration.js.map +1 -1
- package/dist/adapters/platforms/claude-adapter.d.ts.map +1 -1
- package/dist/adapters/platforms/claude-adapter.js +4 -2
- package/dist/adapters/platforms/claude-adapter.js.map +1 -1
- package/dist/adapters/platforms/opencode-adapter.d.ts.map +1 -1
- package/dist/adapters/platforms/opencode-adapter.js +13 -3
- package/dist/adapters/platforms/opencode-adapter.js.map +1 -1
- package/dist/app/use-cases/init-project.d.ts +3 -0
- package/dist/app/use-cases/init-project.d.ts.map +1 -1
- package/dist/app/use-cases/init-project.js +14 -2
- package/dist/app/use-cases/init-project.js.map +1 -1
- package/dist/app/use-cases/list-memory-objects.d.ts +13 -0
- package/dist/app/use-cases/list-memory-objects.d.ts.map +1 -1
- package/dist/app/use-cases/list-memory-objects.js +37 -0
- package/dist/app/use-cases/list-memory-objects.js.map +1 -1
- package/dist/app/use-cases/scan-project.d.ts.map +1 -1
- package/dist/app/use-cases/scan-project.js +14 -2
- package/dist/app/use-cases/scan-project.js.map +1 -1
- package/dist/app/use-cases/upgrade.d.ts +38 -0
- package/dist/app/use-cases/upgrade.d.ts.map +1 -0
- package/dist/app/use-cases/upgrade.js +48 -0
- package/dist/app/use-cases/upgrade.js.map +1 -0
- package/dist/domain/memory-types.d.ts +2 -0
- package/dist/domain/memory-types.d.ts.map +1 -1
- package/dist/domain/memory-types.js +2 -0
- package/dist/domain/memory-types.js.map +1 -1
- package/dist/ports/platform-adapter.port.d.ts +4 -0
- package/dist/ports/platform-adapter.port.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-update.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,gFAAgF;AAChF,gEAAgE;AAChE,2EAA2E;AAC3E,gEAAgE;AAChE,sEAAsE;AACtE,sDAAsD;AACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AACnD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEnE,SAAS,OAAO,CAAC,KAAa,EAAE,QAAkB;IAChD,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CAAC,UAAkB,OAAO,
|
|
1
|
+
{"version":3,"file":"memory-update.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-upgrade.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-upgrade.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqGpC,wBAAgB,oBAAoB,IAAI,OAAO,CAiB9C"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { realpathSync, readFileSync } from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { runUpgrade } from '../../../app/use-cases/upgrade.js';
|
|
7
|
+
import { UserFacingError } from '../../../domain/errors.js';
|
|
8
|
+
// wolf upgrade (бриф 2026-09-02): npm-самообновление глобальной установки.
|
|
9
|
+
// spawn npm идёт через PATH — e2e подменяет npm фейком первой записью PATH,
|
|
10
|
+
// реальный registry в тестах не дёргается.
|
|
11
|
+
function readInstalledVersion() {
|
|
12
|
+
// dist/adapters/cli/commands/ → корень пакета (package.json в tarball-е рядом с dist/)
|
|
13
|
+
const baseDir = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
const pkg = JSON.parse(readFileSync(join(baseDir, '../../../../package.json'), 'utf-8'));
|
|
15
|
+
return pkg.version;
|
|
16
|
+
}
|
|
17
|
+
function realPathOrNull(p) {
|
|
18
|
+
try {
|
|
19
|
+
return realpathSync(p);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function npmBin() {
|
|
26
|
+
return process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
27
|
+
}
|
|
28
|
+
function runNpm(args, inheritStdio = false) {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
// ветвление вместо условных опций: TS не выводит перегрузку spawn по union-stdio
|
|
31
|
+
const child = inheritStdio
|
|
32
|
+
? spawn(npmBin(), args, { stdio: ['ignore', 'inherit', 'inherit'] })
|
|
33
|
+
: spawn(npmBin(), args);
|
|
34
|
+
let stdout = '';
|
|
35
|
+
let stderr = '';
|
|
36
|
+
if (child.stdout)
|
|
37
|
+
child.stdout.on('data', (d) => (stdout += d));
|
|
38
|
+
if (child.stderr)
|
|
39
|
+
child.stderr.on('data', (d) => (stderr += d));
|
|
40
|
+
child.on('error', reject); // npm не найден и пр.
|
|
41
|
+
child.on('close', (code) => resolve({ stdout, stderr, code }));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async function registryVersion() {
|
|
45
|
+
const res = await runNpm(['view', 'mister-wolf', 'version']);
|
|
46
|
+
const version = res.stdout.trim();
|
|
47
|
+
if (res.code !== 0 || version === '') {
|
|
48
|
+
const detail = res.stderr.trim() !== '' ? `: ${res.stderr.trim()}` : '';
|
|
49
|
+
throw new UserFacingError(`не удалось получить версию из npm registry${detail}`);
|
|
50
|
+
}
|
|
51
|
+
return version;
|
|
52
|
+
}
|
|
53
|
+
async function npmGlobalPrefix() {
|
|
54
|
+
try {
|
|
55
|
+
const res = await runNpm(['prefix', '-g']);
|
|
56
|
+
const p = res.stdout.trim();
|
|
57
|
+
return res.code === 0 && p !== '' ? realPathOrNull(p) : null;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null; // npm недоступен — тип установки не проверить (фолбэк = отказ)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function installLatest(from, to) {
|
|
64
|
+
console.log(`${from} → ${to}`);
|
|
65
|
+
const res = await runNpm(['install', '-g', 'mister-wolf@latest'], true);
|
|
66
|
+
if (res.code !== 0) {
|
|
67
|
+
throw new UserFacingError('npm install -g mister-wolf@latest завершился с ошибкой (вывод npm выше)');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function printOutcome(outcome) {
|
|
71
|
+
switch (outcome.kind) {
|
|
72
|
+
case 'up-to-date':
|
|
73
|
+
console.log(`уже последняя версия (${outcome.current})`);
|
|
74
|
+
return;
|
|
75
|
+
case 'local-newer':
|
|
76
|
+
console.log(`установленная ${outcome.current} новее версии в registry (${outcome.latest}) — обновление не требуется`);
|
|
77
|
+
return;
|
|
78
|
+
case 'available':
|
|
79
|
+
console.log(`доступна ${outcome.latest} (установлена ${outcome.current}) — запустите wolf upgrade`);
|
|
80
|
+
return;
|
|
81
|
+
case 'updated':
|
|
82
|
+
console.log('обновлено; новая версия wolf вступит в силу при следующем запуске');
|
|
83
|
+
return;
|
|
84
|
+
case 'linked-refusal':
|
|
85
|
+
throw new UserFacingError(`установлена dev/linked-копия (${outcome.binaryPath ?? 'путь неизвестен'}) — upgrade неприменим; для обновления: npm rm -g mister-wolf && npm i -g mister-wolf`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function memoryUpgradeCommand() {
|
|
89
|
+
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')
|
|
91
|
+
.option('--check', 'Only check for a newer version, do not install anything')
|
|
92
|
+
.action(async (options) => {
|
|
93
|
+
const checkOnly = options.check === true;
|
|
94
|
+
const deps = {
|
|
95
|
+
currentVersion: readInstalledVersion(),
|
|
96
|
+
binaryPath: process.argv[1] ? realPathOrNull(process.argv[1]) : null,
|
|
97
|
+
npmPrefix: checkOnly ? null : await npmGlobalPrefix(), // --check тип установки не проверяет
|
|
98
|
+
registryVersion,
|
|
99
|
+
installLatest,
|
|
100
|
+
};
|
|
101
|
+
printOutcome(await runUpgrade(deps, checkOnly));
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=memory-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,33 @@
|
|
|
1
|
+
export interface DocIdMigrationEntry {
|
|
2
|
+
id: string;
|
|
3
|
+
newId: string;
|
|
4
|
+
from: string;
|
|
5
|
+
to: string;
|
|
6
|
+
action: 'rename' | 'conflict';
|
|
7
|
+
}
|
|
8
|
+
export interface DocIdMigrationReport {
|
|
9
|
+
entries: DocIdMigrationEntry[];
|
|
10
|
+
conflicts: DocIdMigrationEntry[];
|
|
11
|
+
problems: {
|
|
12
|
+
path: string;
|
|
13
|
+
error: string;
|
|
14
|
+
}[];
|
|
15
|
+
renamed: number;
|
|
16
|
+
refsRewritten: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Однократная миграция id document-ref на канон §2.1 (спека 2.1.0 §2.6):
|
|
20
|
+
* 1. найти объекты с id вне канона (frontmatter.type === 'document-ref');
|
|
21
|
+
* 2. вычислить новый id = withTieBreak(documentRefId(source.path, created_at), takenIds),
|
|
22
|
+
* где takenIds — id ВСЕХ объектов памяти (коллизии → суффикс -2, -3, …);
|
|
23
|
+
* 3. переименовать файл (targetPathFor) и заменить id в frontmatter;
|
|
24
|
+
* 4. переписать все ссылки на старый id во всех .md памяти (кроме briefs/quarantine)
|
|
25
|
+
* и в relations.jsonl — по границе id (lookahead `(?![A-Za-z0-9_-])`),
|
|
26
|
+
* иначе doc_X порвётся при существующем doc_X2;
|
|
27
|
+
* 5. rebuild-index;
|
|
28
|
+
* 6. отчёт: переименовано / ссылок переписано / коллизии.
|
|
29
|
+
* НЕ трогает: events.jsonl (исторический лог), .wolf/memory/briefs, quarantine.
|
|
30
|
+
*/
|
|
31
|
+
export declare function planDocIdMigration(baseDir: string): Promise<DocIdMigrationReport>;
|
|
32
|
+
export declare function applyDocIdMigration(baseDir: string): Promise<DocIdMigrationReport>;
|
|
33
|
+
//# sourceMappingURL=doc-id-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-id-migration.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/doc-id-migration.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgDvF;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwDxF"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import { existsSync, readFileSync } from 'fs';
|
|
3
|
+
import { join, relative, dirname } from 'path';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
import { memoryDir, relationsPath, targetPathFor } from './project-paths.js';
|
|
6
|
+
import { writeFileAtomic } from './markdown-memory-store.js';
|
|
7
|
+
import { parseFrontmatter, walkMd } from './layout-migration.js';
|
|
8
|
+
import { documentRefId, isCanonicalDocumentId, withTieBreak } from './document-id.js';
|
|
9
|
+
import { rebuildMemoryIndex } from '../../app/use-cases/rebuild-memory-index.js';
|
|
10
|
+
import { createCliContainer } from '../../bootstrap/container.js';
|
|
11
|
+
/**
|
|
12
|
+
* Однократная миграция id document-ref на канон §2.1 (спека 2.1.0 §2.6):
|
|
13
|
+
* 1. найти объекты с id вне канона (frontmatter.type === 'document-ref');
|
|
14
|
+
* 2. вычислить новый id = withTieBreak(documentRefId(source.path, created_at), takenIds),
|
|
15
|
+
* где takenIds — id ВСЕХ объектов памяти (коллизии → суффикс -2, -3, …);
|
|
16
|
+
* 3. переименовать файл (targetPathFor) и заменить id в frontmatter;
|
|
17
|
+
* 4. переписать все ссылки на старый id во всех .md памяти (кроме briefs/quarantine)
|
|
18
|
+
* и в relations.jsonl — по границе id (lookahead `(?![A-Za-z0-9_-])`),
|
|
19
|
+
* иначе doc_X порвётся при существующем doc_X2;
|
|
20
|
+
* 5. rebuild-index;
|
|
21
|
+
* 6. отчёт: переименовано / ссылок переписано / коллизии.
|
|
22
|
+
* НЕ трогает: events.jsonl (исторический лог), .wolf/memory/briefs, quarantine.
|
|
23
|
+
*/
|
|
24
|
+
export async function planDocIdMigration(baseDir) {
|
|
25
|
+
const memDir = memoryDir(baseDir);
|
|
26
|
+
const files = existsSync(memDir) ? await walkMd(memDir) : [];
|
|
27
|
+
const problems = [];
|
|
28
|
+
// проход 1: собрать id ВСЕХ объектов (занятые для tie-break) + распарсить кандидатов
|
|
29
|
+
const takenIds = new Set();
|
|
30
|
+
const parsed = [];
|
|
31
|
+
for (const f of files) {
|
|
32
|
+
const rel = relative(baseDir, f);
|
|
33
|
+
if (isExcluded(rel))
|
|
34
|
+
continue; // briefs/quarantine не трогаем
|
|
35
|
+
let content;
|
|
36
|
+
try {
|
|
37
|
+
content = await fs.readFile(f, 'utf-8');
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
problems.push({ path: rel, error: String(err) });
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const p = parseFrontmatter(content);
|
|
44
|
+
if (!p)
|
|
45
|
+
continue; // не объект памяти (нет frontmatter) — не субъект миграции
|
|
46
|
+
if (typeof p.fm.id === 'string')
|
|
47
|
+
takenIds.add(p.fm.id);
|
|
48
|
+
parsed.push({ rel, fm: p.fm });
|
|
49
|
+
}
|
|
50
|
+
// проход 2: вычислить newId для кандидатов вне канона
|
|
51
|
+
const entries = [];
|
|
52
|
+
const conflicts = [];
|
|
53
|
+
for (const { rel, fm } of parsed) {
|
|
54
|
+
if (fm.type !== 'document-ref' || isCanonicalDocumentId(fm.id))
|
|
55
|
+
continue;
|
|
56
|
+
const sourcePath = fm.source?.path;
|
|
57
|
+
if (!sourcePath) {
|
|
58
|
+
problems.push({ path: rel, error: `document-ref ${fm.id} без source.path — миграция невозможна` });
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const newId = withTieBreak(documentRefId(sourcePath, fm.created_at), takenIds);
|
|
62
|
+
takenIds.add(newId); // накапливаем новые id — защита от коллизий внутри одного прогона
|
|
63
|
+
const to = relative(baseDir, targetPathFor(baseDir, { type: 'document-ref', id: newId, thread: fm.thread }));
|
|
64
|
+
// конфликт: файл по пути to уже существует на диске и его id != newId
|
|
65
|
+
let action = 'rename';
|
|
66
|
+
if (existsSync(join(baseDir, to)) && readIdFromDisk(join(baseDir, to)) !== newId) {
|
|
67
|
+
action = 'conflict';
|
|
68
|
+
}
|
|
69
|
+
const entry = { id: fm.id, newId, from: rel, to, action };
|
|
70
|
+
entries.push(entry);
|
|
71
|
+
if (action === 'conflict')
|
|
72
|
+
conflicts.push(entry);
|
|
73
|
+
}
|
|
74
|
+
return { entries, conflicts, problems, renamed: 0, refsRewritten: 0 };
|
|
75
|
+
}
|
|
76
|
+
export async function applyDocIdMigration(baseDir) {
|
|
77
|
+
const report = await planDocIdMigration(baseDir);
|
|
78
|
+
const renames = report.entries.filter((e) => e.action === 'rename');
|
|
79
|
+
const memDir = memoryDir(baseDir);
|
|
80
|
+
// 3. переименовать файлы + заменить id в frontmatter
|
|
81
|
+
for (const e of renames) {
|
|
82
|
+
const absFrom = join(baseDir, e.from);
|
|
83
|
+
const absTo = join(baseDir, e.to);
|
|
84
|
+
const parsed = parseFrontmatter(await fs.readFile(absFrom, 'utf-8'));
|
|
85
|
+
if (!parsed)
|
|
86
|
+
continue;
|
|
87
|
+
parsed.fm.id = e.newId;
|
|
88
|
+
const newContent = `---\n${yaml.dump(parsed.fm).trimEnd()}\n---\n\n${parsed.body}`;
|
|
89
|
+
await fs.mkdir(dirname(absTo), { recursive: true });
|
|
90
|
+
await writeFileAtomic(absTo, newContent);
|
|
91
|
+
if (absFrom !== absTo)
|
|
92
|
+
await fs.unlink(absFrom);
|
|
93
|
+
}
|
|
94
|
+
report.renamed = renames.length;
|
|
95
|
+
// 4. переписать ссылки oldId → newId по всем .md памяти и relations.jsonl.
|
|
96
|
+
// Замена идемпотентна: уже переименованные файлы содержат newId, oldId там не матчится.
|
|
97
|
+
// Длинные id заменяем первыми — защита от вложенных вхождений.
|
|
98
|
+
const pairs = renames.map((e) => ({ oldId: e.id, newId: e.newId })).sort((a, b) => b.oldId.length - a.oldId.length);
|
|
99
|
+
const rewrite = (text) => {
|
|
100
|
+
let count = 0;
|
|
101
|
+
for (const { oldId, newId } of pairs) {
|
|
102
|
+
text = text.replace(idBoundaryRe(oldId), () => {
|
|
103
|
+
count++;
|
|
104
|
+
return newId;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return { text, count };
|
|
108
|
+
};
|
|
109
|
+
let refs = 0;
|
|
110
|
+
for (const f of await walkMd(memDir)) {
|
|
111
|
+
if (isExcluded(relative(baseDir, f)))
|
|
112
|
+
continue;
|
|
113
|
+
const content = await fs.readFile(f, 'utf-8');
|
|
114
|
+
const { text, count } = rewrite(content);
|
|
115
|
+
if (count > 0)
|
|
116
|
+
await writeFileAtomic(f, text);
|
|
117
|
+
refs += count;
|
|
118
|
+
}
|
|
119
|
+
const rel = relationsPath(baseDir); // отсутствует — пропустить
|
|
120
|
+
if (existsSync(rel)) {
|
|
121
|
+
const content = await fs.readFile(rel, 'utf-8');
|
|
122
|
+
const { text, count } = rewrite(content);
|
|
123
|
+
if (count > 0)
|
|
124
|
+
await writeFileAtomic(rel, text);
|
|
125
|
+
refs += count;
|
|
126
|
+
}
|
|
127
|
+
report.refsRewritten = refs;
|
|
128
|
+
// 5. перестроить поисковый индекс (как memory-rebuild-index.ts, но напрямую)
|
|
129
|
+
const { store, index } = createCliContainer(baseDir);
|
|
130
|
+
await rebuildMemoryIndex({ store, index });
|
|
131
|
+
return report;
|
|
132
|
+
}
|
|
133
|
+
/** briefs/ и quarantine/ — служебные/битые зоны, миграция их не трогает (§2.6). */
|
|
134
|
+
function isExcluded(relToBase) {
|
|
135
|
+
const relToMemory = relToBase.replace(/^\.wolf[/\\]memory[/\\]/, '');
|
|
136
|
+
return (relToMemory.startsWith('briefs/') ||
|
|
137
|
+
relToMemory.startsWith('briefs\\') ||
|
|
138
|
+
relToMemory.startsWith('quarantine/') ||
|
|
139
|
+
relToMemory.startsWith('quarantine\\'));
|
|
140
|
+
}
|
|
141
|
+
/** Граница id: заменяем oldId, только если дальше НЕ идёт [A-Za-z0-9_-] (не порвёт doc_X2). */
|
|
142
|
+
function idBoundaryRe(id) {
|
|
143
|
+
return new RegExp(escapeRegExp(id) + '(?![A-Za-z0-9_-])', 'g');
|
|
144
|
+
}
|
|
145
|
+
function escapeRegExp(s) {
|
|
146
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
147
|
+
}
|
|
148
|
+
/** Быстрое чтение id из frontmatter без полного парса — для детекции конфликтов. */
|
|
149
|
+
function readIdFromDisk(absPath) {
|
|
150
|
+
try {
|
|
151
|
+
const m = readFileSync(absPath, 'utf-8').match(/^---[\s\S]*?\nid:\s*(\S+)/);
|
|
152
|
+
return m ? m[1] : null;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=doc-id-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-id-migration.js","sourceRoot":"","sources":["../../../src/adapters/fs/doc-id-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Канон id document-ref (спека 2.1.0 §2.1): `mem_<YYYYMMDD>_doc_<slug>_<hash8>`.
|
|
3
|
+
*
|
|
4
|
+
* - `<YYYYMMDD>` — дата создания объекта (scan: текущий день; миграция: created_at);
|
|
5
|
+
* - `<slug>` — basename документа без расширения, kebab-case (транслит кириллицы);
|
|
6
|
+
* - `<hash8>` — первые 8 hex sha256(canonical path): путь остаётся в id только
|
|
7
|
+
* как хеш — FTS-шум от псевдо-токенов пути исчезает (F9).
|
|
8
|
+
*
|
|
9
|
+
* Tie-break: коллизия `slug+hash8` в пределах памяти → суффикс `-2`, `-3`, …
|
|
10
|
+
* (см. withTieBreak); суффикс допускается канон-регуляркой.
|
|
11
|
+
*/
|
|
12
|
+
export declare const CANONICAL_DOCUMENT_ID_RE: RegExp;
|
|
13
|
+
/** id соответствует канону §2.1 (с учётом tie-break-суффикса). */
|
|
14
|
+
export declare function isCanonicalDocumentId(id: string): boolean;
|
|
15
|
+
/** Канонический путь: posix-разделители, без ведущего `./`. */
|
|
16
|
+
export declare function canonicalPath(path: string): string;
|
|
17
|
+
/** Slug из basename без расширения: kebab-case, транслит кириллицы, cap 40, пусто → `doc`. */
|
|
18
|
+
export declare function documentSlug(path: string): string;
|
|
19
|
+
/** Канонический id document-ref; `dateISO` — ISO-дата создания (берётся день). */
|
|
20
|
+
export declare function documentRefId(path: string, dateISO: string): string;
|
|
21
|
+
/** Tie-break (§2.1): если id занят другим объектом — суффикс `-2`, `-3`, … */
|
|
22
|
+
export declare function withTieBreak(id: string, taken: Iterable<string>): string;
|
|
23
|
+
//# sourceMappingURL=document-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-id.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/document-id.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,QAAkE,CAAC;AAExG,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASjD;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAInE;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAOxE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createHash } from 'crypto';
|
|
2
|
+
import { basename } from 'path';
|
|
3
|
+
import { HashIdGenerator } from './hash-id-generator.js';
|
|
4
|
+
/**
|
|
5
|
+
* Канон id document-ref (спека 2.1.0 §2.1): `mem_<YYYYMMDD>_doc_<slug>_<hash8>`.
|
|
6
|
+
*
|
|
7
|
+
* - `<YYYYMMDD>` — дата создания объекта (scan: текущий день; миграция: created_at);
|
|
8
|
+
* - `<slug>` — basename документа без расширения, kebab-case (транслит кириллицы);
|
|
9
|
+
* - `<hash8>` — первые 8 hex sha256(canonical path): путь остаётся в id только
|
|
10
|
+
* как хеш — FTS-шум от псевдо-токенов пути исчезает (F9).
|
|
11
|
+
*
|
|
12
|
+
* Tie-break: коллизия `slug+hash8` в пределах памяти → суффикс `-2`, `-3`, …
|
|
13
|
+
* (см. withTieBreak); суффикс допускается канон-регуляркой.
|
|
14
|
+
*/
|
|
15
|
+
export const CANONICAL_DOCUMENT_ID_RE = /^mem_\d{8}_doc_[a-z0-9]+(?:-[a-z0-9]+)*_[0-9a-f]{8}(?:-\d+)?$/;
|
|
16
|
+
/** id соответствует канону §2.1 (с учётом tie-break-суффикса). */
|
|
17
|
+
export function isCanonicalDocumentId(id) {
|
|
18
|
+
return CANONICAL_DOCUMENT_ID_RE.test(id);
|
|
19
|
+
}
|
|
20
|
+
/** Канонический путь: posix-разделители, без ведущего `./`. */
|
|
21
|
+
export function canonicalPath(path) {
|
|
22
|
+
return path.replaceAll('\\', '/').replace(/^\.\//, '');
|
|
23
|
+
}
|
|
24
|
+
/** Slug из basename без расширения: kebab-case, транслит кириллицы, cap 40, пусто → `doc`. */
|
|
25
|
+
export function documentSlug(path) {
|
|
26
|
+
const name = basename(canonicalPath(path)).replace(/\.[^.]+$/, '');
|
|
27
|
+
const translit = name.toLowerCase().replace(/[а-яё]/g, (ch) => HashIdGenerator.CYRILLIC[ch] ?? '');
|
|
28
|
+
const slug = translit
|
|
29
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
30
|
+
.replace(/^-+|-+$/g, '')
|
|
31
|
+
.substring(0, 40)
|
|
32
|
+
.replace(/^-+|-+$/g, '');
|
|
33
|
+
return slug || 'doc';
|
|
34
|
+
}
|
|
35
|
+
/** Канонический id document-ref; `dateISO` — ISO-дата создания (берётся день). */
|
|
36
|
+
export function documentRefId(path, dateISO) {
|
|
37
|
+
const day = dateISO.slice(0, 10).replace(/-/g, '');
|
|
38
|
+
const hash8 = createHash('sha256').update(canonicalPath(path)).digest('hex').slice(0, 8);
|
|
39
|
+
return `mem_${day}_doc_${documentSlug(path)}_${hash8}`;
|
|
40
|
+
}
|
|
41
|
+
/** Tie-break (§2.1): если id занят другим объектом — суффикс `-2`, `-3`, … */
|
|
42
|
+
export function withTieBreak(id, taken) {
|
|
43
|
+
const used = new Set(taken);
|
|
44
|
+
if (!used.has(id))
|
|
45
|
+
return id;
|
|
46
|
+
for (let n = 2;; n++) {
|
|
47
|
+
const candidate = `${id}-${n}`;
|
|
48
|
+
if (!used.has(candidate))
|
|
49
|
+
return candidate;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=document-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-id.js","sourceRoot":"","sources":["../../../src/adapters/fs/document-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,+DAA+D,CAAC;AAExG,kEAAkE;AAClE,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC9C,OAAO,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACnG,MAAM,IAAI,GAAG,QAAQ;SAClB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;SAChB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,IAAI,IAAI,KAAK,CAAC;AACvB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,OAAO,OAAO,GAAG,QAAQ,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,EAAU,EAAE,KAAuB;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IdGenerator } from '../../ports/id-generator.port.js';
|
|
2
2
|
export declare class HashIdGenerator implements IdGenerator {
|
|
3
|
-
|
|
3
|
+
static readonly CYRILLIC: Record<string, string>;
|
|
4
4
|
generateMemoryId(date: Date, slug: string): string;
|
|
5
5
|
generateEventId(date: Date): string;
|
|
6
6
|
private datePart;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-id-generator.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/hash-id-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D,qBAAa,eAAgB,YAAW,WAAW;IAGjD,
|
|
1
|
+
{"version":3,"file":"hash-id-generator.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/hash-id-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D,qBAAa,eAAgB,YAAW,WAAW;IAGjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkC9C;IAEF,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAMlD,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAKnC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'crypto';
|
|
2
2
|
export class HashIdGenerator {
|
|
3
3
|
// ponytail: flat translit map, deterministic; switch to a lib only if other
|
|
4
|
-
// alphabets (CJK etc.) need real slugs
|
|
4
|
+
// alphabets (CJK etc.) need real slugs. Публичная: переиспользуется document-id.ts.
|
|
5
5
|
static CYRILLIC = {
|
|
6
6
|
а: 'a',
|
|
7
7
|
б: 'b',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-id-generator.js","sourceRoot":"","sources":["../../../src/adapters/fs/hash-id-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,OAAO,eAAe;IAC1B,4EAA4E;IAC5E,
|
|
1
|
+
{"version":3,"file":"hash-id-generator.js","sourceRoot":"","sources":["../../../src/adapters/fs/hash-id-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,13 @@ export interface MigrationReport {
|
|
|
15
15
|
}[];
|
|
16
16
|
total: number;
|
|
17
17
|
}
|
|
18
|
+
/** Экспортировано для переиспользования в doc-id-migration.ts (спека 2.1.0 §2.6). */
|
|
19
|
+
export declare function parseFrontmatter(content: string): {
|
|
20
|
+
fm: Record<string, any>;
|
|
21
|
+
body: string;
|
|
22
|
+
} | null;
|
|
23
|
+
/** Экспортировано для переиспользования в doc-id-migration.ts (спека 2.1.0 §2.6). */
|
|
24
|
+
export declare function walkMd(dir: string): Promise<string[]>;
|
|
18
25
|
export declare function planLayoutMigration(baseDir: string): Promise<MigrationReport>;
|
|
19
26
|
export declare function applyLayoutMigration(baseDir: string): Promise<MigrationReport>;
|
|
20
27
|
//# sourceMappingURL=layout-migration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-migration.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/layout-migration.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,UAAU,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"layout-migration.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/layout-migration.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,UAAU,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASlG;AAED,qFAAqF;AACrF,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiB3D;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA6DnF;AAaD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA2BpF"}
|
|
@@ -4,7 +4,8 @@ import { join, relative, dirname } from 'path';
|
|
|
4
4
|
import yaml from 'js-yaml';
|
|
5
5
|
import { objectsDir, targetPathFor, memoryDir } from './project-paths.js';
|
|
6
6
|
import { writeFileAtomic } from './markdown-memory-store.js';
|
|
7
|
-
|
|
7
|
+
/** Экспортировано для переиспользования в doc-id-migration.ts (спека 2.1.0 §2.6). */
|
|
8
|
+
export function parseFrontmatter(content) {
|
|
8
9
|
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
9
10
|
if (!match)
|
|
10
11
|
return null;
|
|
@@ -16,7 +17,8 @@ function parseFrontmatter(content) {
|
|
|
16
17
|
return null;
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
+
/** Экспортировано для переиспользования в doc-id-migration.ts (спека 2.1.0 §2.6). */
|
|
21
|
+
export async function walkMd(dir) {
|
|
20
22
|
const results = [];
|
|
21
23
|
async function recurse(d) {
|
|
22
24
|
let entries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-migration.js","sourceRoot":"","sources":["../../../src/adapters/fs/layout-migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAmB7D,
|
|
1
|
+
{"version":3,"file":"layout-migration.js","sourceRoot":"","sources":["../../../src/adapters/fs/layout-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/platforms/claude-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAIxH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,EAAE,YAAY;IAEvB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIpC,OAAO,CAAC,UAAU;IAIZ,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAoB/D,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/platforms/claude-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAIxH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,EAAE,YAAY;IAEvB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIpC,OAAO,CAAC,UAAU;IAIZ,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAoB/D,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgB/E,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAYxD"}
|
|
@@ -38,13 +38,15 @@ export class ClaudeAdapter {
|
|
|
38
38
|
const mcpServers = asRecord(cfg.mcpServers) ?? {};
|
|
39
39
|
// каноническая проекция McpCommand в формат Claude Code: command + args
|
|
40
40
|
const desired = { command: cmd.command, args: [...cmd.args] };
|
|
41
|
+
// F6 (спека 2.1.0 §2.4): честный лог — имя файла + фактический wolf-ключ
|
|
42
|
+
const reported = { configFile: '.mcp.json', keys: ['mcpServers.wolf'] };
|
|
41
43
|
if (JSON.stringify(mcpServers.wolf) === JSON.stringify(desired))
|
|
42
|
-
return { action: 'unchanged' };
|
|
44
|
+
return { action: 'unchanged', ...reported };
|
|
43
45
|
const replaced = mcpServers.wolf !== undefined;
|
|
44
46
|
mcpServers.wolf = desired;
|
|
45
47
|
cfg.mcpServers = mcpServers;
|
|
46
48
|
await writeFileAtomic(file, JSON.stringify(cfg, null, 2) + '\n');
|
|
47
|
-
return { action: replaced ? 'replaced' : 'written' };
|
|
49
|
+
return { action: replaced ? 'replaced' : 'written', ...reported };
|
|
48
50
|
}
|
|
49
51
|
async removeWolf(projectRoot) {
|
|
50
52
|
const file = this.configFile(projectRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../../../src/adapters/platforms/claude-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,OAAO,aAAa;IACf,EAAE,GAAG,QAAQ,CAAC;IAEvB,MAAM,CAAC,WAAmB;QACxB,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAChG,CAAC;IAEO,UAAU,CAAC,WAAmB;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,8CAA8C,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,MAAwB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,WAAmB,EAAE,GAAe;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAClD,wEAAwE;QACxE,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../../../src/adapters/platforms/claude-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,OAAO,aAAa;IACf,EAAE,GAAG,QAAQ,CAAC;IAEvB,MAAM,CAAC,WAAmB;QACxB,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAChG,CAAC;IAEO,UAAU,CAAC,WAAmB;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,8CAA8C,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,MAAwB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,WAAmB,EAAE,GAAe;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAClD,wEAAwE;QACxE,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,yEAAyE;QACzE,MAAM,QAAQ,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7G,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC;QAC/C,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;QAC1B,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;QAC5B,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,QAAQ,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5E,OAAO,UAAU,CAAC,IAAI,CAAC;QACvB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,UAAU,CAAC;;YAC3D,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/platforms/opencode-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAKxH,8CAA8C;AAC9C,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,gFAAgF;AAChF,eAAO,MAAM,cAAc,IAAI,CAAC;AAIhC,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,EAAE,cAAc;IAEzB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAQpC,+FAA+F;IAC/F,OAAO,CAAC,UAAU;IAOZ,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkB/D,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/platforms/opencode-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAKxH,8CAA8C;AAC9C,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,gFAAgF;AAChF,eAAO,MAAM,cAAc,IAAI,CAAC;AAIhC,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,EAAE,cAAc;IAEzB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAQpC,+FAA+F;IAC/F,OAAO,CAAC,UAAU;IAOZ,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkB/D,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2C/E,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAYxD"}
|