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
@@ -0,0 +1,102 @@
1
+ import { z } from 'zod';
2
+ export declare const UpdateCategorySchema: z.ZodEnum<{
3
+ deprecated: "deprecated";
4
+ new: "new";
5
+ removed: "removed";
6
+ unchanged: "unchanged";
7
+ changed: "changed";
8
+ }>;
9
+ export type UpdateCategory = z.infer<typeof UpdateCategorySchema>;
10
+ export declare const FileKindSchema: z.ZodEnum<{
11
+ command: "command";
12
+ agent: "agent";
13
+ skill: "skill";
14
+ plugin: "plugin";
15
+ }>;
16
+ export type FileKind = z.infer<typeof FileKindSchema>;
17
+ export declare const FileEntrySchema: z.ZodObject<{
18
+ path: z.ZodString;
19
+ kind: z.ZodEnum<{
20
+ command: "command";
21
+ agent: "agent";
22
+ skill: "skill";
23
+ plugin: "plugin";
24
+ }>;
25
+ category: z.ZodEnum<{
26
+ deprecated: "deprecated";
27
+ new: "new";
28
+ removed: "removed";
29
+ unchanged: "unchanged";
30
+ changed: "changed";
31
+ }>;
32
+ }, z.core.$strip>;
33
+ export type FileEntry = z.infer<typeof FileEntrySchema>;
34
+ export declare const FaceEntrySchema: z.ZodObject<{
35
+ template: z.ZodString;
36
+ owner_skill: z.ZodString;
37
+ category: z.ZodEnum<{
38
+ deprecated: "deprecated";
39
+ new: "new";
40
+ removed: "removed";
41
+ unchanged: "unchanged";
42
+ changed: "changed";
43
+ }>;
44
+ seed: z.ZodBoolean;
45
+ }, z.core.$strip>;
46
+ export type FaceEntry = z.infer<typeof FaceEntrySchema>;
47
+ export declare const UpdateMapSchema: z.ZodObject<{
48
+ version: z.ZodString;
49
+ prev: z.ZodString;
50
+ files: z.ZodArray<z.ZodObject<{
51
+ path: z.ZodString;
52
+ kind: z.ZodEnum<{
53
+ command: "command";
54
+ agent: "agent";
55
+ skill: "skill";
56
+ plugin: "plugin";
57
+ }>;
58
+ category: z.ZodEnum<{
59
+ deprecated: "deprecated";
60
+ new: "new";
61
+ removed: "removed";
62
+ unchanged: "unchanged";
63
+ changed: "changed";
64
+ }>;
65
+ }, z.core.$strip>>;
66
+ faces: z.ZodArray<z.ZodObject<{
67
+ template: z.ZodString;
68
+ owner_skill: z.ZodString;
69
+ category: z.ZodEnum<{
70
+ deprecated: "deprecated";
71
+ new: "new";
72
+ removed: "removed";
73
+ unchanged: "unchanged";
74
+ changed: "changed";
75
+ }>;
76
+ seed: z.ZodBoolean;
77
+ }, z.core.$strip>>;
78
+ agents_md: z.ZodObject<{
79
+ category: z.ZodEnum<{
80
+ deprecated: "deprecated";
81
+ new: "new";
82
+ removed: "removed";
83
+ unchanged: "unchanged";
84
+ changed: "changed";
85
+ }>;
86
+ mode: z.ZodLiteral<"append-block">;
87
+ }, z.core.$strip>;
88
+ schema_migrations: z.ZodArray<z.ZodObject<{
89
+ from: z.ZodNumber;
90
+ to: z.ZodNumber;
91
+ }, z.core.$strip>>;
92
+ outside_v1: z.ZodArray<z.ZodString>;
93
+ }, z.core.$strip>;
94
+ export type UpdateMap = z.infer<typeof UpdateMapSchema>;
95
+ /** Сравнение полных версий X.Y.Z: -1 (a<b) | 0 | 1 (a>b). */
96
+ export declare function compareVersions(a: string, b: string): number;
97
+ /**
98
+ * Читает и валидирует update-map.json из корня пакета. Карта из будущего
99
+ * (version новее CLI) — честный отказ, не молчаливое использование.
100
+ */
101
+ export declare function loadUpdateMap(pkgRoot?: string): UpdateMap;
102
+ //# sourceMappingURL=update-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-map.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/update-map.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,oBAAoB;;;;;;EAAmE,CAAC;AACrG,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,cAAc;;;;;EAAkD,CAAC;AAC9E,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;iBAI1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe;;;;;;;;;;;iBAM1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5D;AAeD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAA6B,GAAG,SAAS,CA4B/E"}
@@ -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":"AAIA,OAAO,EACL,eAAe,EAEf,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;IA8CrF,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;IA8D7D,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,eAAe;IAKvB,6EAA6E;YAC/D,cAAc;IAyB5B,gGAAgG;YAClF,YAAY;IA2C1B,OAAO,CAAC,aAAa;IASrB,+EAA+E;YACjE,aAAa;CAM5B"}
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, writeFile } from 'fs/promises';
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 writeFile(f.target, fresh, 'utf-8');
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 writeFile(f.target, fresh, 'utf-8');
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 writeFile(paths.target, written, 'utf-8');
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 writeFile(paths.target, `${current}${sep}${block}`, 'utf-8');
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 writeFile(paths.target, fresh, 'utf-8');
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 writeFile(paths.target, fresh, 'utf-8');
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 writeFile(f.target, content, 'utf-8');
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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"}
@@ -24,7 +24,10 @@ export declare function listArtifactClaims(deps: ClaimArtifactDeps): ClaimRecord
24
24
  /** Heartbeat держателя (2.18.0 REQ-03): продлевает свежесть claim'а долгой
25
25
  * операции в окне CLAIM_HEARTBEAT_WINDOW_MS; writer — owner из env (не auth).
26
26
  * 2.18.4: identityOverride (CLI-флаги --session/--pid/--claim-token) включает
27
- * строгие проверки владения; без него — legacy-поведение (только writer). */
27
+ * строгие проверки владения.
28
+ * 2.18.5 (AC2): штатный вызов без override проверяет сессию из WOLF_SESSION
29
+ * автоматически; совместимость только по имени — явный legacy-режим
30
+ * (WOLF_CLAIM_HEARTBEAT_LEGACY=1) для внешних интеграций без сессии. */
28
31
  export declare function heartbeatArtifactClaim(deps: ClaimArtifactDeps, artifact: string, identityOverride?: {
29
32
  sessionId?: string | null;
30
33
  pid?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"claim-artifact.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/claim-artifact.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,WAAW,EAGhB,KAAK,eAAe,EACrB,MAAM,qCAAqC,CAAC;AAE7C;;;;;;GAMG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAkBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAM3F;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,MAAM,EAAE,UAAU,GAAG,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,EAAE,CAEzE;AAED;;;6EAG6E;AAC7E,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF,eAAe,CAMjB;AAED;;0CAE0C;AAC1C,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAOlE"}
1
+ {"version":3,"file":"claim-artifact.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/claim-artifact.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,WAAW,EAGhB,KAAK,eAAe,EACrB,MAAM,qCAAqC,CAAC;AAE7C;;;;;;GAMG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAkBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAM3F;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,MAAM,EAAE,UAAU,GAAG,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,EAAE,CAEzE;AAED;;;;;;wEAMwE;AACxE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF,eAAe,CAUjB;AAED;;0CAE0C;AAC1C,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAOlE"}
@@ -31,12 +31,19 @@ export function listArtifactClaims(deps) {
31
31
  /** Heartbeat держателя (2.18.0 REQ-03): продлевает свежесть claim'а долгой
32
32
  * операции в окне CLAIM_HEARTBEAT_WINDOW_MS; writer — owner из env (не auth).
33
33
  * 2.18.4: identityOverride (CLI-флаги --session/--pid/--claim-token) включает
34
- * строгие проверки владения; без него — legacy-поведение (только writer). */
34
+ * строгие проверки владения.
35
+ * 2.18.5 (AC2): штатный вызов без override проверяет сессию из WOLF_SESSION
36
+ * автоматически; совместимость только по имени — явный legacy-режим
37
+ * (WOLF_CLAIM_HEARTBEAT_LEGACY=1) для внешних интеграций без сессии. */
35
38
  export function heartbeatArtifactClaim(deps, artifact, identityOverride) {
39
+ const env = deps.env ?? process.env;
36
40
  const who = identityOf(deps);
41
+ const legacy = env.WOLF_CLAIM_HEARTBEAT_LEGACY === '1' || env.WOLF_CLAIM_HEARTBEAT_LEGACY === 'true';
37
42
  const identity = identityOverride
38
43
  ? { owner: who.owner, ...identityOverride }
39
- : undefined;
44
+ : legacy
45
+ ? undefined
46
+ : { owner: who.owner, sessionId: resolveSessionId(env) };
40
47
  return writeHeartbeat(registryDeps(deps), { artifact, writer: who.owner, ...(identity ? { identity } : {}) });
41
48
  }
42
49
  export function makeClaimGuard(deps) {
@@ -1 +1 @@
1
- {"version":3,"file":"claim-artifact.js","sourceRoot":"","sources":["../../../src/app/use-cases/claim-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,GAMf,MAAM,qCAAqC,CAAC;AAoB7C,SAAS,UAAU,CAAC,IAAuB;IACzC,OAAO;QACL,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QAC3D,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACpD,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAuB;IAC3C,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;QAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAuB,EAAE,QAAgB;IAC5E,OAAO,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;QACtC,QAAQ;QACR,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;QAC1B,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAuB,EACvB,QAAgB,EAChB,UAAmB;IAEnB,OAAO,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACxD,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;6EAG6E;AAC7E,MAAM,UAAU,sBAAsB,CACpC,IAAuB,EACvB,QAAgB,EAChB,gBAAmF;IAEnF,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAkC,gBAAgB;QAC9D,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,gBAAgB,EAAE;QAC3C,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChH,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO;QACL,YAAY,EAAE,CAAC,QAAgB,EAAE,EAAE,CACjC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;KACnF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"claim-artifact.js","sourceRoot":"","sources":["../../../src/app/use-cases/claim-artifact.ts"],"names":[],"mappings":"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"}