mister-wolf 2.18.5 → 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.
- package/README.md +1 -1
- package/README.ru.md +16 -14
- package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
- package/dist/adapters/cli/cli-entry.js +10 -1
- package/dist/adapters/cli/cli-entry.js.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.js +3 -0
- package/dist/adapters/cli/commands/memory-sync.js.map +1 -1
- package/dist/adapters/cli/commands/memory-upgrade.d.ts +133 -0
- package/dist/adapters/cli/commands/memory-upgrade.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-upgrade.js +507 -5
- package/dist/adapters/cli/commands/memory-upgrade.js.map +1 -1
- package/dist/adapters/cli/commands/upgrade-projects.d.ts +17 -0
- package/dist/adapters/cli/commands/upgrade-projects.d.ts.map +1 -0
- package/dist/adapters/cli/commands/upgrade-projects.js +75 -0
- package/dist/adapters/cli/commands/upgrade-projects.js.map +1 -0
- package/dist/adapters/cli/report-renderer.d.ts +43 -0
- package/dist/adapters/cli/report-renderer.d.ts.map +1 -0
- package/dist/adapters/cli/report-renderer.js +184 -0
- package/dist/adapters/cli/report-renderer.js.map +1 -0
- package/dist/adapters/fs/projects-registry.d.ts +21 -0
- package/dist/adapters/fs/projects-registry.d.ts.map +1 -1
- package/dist/adapters/fs/projects-registry.js +54 -1
- package/dist/adapters/fs/projects-registry.js.map +1 -1
- package/dist/adapters/fs/update-map.d.ts +102 -0
- package/dist/adapters/fs/update-map.d.ts.map +1 -0
- package/dist/adapters/fs/update-map.js +95 -0
- package/dist/adapters/fs/update-map.js.map +1 -0
- package/dist/adapters/fs/upgrade-lock.d.ts +23 -0
- package/dist/adapters/fs/upgrade-lock.d.ts.map +1 -0
- package/dist/adapters/fs/upgrade-lock.js +59 -0
- package/dist/adapters/fs/upgrade-lock.js.map +1 -0
- package/dist/adapters/render/opencode/opencode-renderer.d.ts +13 -1
- package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -1
- package/dist/adapters/render/opencode/opencode-renderer.js +76 -8
- package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -1
- package/dist/app/use-cases/project-step.d.ts +52 -0
- package/dist/app/use-cases/project-step.d.ts.map +1 -0
- package/dist/app/use-cases/project-step.js +77 -0
- package/dist/app/use-cases/project-step.js.map +1 -0
- package/dist/app/use-cases/scan-unregistered.d.ts +25 -0
- package/dist/app/use-cases/scan-unregistered.d.ts.map +1 -0
- package/dist/app/use-cases/scan-unregistered.js +74 -0
- package/dist/app/use-cases/scan-unregistered.js.map +1 -0
- package/dist/app/use-cases/seed-base-playbooks.d.ts +10 -0
- package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -1
- package/dist/app/use-cases/seed-base-playbooks.js +54 -13
- package/dist/app/use-cases/seed-base-playbooks.js.map +1 -1
- package/dist/app/use-cases/upgrade-projects.d.ts +61 -0
- package/dist/app/use-cases/upgrade-projects.d.ts.map +1 -0
- package/dist/app/use-cases/upgrade-projects.js +379 -0
- package/dist/app/use-cases/upgrade-projects.js.map +1 -0
- package/dist/app/use-cases/verify-against-map.d.ts +48 -0
- package/dist/app/use-cases/verify-against-map.d.ts.map +1 -0
- package/dist/app/use-cases/verify-against-map.js +161 -0
- package/dist/app/use-cases/verify-against-map.js.map +1 -0
- package/dist/ports/base-set-renderer.port.d.ts +13 -0
- package/dist/ports/base-set-renderer.port.d.ts.map +1 -1
- package/package.json +3 -2
- package/templates/.wolf/router.log +1 -1
- package/update-map.json +204 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// src/adapters/fs/update-map.ts
|
|
2
|
+
// T1 (волна 2.19.0, ADR-1): карта обновления — zod-схема wire-формата
|
|
3
|
+
// update-map.json (полный инвентарь состава релиза, корень пакета) и
|
|
4
|
+
// загрузчик из packageRoot. Путь в FileEntry/FaceEntry — относительно
|
|
5
|
+
// templates/ пакета: base/agents/*.md, base/skills/<name>/SKILL.md,
|
|
6
|
+
// base/commands/*.md, base/playbooks/*.md, opencode/plugins/* — те же
|
|
7
|
+
// корни, что обходит templateFiles() рендерера (opencode-renderer.ts).
|
|
8
|
+
import { readFileSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { UserFacingError } from '../../domain/errors.js';
|
|
12
|
+
import { packageRoot as defaultPackageRoot } from '../render/templates-root.js';
|
|
13
|
+
/** Полный X.Y.Z — голые миноры запрещены (AGENTS.md). */
|
|
14
|
+
const SEMVER_RE = /^\d+\.\d+\.\d+$/;
|
|
15
|
+
export const UpdateCategorySchema = z.enum(['new', 'changed', 'unchanged', 'deprecated', 'removed']);
|
|
16
|
+
export const FileKindSchema = z.enum(['agent', 'skill', 'command', 'plugin']);
|
|
17
|
+
export const FileEntrySchema = z.object({
|
|
18
|
+
path: z.string().min(1),
|
|
19
|
+
kind: FileKindSchema,
|
|
20
|
+
category: UpdateCategorySchema,
|
|
21
|
+
});
|
|
22
|
+
export const FaceEntrySchema = z.object({
|
|
23
|
+
template: z.string().min(1),
|
|
24
|
+
owner_skill: z.string().min(1),
|
|
25
|
+
category: UpdateCategorySchema,
|
|
26
|
+
/** true = сеять недостающее лицо (seed-missing-only); false = репортить, не мутировать (deprecated). */
|
|
27
|
+
seed: z.boolean(),
|
|
28
|
+
});
|
|
29
|
+
export const UpdateMapSchema = z.object({
|
|
30
|
+
version: z.string().regex(SEMVER_RE),
|
|
31
|
+
prev: z.string().regex(SEMVER_RE),
|
|
32
|
+
/** ВСЕ файловые цели base-set — полный инвентарь, не компоновка дельт. */
|
|
33
|
+
files: z.array(FileEntrySchema),
|
|
34
|
+
faces: z.array(FaceEntrySchema),
|
|
35
|
+
agents_md: z.object({ category: UpdateCategorySchema, mode: z.literal('append-block') }),
|
|
36
|
+
/** Пусто = релиз без миграций схемы. */
|
|
37
|
+
schema_migrations: z.array(z.object({ from: z.number().int(), to: z.number().int() })),
|
|
38
|
+
/** Классы вне покрытия v1 — граница «не трогать чужое» объявлена явно. */
|
|
39
|
+
outside_v1: z.array(z.string()),
|
|
40
|
+
});
|
|
41
|
+
/** Сравнение полных версий X.Y.Z: -1 (a<b) | 0 | 1 (a>b). */
|
|
42
|
+
export function compareVersions(a, b) {
|
|
43
|
+
const pa = a.split('.').map(Number);
|
|
44
|
+
const pb = b.split('.').map(Number);
|
|
45
|
+
for (let i = 0; i < 3; i++) {
|
|
46
|
+
if (pa[i] !== pb[i])
|
|
47
|
+
return (pa[i] ?? 0) < (pb[i] ?? 0) ? -1 : 1;
|
|
48
|
+
}
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
function readCliVersion(pkgRoot) {
|
|
52
|
+
let version;
|
|
53
|
+
try {
|
|
54
|
+
version = JSON.parse(readFileSync(join(pkgRoot, 'package.json'), 'utf8')).version;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
throw new UserFacingError(`package.json not found or corrupted at ${pkgRoot}`);
|
|
58
|
+
}
|
|
59
|
+
if (typeof version !== 'string' || !SEMVER_RE.test(version)) {
|
|
60
|
+
throw new UserFacingError(`package.json at ${pkgRoot} has no valid X.Y.Z version`);
|
|
61
|
+
}
|
|
62
|
+
return version;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Читает и валидирует update-map.json из корня пакета. Карта из будущего
|
|
66
|
+
* (version новее CLI) — честный отказ, не молчаливое использование.
|
|
67
|
+
*/
|
|
68
|
+
export function loadUpdateMap(pkgRoot = defaultPackageRoot()) {
|
|
69
|
+
const mapPath = join(pkgRoot, 'update-map.json');
|
|
70
|
+
let raw;
|
|
71
|
+
try {
|
|
72
|
+
raw = readFileSync(mapPath, 'utf8');
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
throw new UserFacingError(`update-map.json not found at ${mapPath} — reinstall the package`);
|
|
76
|
+
}
|
|
77
|
+
let parsed;
|
|
78
|
+
try {
|
|
79
|
+
parsed = JSON.parse(raw);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
throw new UserFacingError(`update-map.json is corrupted (invalid JSON): ${err instanceof Error ? err.message : String(err)}`);
|
|
83
|
+
}
|
|
84
|
+
const result = UpdateMapSchema.safeParse(parsed);
|
|
85
|
+
if (!result.success) {
|
|
86
|
+
const issue = result.error.issues[0];
|
|
87
|
+
throw new UserFacingError(`update-map.json is invalid at ${issue.path.join('.')}: ${issue.message}`);
|
|
88
|
+
}
|
|
89
|
+
const cliVersion = readCliVersion(pkgRoot);
|
|
90
|
+
if (compareVersions(result.data.version, cliVersion) > 0) {
|
|
91
|
+
throw new UserFacingError(`update-map.json version ${result.data.version} is newer than CLI ${cliVersion} — update wolf first`);
|
|
92
|
+
}
|
|
93
|
+
return result.data;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=update-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-map.js","sourceRoot":"","sources":["../../../src/adapters/fs/update-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTL lock-файла параллельного upgrade (REQ-01/06): проход, убитый без
|
|
3
|
+
* release (SIGKILL/OOM), не должен блокировать следующие запуски навсегда —
|
|
4
|
+
* протухший lock перехватывается. 10 минут ≥ парковый бюджет N03.1 (≤40 с
|
|
5
|
+
* на 4 проекта) с запасом на медленные окружения.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LOCK_TTL_MS: number;
|
|
8
|
+
/**
|
|
9
|
+
* Lock-файл параллельного upgrade в ОС-tmp (механика в духе flock, но с
|
|
10
|
+
* TTL). Владелец — экземпляр в процессе: повторный acquire() тем же
|
|
11
|
+
* экземпляром идемпотентен; живой чужой lock → Error 'upgrade already
|
|
12
|
+
* running'; отсутствующий/протухший/битый — захватывается перезаписью.
|
|
13
|
+
*/
|
|
14
|
+
export declare class UpgradeLock {
|
|
15
|
+
private readonly now;
|
|
16
|
+
private readonly dir;
|
|
17
|
+
private readonly held;
|
|
18
|
+
constructor(now?: () => number, dir?: string);
|
|
19
|
+
private file;
|
|
20
|
+
acquire(id: string): boolean;
|
|
21
|
+
release(id: string): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=upgrade-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-lock.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/upgrade-lock.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAiB,CAAC;AAE1C;;;;;GAKG;AACH,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;gBAGvB,GAAG,GAAE,MAAM,MAAiB,EAC5B,GAAG,GAAE,MAAiB;IAGzC,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAmB5B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAQ1B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'fs';
|
|
2
|
+
import { tmpdir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
/**
|
|
5
|
+
* TTL lock-файла параллельного upgrade (REQ-01/06): проход, убитый без
|
|
6
|
+
* release (SIGKILL/OOM), не должен блокировать следующие запуски навсегда —
|
|
7
|
+
* протухший lock перехватывается. 10 минут ≥ парковый бюджет N03.1 (≤40 с
|
|
8
|
+
* на 4 проекта) с запасом на медленные окружения.
|
|
9
|
+
*/
|
|
10
|
+
export const LOCK_TTL_MS = 10 * 60 * 1000;
|
|
11
|
+
/**
|
|
12
|
+
* Lock-файл параллельного upgrade в ОС-tmp (механика в духе flock, но с
|
|
13
|
+
* TTL). Владелец — экземпляр в процессе: повторный acquire() тем же
|
|
14
|
+
* экземпляром идемпотентен; живой чужой lock → Error 'upgrade already
|
|
15
|
+
* running'; отсутствующий/протухший/битый — захватывается перезаписью.
|
|
16
|
+
*/
|
|
17
|
+
export class UpgradeLock {
|
|
18
|
+
now;
|
|
19
|
+
dir;
|
|
20
|
+
held = new Set();
|
|
21
|
+
constructor(now = Date.now, dir = tmpdir()) {
|
|
22
|
+
this.now = now;
|
|
23
|
+
this.dir = dir;
|
|
24
|
+
}
|
|
25
|
+
file(id) {
|
|
26
|
+
return join(this.dir, `${id}.lock`);
|
|
27
|
+
}
|
|
28
|
+
acquire(id) {
|
|
29
|
+
if (this.held.has(id))
|
|
30
|
+
return true; // тот же владелец — идемпотентно
|
|
31
|
+
let raw;
|
|
32
|
+
try {
|
|
33
|
+
raw = readFileSync(this.file(id), 'utf-8');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
raw = undefined; // lock-файла нет — захват
|
|
37
|
+
}
|
|
38
|
+
if (raw !== undefined) {
|
|
39
|
+
const ts = Number(raw);
|
|
40
|
+
if (Number.isFinite(ts) && this.now() - ts < LOCK_TTL_MS)
|
|
41
|
+
throw new Error('upgrade already running');
|
|
42
|
+
// протухший (≥ TTL) или битый lock — перезаписываем
|
|
43
|
+
}
|
|
44
|
+
mkdirSync(this.dir, { recursive: true });
|
|
45
|
+
writeFileSync(this.file(id), String(this.now()));
|
|
46
|
+
this.held.add(id);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
release(id) {
|
|
50
|
+
this.held.delete(id);
|
|
51
|
+
try {
|
|
52
|
+
unlinkSync(this.file(id));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// файла нет — уже снят
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=upgrade-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-lock.js","sourceRoot":"","sources":["../../../src/adapters/fs/upgrade-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IAIH;IACA;IAJF,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,YACmB,MAAoB,IAAI,CAAC,GAAG,EAC5B,MAAc,MAAM,EAAE;QADtB,QAAG,GAAH,GAAG,CAAyB;QAC5B,QAAG,GAAH,GAAG,CAAmB;IACtC,CAAC;IAEI,IAAI,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;QACrE,IAAI,GAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,GAAG,SAAS,CAAC,CAAC,0BAA0B;QAC7C,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACrG,oDAAoD;QACtD,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseSetRenderer, ModelContext, RenderBaseSetOptions, RenderOutcome } from '../../../ports/base-set-renderer.port.js';
|
|
1
|
+
import { BaseSetRenderer, InspectOutcome, ModelContext, RenderBaseSetOptions, RenderOutcome } from '../../../ports/base-set-renderer.port.js';
|
|
2
2
|
export declare class OpencodeBaseSetRenderer implements BaseSetRenderer {
|
|
3
3
|
private readonly baseTemplatesRoot;
|
|
4
4
|
private readonly opts;
|
|
@@ -16,6 +16,18 @@ export declare class OpencodeBaseSetRenderer implements BaseSetRenderer {
|
|
|
16
16
|
outcomes: RenderOutcome[];
|
|
17
17
|
orphaned: string[];
|
|
18
18
|
}>;
|
|
19
|
+
/** T10 (REQ-08): read-only инспекция целей base-set — предикат того, что
|
|
20
|
+
* сделает syncBaseSet, БЕЗ записей (ни writeFileAtomic, ни saveSyncState):
|
|
21
|
+
* missing / foreign (unstamped, wx-политика) / identical / differs /
|
|
22
|
+
* mutated (свидетель sync-state говорит о локальной правке). models по
|
|
23
|
+
* умолчанию 'omit' — паритет с syncBaseSet, чей исход и предсказываем. */
|
|
24
|
+
inspectBaseSet(baseDir: string, opts?: RenderBaseSetOptions): Promise<InspectOutcome[]>;
|
|
25
|
+
/** Read-only инспекция AGENTS.md (§4.2) — по фактическим веткам управления:
|
|
26
|
+
* штампованный цельный файл — зона syncAgentsMd (сверка всего файла со
|
|
27
|
+
* штампом, mutated по свидетелю); без штампа — маркер-блок append-ветки
|
|
28
|
+
* init (синку не принадлежит, свидетеля не имеет); нет ни штампа, ни
|
|
29
|
+
* маркера — чужой файл на месте цели (wx-политика → foreign). */
|
|
30
|
+
private inspectAgentsMd;
|
|
19
31
|
/** AGENTS.md — цель в КОРНЕ проекта (§4.2); шаблона нет — тихо нет исхода. */
|
|
20
32
|
private agentsMdPaths;
|
|
21
33
|
private agentsMdContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-renderer.d.ts","sourceRoot":"","sources":["../../../../src/adapters/render/opencode/opencode-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-renderer.d.ts","sourceRoot":"","sources":["../../../../src/adapters/render/opencode/opencode-renderer.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,eAAe,EAEf,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACd,MAAM,0CAA0C,CAAC;AAuBlD,qBAAa,uBAAwB,YAAW,eAAe;IAI3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,EAAE,SAAc;gBAGG,iBAAiB,EAAE,MAAM,EACzB,IAAI,GAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAGpF,OAAO,KAAK,UAAU,GAErB;IAED,gFAAgF;IAChF,OAAO,CAAE,aAAa;IAmBtB,OAAO,CAAE,OAAO;IASV,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA+CrF,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA+D7D;;;;+EAI2E;IACrE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA8B7F;;;;sEAIkE;IAClE,OAAO,CAAC,eAAe;IAqBvB,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,eAAe;IAKvB,6EAA6E;YAC/D,cAAc;IAyB5B,gGAAgG;YAClF,YAAY;IA4C1B,OAAO,CAAC,aAAa;IASrB,+EAA+E;YACjE,aAAa;CAM5B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// src/adapters/render/opencode/opencode-renderer.ts
|
|
2
2
|
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
3
3
|
import { basename, join, relative } from 'path';
|
|
4
|
-
import { mkdir
|
|
4
|
+
import { mkdir } from 'fs/promises';
|
|
5
|
+
import { writeFileAtomic } from '../../fs/markdown-memory-store.js';
|
|
5
6
|
import { OPENCODE_MANIFEST, substitute } from '../manifest.js';
|
|
6
7
|
import { insertStamp, parseStamp } from '../stamp.js';
|
|
7
8
|
import { loadSyncState, saveSyncState, sha256 } from '../sync-state.js';
|
|
@@ -85,11 +86,12 @@ export class OpencodeBaseSetRenderer {
|
|
|
85
86
|
outcomes.push({
|
|
86
87
|
file: rel,
|
|
87
88
|
action: 'skipped',
|
|
89
|
+
mutated: true,
|
|
88
90
|
reason: 'mutated after render — differs from recorded render and fresh render; left untouched',
|
|
89
91
|
});
|
|
90
92
|
}
|
|
91
93
|
else {
|
|
92
|
-
await
|
|
94
|
+
await writeFileAtomic(f.target, fresh);
|
|
93
95
|
state.files[rel] = sha256(fresh);
|
|
94
96
|
outcomes.push({ file: rel, action: 'updated', reason: 'content differs (diff branch, §4.5)' });
|
|
95
97
|
}
|
|
@@ -137,12 +139,13 @@ export class OpencodeBaseSetRenderer {
|
|
|
137
139
|
outcomes.push({
|
|
138
140
|
file: rel,
|
|
139
141
|
action: 'skipped',
|
|
142
|
+
mutated: true,
|
|
140
143
|
reason: 'mutated after render — differs from recorded render and fresh render; left untouched',
|
|
141
144
|
});
|
|
142
145
|
continue;
|
|
143
146
|
}
|
|
144
147
|
await mkdir(join(f.target, '..'), { recursive: true });
|
|
145
|
-
await
|
|
148
|
+
await writeFileAtomic(f.target, fresh);
|
|
146
149
|
state.files[rel] = sha256(fresh);
|
|
147
150
|
outcomes.push({ file: rel, action: 'updated' });
|
|
148
151
|
}
|
|
@@ -165,6 +168,70 @@ export class OpencodeBaseSetRenderer {
|
|
|
165
168
|
saveSyncState(baseDir, state);
|
|
166
169
|
return { outcomes, orphaned };
|
|
167
170
|
}
|
|
171
|
+
/** T10 (REQ-08): read-only инспекция целей base-set — предикат того, что
|
|
172
|
+
* сделает syncBaseSet, БЕЗ записей (ни writeFileAtomic, ни saveSyncState):
|
|
173
|
+
* missing / foreign (unstamped, wx-политика) / identical / differs /
|
|
174
|
+
* mutated (свидетель sync-state говорит о локальной правке). models по
|
|
175
|
+
* умолчанию 'omit' — паритет с syncBaseSet, чей исход и предсказываем. */
|
|
176
|
+
async inspectBaseSet(baseDir, opts) {
|
|
177
|
+
const ctx = opts?.models ?? 'omit'; // легаси без routing-объекта — omit (§4.5)
|
|
178
|
+
const state = loadSyncState(baseDir);
|
|
179
|
+
const outcomes = [];
|
|
180
|
+
for (const f of this.templateFiles(baseDir)) {
|
|
181
|
+
const rel = relative(baseDir, f.target);
|
|
182
|
+
if (!existsSync(f.target)) {
|
|
183
|
+
outcomes.push({ file: rel, action: 'missing' });
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const current = readFileSync(f.target, 'utf-8');
|
|
187
|
+
if (parseStamp(current) === null) {
|
|
188
|
+
outcomes.push({ file: rel, action: 'foreign' });
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const fresh = this.renderContent(f, opts?.bake, ctx);
|
|
192
|
+
if (fresh === current) {
|
|
193
|
+
outcomes.push({ file: rel, action: 'identical' });
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
outcomes.push({
|
|
197
|
+
file: rel,
|
|
198
|
+
action: state.files[rel] !== undefined && sha256(current) !== state.files[rel] ? 'mutated' : 'differs',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
const agents = this.inspectAgentsMd(baseDir, ctx, state);
|
|
202
|
+
if (agents)
|
|
203
|
+
outcomes.push(agents);
|
|
204
|
+
return outcomes;
|
|
205
|
+
}
|
|
206
|
+
/** Read-only инспекция AGENTS.md (§4.2) — по фактическим веткам управления:
|
|
207
|
+
* штампованный цельный файл — зона syncAgentsMd (сверка всего файла со
|
|
208
|
+
* штампом, mutated по свидетелю); без штампа — маркер-блок append-ветки
|
|
209
|
+
* init (синку не принадлежит, свидетеля не имеет); нет ни штампа, ни
|
|
210
|
+
* маркера — чужой файл на месте цели (wx-политика → foreign). */
|
|
211
|
+
inspectAgentsMd(baseDir, models, state) {
|
|
212
|
+
const paths = this.agentsMdPaths(baseDir);
|
|
213
|
+
if (!paths)
|
|
214
|
+
return null;
|
|
215
|
+
if (!existsSync(paths.target))
|
|
216
|
+
return { file: 'AGENTS.md', action: 'missing' };
|
|
217
|
+
const current = readFileSync(paths.target, 'utf-8');
|
|
218
|
+
const content = this.agentsMdContent(paths.tplPath, models);
|
|
219
|
+
const norm = (s) => (s.endsWith('\n') ? s : `${s}\n`);
|
|
220
|
+
if (parseStamp(current) !== null) {
|
|
221
|
+
const fresh = insertStamp(content, { base: 'AGENTS.md', set: this.setVersion }, 'AGENTS.md');
|
|
222
|
+
if (fresh === current)
|
|
223
|
+
return { file: 'AGENTS.md', action: 'identical' };
|
|
224
|
+
const recorded = state.files['AGENTS.md'];
|
|
225
|
+
return {
|
|
226
|
+
file: 'AGENTS.md',
|
|
227
|
+
action: recorded !== undefined && sha256(current) !== recorded ? 'mutated' : 'differs',
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
const idx = current.indexOf(ONBOARDING_MARKER);
|
|
231
|
+
if (idx === -1)
|
|
232
|
+
return { file: 'AGENTS.md', action: 'foreign' };
|
|
233
|
+
return { file: 'AGENTS.md', action: norm(current.slice(idx)) === norm(content) ? 'identical' : 'differs' };
|
|
234
|
+
}
|
|
168
235
|
/** AGENTS.md — цель в КОРНЕ проекта (§4.2); шаблона нет — тихо нет исхода. */
|
|
169
236
|
agentsMdPaths(baseDir) {
|
|
170
237
|
const tplPath = join(this.baseTemplatesRoot, 'AGENTS.md');
|
|
@@ -184,7 +251,7 @@ export class OpencodeBaseSetRenderer {
|
|
|
184
251
|
const content = this.agentsMdContent(paths.tplPath, models);
|
|
185
252
|
if (!existsSync(paths.target)) {
|
|
186
253
|
const written = insertStamp(content, { base: 'AGENTS.md', set: this.setVersion }, 'AGENTS.md');
|
|
187
|
-
await
|
|
254
|
+
await writeFileAtomic(paths.target, written);
|
|
188
255
|
state.files['AGENTS.md'] = sha256(written);
|
|
189
256
|
return [{ file: 'AGENTS.md', action: 'created' }];
|
|
190
257
|
}
|
|
@@ -195,7 +262,7 @@ export class OpencodeBaseSetRenderer {
|
|
|
195
262
|
// marker-append: маркированный блок без штампа в конец; чужой контент не трогаем
|
|
196
263
|
const block = content.endsWith('\n') ? content : `${content}\n`;
|
|
197
264
|
const sep = current.endsWith('\n') ? (current.endsWith('\n\n') ? '' : '\n') : '\n\n';
|
|
198
|
-
await
|
|
265
|
+
await writeFileAtomic(paths.target, `${current}${sep}${block}`);
|
|
199
266
|
return [{ file: 'AGENTS.md', action: 'appended', reason: 'marker-append (D3: foreign content untouched)' }];
|
|
200
267
|
}
|
|
201
268
|
/** Sync-ветка AGENTS.md: только штампованный цельный файл; append-блок синку не принадлежит. */
|
|
@@ -205,7 +272,7 @@ export class OpencodeBaseSetRenderer {
|
|
|
205
272
|
return [];
|
|
206
273
|
const fresh = insertStamp(this.agentsMdContent(paths.tplPath, models), { base: 'AGENTS.md', set: this.setVersion }, 'AGENTS.md');
|
|
207
274
|
if (!existsSync(paths.target)) {
|
|
208
|
-
await
|
|
275
|
+
await writeFileAtomic(paths.target, fresh);
|
|
209
276
|
state.files['AGENTS.md'] = sha256(fresh);
|
|
210
277
|
return [{ file: 'AGENTS.md', action: 'created' }];
|
|
211
278
|
}
|
|
@@ -226,11 +293,12 @@ export class OpencodeBaseSetRenderer {
|
|
|
226
293
|
{
|
|
227
294
|
file: 'AGENTS.md',
|
|
228
295
|
action: 'skipped',
|
|
296
|
+
mutated: true,
|
|
229
297
|
reason: 'mutated after render — differs from recorded render and fresh render; left untouched',
|
|
230
298
|
},
|
|
231
299
|
];
|
|
232
300
|
}
|
|
233
|
-
await
|
|
301
|
+
await writeFileAtomic(paths.target, fresh);
|
|
234
302
|
state.files['AGENTS.md'] = sha256(fresh);
|
|
235
303
|
return [{ file: 'AGENTS.md', action: 'updated' }];
|
|
236
304
|
}
|
|
@@ -246,7 +314,7 @@ export class OpencodeBaseSetRenderer {
|
|
|
246
314
|
async writeRendered(f, bake, models) {
|
|
247
315
|
await mkdir(join(f.target, '..'), { recursive: true });
|
|
248
316
|
const content = this.renderContent(f, bake, models);
|
|
249
|
-
await
|
|
317
|
+
await writeFileAtomic(f.target, content);
|
|
250
318
|
return content;
|
|
251
319
|
}
|
|
252
320
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-renderer.js","sourceRoot":"","sources":["../../../../src/adapters/render/opencode/opencode-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"opencode-renderer.js","sourceRoot":"","sources":["../../../../src/adapters/render/opencode/opencode-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { BaseSetRenderer, ModelContext } from '../../ports/base-set-renderer.port.js';
|
|
2
|
+
import type { UpdateMap } from '../../adapters/fs/update-map.js';
|
|
3
|
+
import { type SeedDeps, type SeedOutcome } from './seed-base-playbooks.js';
|
|
4
|
+
import { type SyncVerifyOutcome, type VerifyResult } from './verify-against-map.js';
|
|
5
|
+
/** Внешние зависимости шага: посев (SeedDeps без mode — режим задаёт шаг;
|
|
6
|
+
* files — базовые имена шаблонов, прецедент сборки memory-init.ts:183-196) +
|
|
7
|
+
* рендерер base-set. Контейнер собирает вызывающий слой (T7/Ф4), не шаг. */
|
|
8
|
+
export interface ProjectStepDeps extends Omit<SeedDeps, 'mode'> {
|
|
9
|
+
renderer: BaseSetRenderer;
|
|
10
|
+
/** Контекст моделей для sync-рендера (§4.5); дефолт 'omit' (прецедент sync). */
|
|
11
|
+
models?: ModelContext | 'omit';
|
|
12
|
+
/** Замер wall-time шага (NFR-03); дефолт Date.now. */
|
|
13
|
+
now?: () => number;
|
|
14
|
+
}
|
|
15
|
+
/** Подтверждение REQ-02: проектные пути removed-целей, покрытые единым
|
|
16
|
+
* списком. Шаг НЕ спрашивает второго подтверждения (ADR-4) — но и не
|
|
17
|
+
* удаляет ничего без него (fail-safe: без opts.confirmedRemovals удалений нет,
|
|
18
|
+
* оставшиеся removed-цели дают error сверки — план не доведён). */
|
|
19
|
+
export interface ProjectStepOpts {
|
|
20
|
+
confirmedRemovals?: string[];
|
|
21
|
+
}
|
|
22
|
+
/** Итог шага по exit-модели design §«Exit-модель»: 0-подобный / требует
|
|
23
|
+
* решения / error. Сам exit-код ставит CLI-слой (T7/T9), не шаг. */
|
|
24
|
+
export type ExitKind = 'done' | 'needs-decision' | 'error';
|
|
25
|
+
/** Отчёт по проекту — вход рендера T3 и сводки парка T7. */
|
|
26
|
+
export interface ProjectReport {
|
|
27
|
+
/** Имя (basename) и корень проекта. */
|
|
28
|
+
name: string;
|
|
29
|
+
root: string;
|
|
30
|
+
/** Фазы 1-2: исходы sync; осиротевшие, ОСТАВШИЕСЯ после шага удалений
|
|
31
|
+
* (дрейф без объявления); удалённые в этом проходе (подтверждённые). */
|
|
32
|
+
sync: {
|
|
33
|
+
outcomes: SyncVerifyOutcome[];
|
|
34
|
+
orphaned: string[];
|
|
35
|
+
removed: string[];
|
|
36
|
+
};
|
|
37
|
+
/** Фаза 3: исходы посева — единственная мутация памяти (REQ-07). */
|
|
38
|
+
seed: SeedOutcome[];
|
|
39
|
+
/** Фаза 4: ленивая миграция схемы (backup — внутри guard); refused —
|
|
40
|
+
* отказ guard (например схема из будущего), ошибка передаётся как есть. */
|
|
41
|
+
schema: {
|
|
42
|
+
status: 'ok' | 'migrated' | 'refused';
|
|
43
|
+
error?: string;
|
|
44
|
+
};
|
|
45
|
+
/** Фаза 5: строгая сверка с картой — каждый пункт со статусом (T5). */
|
|
46
|
+
verify: VerifyResult;
|
|
47
|
+
/** Замер шага (NFR-03), мс; минимум 1 — разрешение Date.now-обёртки. */
|
|
48
|
+
wallMs: number;
|
|
49
|
+
exitKind: ExitKind;
|
|
50
|
+
}
|
|
51
|
+
export declare function runProjectStep(deps: ProjectStepDeps, root: string, map: UpdateMap, opts?: ProjectStepOpts): Promise<ProjectReport>;
|
|
52
|
+
//# sourceMappingURL=project-step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-step.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/project-step.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,EAAqB,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAEjC;;4EAE4E;AAC5E,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC7D,QAAQ,EAAE,eAAe,CAAC;IAC1B,gFAAgF;IAChF,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC/B,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;mEAGmE;AACnE,MAAM,WAAW,eAAe;IAC9B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;oEACoE;AACpE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,CAAC;AAE3D,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;4EACwE;IACxE,IAAI,EAAE;QAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/E,oEAAoE;IACpE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB;+EAC2E;IAC3E,MAAM,EAAE;QAAE,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,uEAAuE;IACvE,MAAM,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,aAAa,CAAC,CAiExB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// src/app/use-cases/project-step.ts
|
|
2
|
+
// T6 (волна 2.19.0, REQ-03/07/11, ADR-3/4, design §«Проектный шаг»): тонкая
|
|
3
|
+
// композиция ОДНОГО проекта — sync → removals → посев → миграция → сверка.
|
|
4
|
+
// Семантика шагов живёт в самих шагах (ADR-3); здесь только порядок фаз,
|
|
5
|
+
// ввод подтверждения удалений (REQ-02/ADR-4) и сведение исходов в ProjectReport
|
|
6
|
+
// (контракт для оркестратора T7 и рендера T3). Пофазная фиксация: записи фаз
|
|
7
|
+
// атомарны внутри шагов, сбой фазы k не откатывает k-1 — повтор доводит до
|
|
8
|
+
// конца (NFR-02). Единственная мутация памяти — посев (REQ-07).
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { unlink } from 'fs/promises';
|
|
11
|
+
import { basename, join } from 'path';
|
|
12
|
+
import { ensureCurrentSchema } from '../../adapters/fs/schema-guard.js';
|
|
13
|
+
import { syncBaseSet } from './sync-base-set.js';
|
|
14
|
+
import { seedBasePlaybooks } from './seed-base-playbooks.js';
|
|
15
|
+
import { projectPath as mapEntryProjectPath, verifyAgainstMap, } from './verify-against-map.js';
|
|
16
|
+
export async function runProjectStep(deps, root, map, opts = {}) {
|
|
17
|
+
const now = deps.now ?? Date.now;
|
|
18
|
+
const startedAt = now();
|
|
19
|
+
// 1. sync: перезапись / skip-mutated / identical; orphaned — вход шага удалений.
|
|
20
|
+
const { outcomes: syncOutcomes, orphaned } = await syncBaseSet(deps.renderer, root, deps.models ?? 'omit');
|
|
21
|
+
// 2. removals: удаляется только объявленное картой И подтверждённое списком
|
|
22
|
+
// REQ-02 (второго подтверждения нет — ADR-4). Прочий orphaned не трогаем.
|
|
23
|
+
const removedTargets = new Set(map.files.filter((e) => e.category === 'removed').map((e) => mapEntryProjectPath(e)));
|
|
24
|
+
const confirmed = new Set(opts.confirmedRemovals ?? []);
|
|
25
|
+
const removed = [];
|
|
26
|
+
for (const p of orphaned) {
|
|
27
|
+
if (!removedTargets.has(p) || !confirmed.has(p))
|
|
28
|
+
continue;
|
|
29
|
+
await unlink(join(root, p));
|
|
30
|
+
removed.push(p);
|
|
31
|
+
}
|
|
32
|
+
// Контракт T5: removals = подтверждённо отсутствующие ПОСЛЕ шага — удалённые
|
|
33
|
+
// теперь или отсутствовавшие ранее (идемпотентность повтора, NFR-02).
|
|
34
|
+
const removals = [...removedTargets].filter((p) => confirmed.has(p) && !existsSync(join(root, p)));
|
|
35
|
+
// Дрейф без объявления: оставшийся orphaned вне карты — факт для сверки
|
|
36
|
+
// («файл вне карты» → conflict → «требует решения», design §«Сверка»).
|
|
37
|
+
const drift = orphaned
|
|
38
|
+
.filter((p) => !removedTargets.has(p))
|
|
39
|
+
.map((p) => ({
|
|
40
|
+
file: p,
|
|
41
|
+
action: 'conflict',
|
|
42
|
+
reason: 'orphaned after pass — stamped file outside the map, not declared removed (drift without declaration)',
|
|
43
|
+
}));
|
|
44
|
+
// 3. посев — только недостающие лица (mode задаёт шаг) и только шаблоны,
|
|
45
|
+
// объявленные картой с seed:true; deprecated-шаблоны не сеются (REQ-11).
|
|
46
|
+
const seedTemplates = new Set(map.faces.filter((f) => f.seed).map((f) => basename(f.template)));
|
|
47
|
+
const seedFiles = new Map([...deps.files].filter(([file]) => seedTemplates.has(file)));
|
|
48
|
+
const seedOutcomes = await seedBasePlaybooks({ ...deps, files: seedFiles, mode: 'seed-missing-only' });
|
|
49
|
+
// 4. миграция: отказ guard'а (например схема из будущего) — в отчёт как есть,
|
|
50
|
+
// не крах шага; эффекты фаз 1-3 стабильны.
|
|
51
|
+
let schema = { status: 'ok' };
|
|
52
|
+
try {
|
|
53
|
+
schema = { status: await ensureCurrentSchema(root) };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
schema = { status: 'refused', error: err instanceof Error ? err.message : String(err) };
|
|
57
|
+
}
|
|
58
|
+
// 5. сверка: исходы всех фаз → статус каждого пункта карты.
|
|
59
|
+
const verify = verifyAgainstMap(map, {
|
|
60
|
+
syncOutcomes: [...syncOutcomes, ...drift],
|
|
61
|
+
seedOutcomes,
|
|
62
|
+
removals,
|
|
63
|
+
});
|
|
64
|
+
const errors = verify.summary.errors + (schema.status === 'refused' ? 1 : 0);
|
|
65
|
+
const exitKind = errors > 0 ? 'error' : verify.summary.needsDecision > 0 ? 'needs-decision' : 'done';
|
|
66
|
+
return {
|
|
67
|
+
name: basename(root),
|
|
68
|
+
root,
|
|
69
|
+
sync: { outcomes: syncOutcomes, orphaned: orphaned.filter((p) => !removed.includes(p)), removed },
|
|
70
|
+
seed: seedOutcomes,
|
|
71
|
+
schema,
|
|
72
|
+
verify,
|
|
73
|
+
wallMs: Math.max(1, now() - startedAt),
|
|
74
|
+
exitKind,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=project-step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-step.js","sourceRoot":"","sources":["../../../src/app/use-cases/project-step.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface ScanUnregisteredDeps {
|
|
2
|
+
/** Пути из реестра (projects.yaml); сверка по realpath (прецедент T4 dedupeByRealpath), несуществующие пропускаются мягко. */
|
|
3
|
+
registeredPaths: string[];
|
|
4
|
+
/** Корень скана; по умолчанию домашний каталог. */
|
|
5
|
+
root?: string;
|
|
6
|
+
/** Максимальная глубина обхода (уровни каталогов ниже root). */
|
|
7
|
+
maxDepth?: number;
|
|
8
|
+
/** Мягкий бюджет скана, мс: при превышении вернуть найденное к моменту остановки. */
|
|
9
|
+
budgetMs?: number;
|
|
10
|
+
/** Инжект часов (бюджет тестируем без fake timers). */
|
|
11
|
+
now?: () => number;
|
|
12
|
+
}
|
|
13
|
+
export type ScanResult = {
|
|
14
|
+
found: number;
|
|
15
|
+
top: string[];
|
|
16
|
+
hint: string;
|
|
17
|
+
} | null;
|
|
18
|
+
/**
|
|
19
|
+
* Ограниченный read-only скан живых памятей вне реестра (REQ-09):
|
|
20
|
+
* обход root BFS на глубину maxDepth, «живая» = `<dir>/.wolf/memory`.
|
|
21
|
+
* Read-only (readdir/stat/realpath); мутаций и автозаписи в реестр нет.
|
|
22
|
+
* null — ничего не найдено или root недоступен (R09.2: это не ошибка).
|
|
23
|
+
*/
|
|
24
|
+
export declare function scanUnregistered(deps: ScanUnregisteredDeps): Promise<ScanResult>;
|
|
25
|
+
//# sourceMappingURL=scan-unregistered.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-unregistered.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/scan-unregistered.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,oBAAoB;IACnC,8HAA8H;IAC9H,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAK/E;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6DtF"}
|