mister-wolf 1.0.3 → 1.1.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 (75) hide show
  1. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  2. package/dist/adapters/cli/cli-entry.js +2 -0
  3. package/dist/adapters/cli/cli-entry.js.map +1 -1
  4. package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
  5. package/dist/adapters/cli/commands/memory-init.js +33 -1
  6. package/dist/adapters/cli/commands/memory-init.js.map +1 -1
  7. package/dist/adapters/cli/commands/memory-sync.d.ts +3 -0
  8. package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -0
  9. package/dist/adapters/cli/commands/memory-sync.js +28 -0
  10. package/dist/adapters/cli/commands/memory-sync.js.map +1 -0
  11. package/dist/adapters/render/manifest.d.ts +13 -0
  12. package/dist/adapters/render/manifest.d.ts.map +1 -0
  13. package/dist/adapters/render/manifest.js +14 -0
  14. package/dist/adapters/render/manifest.js.map +1 -0
  15. package/dist/adapters/render/opencode/opencode-renderer.d.ts +22 -0
  16. package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -0
  17. package/dist/adapters/render/opencode/opencode-renderer.js +125 -0
  18. package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -0
  19. package/dist/adapters/render/stamp.d.ts +8 -0
  20. package/dist/adapters/render/stamp.d.ts.map +1 -0
  21. package/dist/adapters/render/stamp.js +23 -0
  22. package/dist/adapters/render/stamp.js.map +1 -0
  23. package/dist/adapters/render/templates-root.d.ts +6 -0
  24. package/dist/adapters/render/templates-root.d.ts.map +1 -0
  25. package/dist/adapters/render/templates-root.js +30 -0
  26. package/dist/adapters/render/templates-root.js.map +1 -0
  27. package/dist/app/use-cases/init-project.d.ts +12 -0
  28. package/dist/app/use-cases/init-project.d.ts.map +1 -1
  29. package/dist/app/use-cases/init-project.js +13 -1
  30. package/dist/app/use-cases/init-project.js.map +1 -1
  31. package/dist/app/use-cases/seed-base-playbooks.d.ts +26 -0
  32. package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -0
  33. package/dist/app/use-cases/seed-base-playbooks.js +43 -0
  34. package/dist/app/use-cases/seed-base-playbooks.js.map +1 -0
  35. package/dist/app/use-cases/sync-base-set.d.ts +12 -0
  36. package/dist/app/use-cases/sync-base-set.d.ts.map +1 -0
  37. package/dist/app/use-cases/sync-base-set.js +10 -0
  38. package/dist/app/use-cases/sync-base-set.js.map +1 -0
  39. package/dist/ports/base-set-renderer.port.d.ts +20 -0
  40. package/dist/ports/base-set-renderer.port.d.ts.map +1 -0
  41. package/dist/ports/base-set-renderer.port.js +2 -0
  42. package/dist/ports/base-set-renderer.port.js.map +1 -0
  43. package/package.json +11 -3
  44. package/templates/base/README.md +1 -0
  45. package/templates/base/agents/executor-lead.md +79 -0
  46. package/templates/base/agents/mr-wolf.md +76 -0
  47. package/templates/base/agents/steward.md +56 -0
  48. package/templates/base/agents/worker-implementer.md +58 -0
  49. package/templates/base/agents/worker-researcher.md +59 -0
  50. package/templates/base/agents/worker-reviewer.md +58 -0
  51. package/templates/base/commands/analyze-doc.md +11 -0
  52. package/templates/base/commands/complain.md +13 -0
  53. package/templates/base/commands/doc-review.md +15 -0
  54. package/templates/base/playbooks/complaint-protocol.md +39 -0
  55. package/templates/base/playbooks/steward-nastavnik.md +38 -0
  56. package/templates/base/playbooks/wolf-review-lenses.md +50 -0
  57. package/templates/base/playbooks/worker-implementer-playbook.md +51 -0
  58. package/templates/base/playbooks/worker-researcher-playbook.md +51 -0
  59. package/templates/base/playbooks/worker-reviewer-playbook.md +54 -0
  60. package/templates/base/skills/finishing-a-development-branch/SKILL.md +213 -0
  61. package/templates/base/skills/requesting-code-review/SKILL.md +123 -0
  62. package/templates/base/skills/test-driven-development/SKILL.md +391 -0
  63. package/templates/base/skills/using-git-worktrees/SKILL.md +178 -0
  64. package/templates/base/skills/using-skills/SKILL.md +128 -0
  65. package/templates/base/skills/verification-before-completion/SKILL.md +157 -0
  66. package/templates/base/skills/wolf-brainstorm/SKILL.md +167 -0
  67. package/templates/base/skills/wolf-debug/SKILL.md +293 -0
  68. package/templates/base/skills/wolf-execute/SKILL.md +96 -0
  69. package/templates/base/skills/wolf-handoff/SKILL.md +101 -0
  70. package/templates/base/skills/wolf-plan/SKILL.md +177 -0
  71. package/templates/base/skills/wolf-review/SKILL.md +61 -0
  72. package/templates/base/skills/wolf-sdd/SKILL.md +239 -0
  73. package/templates/opencode/README.md +1 -0
  74. package/templates/opencode/plugins/wolf-router.ts +104 -0
  75. package/templates/opencode/plugins/wolf-session-start.js +144 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cli-entry.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC,wBAAgB,SAAS,IAAI,OAAO,CA2CnC;AAED,mFAAmF;AACnF,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1D"}
1
+ {"version":3,"file":"cli-entry.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,wBAAgB,SAAS,IAAI,OAAO,CA4CnC;AAED,mFAAmF;AACnF,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1D"}
@@ -4,6 +4,7 @@ import { dirname, join } from 'path';
4
4
  import { Command } from 'commander';
5
5
  import { ensureCurrentSchema } from '../../adapters/fs/schema-guard.js';
6
6
  import { memoryInitCommand as initCommand } from './commands/memory-init.js';
7
+ import { memorySyncCommand as syncCommand } from './commands/memory-sync.js';
7
8
  import { memoryDoctorCommand as doctorCommand } from './commands/memory-doctor.js';
8
9
  import { memoryAddCommand as addCommand } from './commands/memory-add.js';
9
10
  import { memoryListCommand as listCommand } from './commands/memory-list.js';
@@ -49,6 +50,7 @@ export function createCli() {
49
50
  const program = new Command('wolf');
50
51
  program.version(readPackageVersion());
51
52
  program.addCommand(initCommand());
53
+ program.addCommand(syncCommand());
52
54
  program.addCommand(addCommand());
53
55
  program.addCommand(listCommand());
54
56
  program.addCommand(getCommand());
@@ -1 +1 @@
1
- {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../../../src/adapters/cli/cli-entry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-init.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,iBAAiB,IAAI,OAAO,CAyE3C"}
1
+ {"version":3,"file":"memory-init.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,iBAAiB,IAAI,OAAO,CA0G3C"}
@@ -1,5 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import { join } from 'path';
3
+ import { readFileSync, readdirSync, existsSync } from 'fs';
3
4
  import { createCliContainer } from '../../../bootstrap/container.js';
4
5
  import { ProjectsRegistry } from '../../../adapters/fs/projects-registry.js';
5
6
  import { wolfUserConfigDir } from '../../../adapters/fs/user-config.js';
@@ -7,6 +8,10 @@ import { PLATFORM_ADAPTERS, CANONICAL_MCP_COMMAND } from '../../../adapters/plat
7
8
  import { writeSchemaVersionIfAbsent } from '../../../adapters/fs/schema-version.js';
8
9
  import { ensureCurrentSchema } from '../../../adapters/fs/schema-guard.js';
9
10
  import { initProject, recreateConfig } from '../../../app/use-cases/init-project.js';
11
+ import { OpencodeBaseSetRenderer } from '../../../adapters/render/opencode/opencode-renderer.js';
12
+ import { templatesRoot, harnessTemplatesRoot } from '../../../adapters/render/templates-root.js';
13
+ import { seedBasePlaybooks } from '../../../app/use-cases/seed-base-playbooks.js';
14
+ import { addMemoryObject } from '../../../app/use-cases/add-memory-object.js';
10
15
  import { isNpxRun } from '../../../domain/npx.js';
11
16
  import { UserFacingError } from '../../../domain/errors.js';
12
17
  export function memoryInitCommand() {
@@ -36,8 +41,20 @@ export function memoryInitCommand() {
36
41
  throw new UserFacingError(`Unknown platform(s): ${unknown.join(', ')} (known: ${[...known].join(', ')})`);
37
42
  }
38
43
  }
39
- const { initializer, store, log, clock, idGen, scanner, index, lock } = createCliContainer(baseDir);
44
+ const { initializer, store, log, clock, idGen, scanner, index, lock, declarations } = createCliContainer(baseDir);
40
45
  const registry = new ProjectsRegistry(wolfUserConfigDir());
46
+ const tplPlaybooks = join(templatesRoot(), 'playbooks');
47
+ const playbookFiles = new Map();
48
+ if (existsSync(tplPlaybooks)) {
49
+ for (const f of readdirSync(tplPlaybooks)) {
50
+ if (f.endsWith('.md'))
51
+ playbookFiles.set(f, readFileSync(join(tplPlaybooks, f), 'utf-8'));
52
+ }
53
+ }
54
+ // ListFilters поддерживает type (memory-store.port.ts) — фильтр на уровне порта (правка r2)
55
+ const existing = await store.list({ type: 'playbook' });
56
+ const seededOwners = new Set(existing.map((o) => o.owner_skill).filter((x) => Boolean(x)));
57
+ const addFn = (input) => addMemoryObject({ store, log, clock, idGen, index, lock, declarations }, input);
41
58
  const result = await initProject({
42
59
  initializer,
43
60
  registry,
@@ -46,10 +63,25 @@ export function memoryInitCommand() {
46
63
  npx: isNpxRun(),
47
64
  scanDeps: { store, log, clock, idGen, scanner, index, lock },
48
65
  markSchemaCurrent: (dir) => writeSchemaVersionIfAbsent(dir),
66
+ baseSet: {
67
+ render: (dir) => new OpencodeBaseSetRenderer(templatesRoot(), {
68
+ harnessTemplatesRoot: harnessTemplatesRoot('opencode'),
69
+ }).renderBaseSet(dir),
70
+ seed: () => seedBasePlaybooks({
71
+ files: playbookFiles,
72
+ add: async (i) => {
73
+ await addFn(i);
74
+ return {};
75
+ },
76
+ isSeeded: async (owner) => seededOwners.has(owner),
77
+ }),
78
+ },
49
79
  }, baseDir, { platformIds });
50
80
  console.log('# wolf init');
51
81
  console.log(`- memory skeleton: ensured (${join(baseDir, '.wolf')})`);
52
82
  console.log(`- scan: ${result.documentCount} document(s) registered`);
83
+ for (const o of result.baseSetOutcomes)
84
+ console.log(`- base set: ${o.file} ${o.action}${o.reason ? ` — ${o.reason}` : ''}`);
53
85
  for (const outcome of result.platformOutcomes) {
54
86
  const label = outcome.platform === 'none' || outcome.platform === 'npx'
55
87
  ? 'platform configs'
@@ -1 +1 @@
1
- {"version":3,"file":"memory-init.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-init.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function memorySyncCommand(): Command;
3
+ //# sourceMappingURL=memory-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-sync.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,iBAAiB,IAAI,OAAO,CAiB3C"}
@@ -0,0 +1,28 @@
1
+ // src/adapters/cli/commands/memory-sync.ts
2
+ import { Command } from 'commander';
3
+ import { OpencodeBaseSetRenderer } from '../../../adapters/render/opencode/opencode-renderer.js';
4
+ import { templatesRoot, harnessTemplatesRoot } from '../../../adapters/render/templates-root.js';
5
+ import { syncBaseSet } from '../../../app/use-cases/sync-base-set.js';
6
+ import { isNpxRun } from '../../../domain/npx.js';
7
+ import { UserFacingError } from '../../../domain/errors.js';
8
+ export function memorySyncCommand() {
9
+ return new Command('sync')
10
+ .description('Re-render the wolf base set (stamped files only; memory untouched)')
11
+ .action(async () => {
12
+ if (isNpxRun()) {
13
+ throw new UserFacingError('npx try-out: sync не пишет набор. Установи пакет: npm i -g mister-wolf');
14
+ }
15
+ const baseDir = process.cwd();
16
+ const renderer = new OpencodeBaseSetRenderer(templatesRoot(), {
17
+ harnessTemplatesRoot: harnessTemplatesRoot('opencode'),
18
+ });
19
+ const { outcomes, orphaned } = await syncBaseSet(renderer, baseDir);
20
+ console.log('# wolf sync');
21
+ for (const o of outcomes)
22
+ console.log(`- ${o.file}: ${o.action}${o.reason ? ` — ${o.reason}` : ''}`);
23
+ for (const f of orphaned)
24
+ console.log(`- orphaned (шаблон исчез — можешь удалить): ${f}`);
25
+ console.log("Память (.wolf/) не тронута: мутации playbook'ов — зона Стюарда (D4).");
26
+ });
27
+ }
28
+ //# sourceMappingURL=memory-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-sync.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-sync.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,QAAQ,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CAAC,wEAAwE,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAAC,aAAa,EAAE,EAAE;YAC5D,oBAAoB,EAAE,oBAAoB,CAAC,UAAU,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrG,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface HarnessManifest {
2
+ id: string;
3
+ tools: Record<string, string>;
4
+ /** Каталог нейтральных шаблонов → каталог целевого проекта. Плагины — вне (harness-specific). */
5
+ layout: {
6
+ agents: string;
7
+ skills: string;
8
+ commands: string;
9
+ };
10
+ }
11
+ export declare const OPENCODE_MANIFEST: HarnessManifest;
12
+ export declare function substitute(text: string, manifest: HarnessManifest): string;
13
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/adapters/render/manifest.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,iGAAiG;IACjG,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAED,eAAO,MAAM,iBAAiB,EAAE,eAI/B,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAM1E"}
@@ -0,0 +1,14 @@
1
+ export const OPENCODE_MANIFEST = {
2
+ id: 'opencode',
3
+ tools: { task: 'task', skill: 'skill', todowrite: 'todowrite' },
4
+ layout: { agents: '.opencode/agents', skills: '.opencode/skills', commands: '.opencode/command' },
5
+ };
6
+ export function substitute(text, manifest) {
7
+ return text.replace(/\{\{tool\.(\w+)\}\}/g, (_m, name) => {
8
+ const v = manifest.tools[name];
9
+ if (v === undefined)
10
+ throw new Error(`Unknown tool placeholder: {{tool.${name}}}`);
11
+ return v;
12
+ });
13
+ }
14
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/adapters/render/manifest.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE;IAC/D,MAAM,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE;CAClG,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAAyB;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,IAAY,EAAE,EAAE;QAC/D,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,IAAI,CAAC,CAAC;QACnF,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { BaseSetRenderer, BakeResolver, RenderOutcome } from '../../../ports/base-set-renderer.port.js';
2
+ export declare class OpencodeBaseSetRenderer implements BaseSetRenderer {
3
+ private readonly baseTemplatesRoot;
4
+ private readonly opts;
5
+ id: string;
6
+ constructor(baseTemplatesRoot: string, opts?: {
7
+ harnessTemplatesRoot?: string;
8
+ setVersion?: string;
9
+ });
10
+ private get setVersion();
11
+ /** NC1: harness-шаблоны резолвятся от СВОЕГО корня, не от baseTemplatesRoot. */
12
+ private templateFiles;
13
+ private walkAbs;
14
+ renderBaseSet(baseDir: string, bake?: BakeResolver): Promise<RenderOutcome[]>;
15
+ syncBaseSet(baseDir: string): Promise<{
16
+ outcomes: RenderOutcome[];
17
+ orphaned: string[];
18
+ }>;
19
+ private renderContent;
20
+ private writeRendered;
21
+ }
22
+ //# sourceMappingURL=opencode-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-renderer.d.ts","sourceRoot":"","sources":["../../../../src/adapters/render/opencode/opencode-renderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAmBxG,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,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAa7E,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA4C9F,OAAO,CAAC,aAAa;YASP,aAAa;CAI5B"}
@@ -0,0 +1,125 @@
1
+ // src/adapters/render/opencode/opencode-renderer.ts
2
+ import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
3
+ import { basename, join, relative } from 'path';
4
+ import { mkdir, writeFile } from 'fs/promises';
5
+ import { OPENCODE_MANIFEST, substitute } from '../manifest.js';
6
+ import { insertStamp, parseStamp } from '../stamp.js';
7
+ import { wolfVersion } from '../templates-root.js';
8
+ const NEUTRAL_DIRS = ['agents', 'skills', 'commands'];
9
+ const LAYOUT = {
10
+ agents: '.opencode/agents',
11
+ skills: '.opencode/skills',
12
+ commands: '.opencode/command',
13
+ };
14
+ export class OpencodeBaseSetRenderer {
15
+ baseTemplatesRoot;
16
+ opts;
17
+ id = 'opencode';
18
+ constructor(baseTemplatesRoot, opts = {}) {
19
+ this.baseTemplatesRoot = baseTemplatesRoot;
20
+ this.opts = opts;
21
+ }
22
+ get setVersion() {
23
+ return this.opts.setVersion ?? wolfVersion();
24
+ }
25
+ /** NC1: harness-шаблоны резолвятся от СВОЕГО корня, не от baseTemplatesRoot. */
26
+ *templateFiles(baseDir) {
27
+ for (const dir of NEUTRAL_DIRS) {
28
+ const root = join(this.baseTemplatesRoot, dir);
29
+ for (const p of this.walkAbs(root)) {
30
+ yield { tplPath: p, target: join(baseDir, LAYOUT[dir], relative(root, p)), baseName: basename(p) };
31
+ }
32
+ }
33
+ const pluginsRoot = this.opts.harnessTemplatesRoot ? join(this.opts.harnessTemplatesRoot, 'plugins') : null;
34
+ if (pluginsRoot && existsSync(pluginsRoot)) {
35
+ for (const p of this.walkAbs(pluginsRoot)) {
36
+ yield {
37
+ tplPath: p,
38
+ target: join(baseDir, '.opencode/plugins', relative(pluginsRoot, p)),
39
+ baseName: basename(p),
40
+ };
41
+ }
42
+ }
43
+ }
44
+ *walkAbs(dir) {
45
+ if (!existsSync(dir))
46
+ return;
47
+ for (const e of readdirSync(dir)) {
48
+ const p = join(dir, e);
49
+ if (statSync(p).isDirectory())
50
+ yield* this.walkAbs(p);
51
+ else
52
+ yield p;
53
+ }
54
+ }
55
+ async renderBaseSet(baseDir, bake) {
56
+ const outcomes = [];
57
+ for (const f of this.templateFiles(baseDir)) {
58
+ if (existsSync(f.target)) {
59
+ outcomes.push({ file: f.baseName, action: 'skipped', reason: 'exists (wx-политика)' });
60
+ continue;
61
+ }
62
+ await this.writeRendered(f, bake);
63
+ outcomes.push({ file: f.baseName, action: 'created' });
64
+ }
65
+ return outcomes;
66
+ }
67
+ async syncBaseSet(baseDir) {
68
+ const outcomes = [];
69
+ const seen = new Set();
70
+ for (const f of this.templateFiles(baseDir)) {
71
+ seen.add(f.target);
72
+ if (!existsSync(f.target)) {
73
+ await this.writeRendered(f);
74
+ outcomes.push({ file: f.baseName, action: 'created' });
75
+ continue;
76
+ }
77
+ const current = readFileSync(f.target, 'utf-8');
78
+ if (parseStamp(current) === null) {
79
+ outcomes.push({
80
+ file: f.baseName,
81
+ action: 'conflict',
82
+ reason: 'unstamped на месте шаблонного — владелец решает: переименовать / удалить / принять текущий',
83
+ });
84
+ continue;
85
+ }
86
+ const fresh = this.renderContent(f);
87
+ if (fresh === current) {
88
+ outcomes.push({ file: f.baseName, action: 'skipped', reason: 'content identical (M2)' });
89
+ continue;
90
+ }
91
+ await mkdir(join(f.target, '..'), { recursive: true });
92
+ await writeFile(f.target, fresh, 'utf-8');
93
+ outcomes.push({ file: f.baseName, action: 'updated' });
94
+ }
95
+ const orphaned = [];
96
+ const scanRoots = [
97
+ join(baseDir, '.opencode/agents'),
98
+ join(baseDir, '.opencode/skills'),
99
+ join(baseDir, '.opencode/command'),
100
+ join(baseDir, '.opencode/plugins'),
101
+ ];
102
+ for (const root of scanRoots) {
103
+ if (!existsSync(root))
104
+ continue;
105
+ for (const f of this.walkAbs(root)) {
106
+ if (!seen.has(f) && parseStamp(readFileSync(f, 'utf-8')) !== null)
107
+ orphaned.push(relative(baseDir, f));
108
+ }
109
+ }
110
+ return { outcomes, orphaned };
111
+ }
112
+ renderContent(f, bake) {
113
+ let rendered = substitute(readFileSync(f.tplPath, 'utf-8'), OPENCODE_MANIFEST);
114
+ const body = bake?.(f.baseName);
115
+ if (body) {
116
+ rendered += `\n<!-- wolf:face baked (bake-in, §4) -->\n${body}\n`;
117
+ }
118
+ return insertStamp(rendered, { base: f.baseName, set: this.setVersion }, f.baseName);
119
+ }
120
+ async writeRendered(f, bake) {
121
+ await mkdir(join(f.target, '..'), { recursive: true });
122
+ await writeFile(f.target, this.renderContent(f, bake), 'utf-8');
123
+ }
124
+ }
125
+ //# sourceMappingURL=opencode-renderer.js.map
@@ -0,0 +1 @@
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,8 @@
1
+ export interface Stamp {
2
+ base: string;
3
+ set: string;
4
+ }
5
+ export declare function renderStamp(stamp: Stamp, fileName: string): string;
6
+ export declare function parseStamp(text: string): Stamp | null;
7
+ export declare function insertStamp(source: string, stamp: Stamp, fileName: string): string;
8
+ //# sourceMappingURL=stamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stamp.d.ts","sourceRoot":"","sources":["../../../src/adapters/render/stamp.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAGrD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWlF"}
@@ -0,0 +1,23 @@
1
+ export function renderStamp(stamp, fileName) {
2
+ if (/(\.ts|\.js|\.mjs|\.cjs)$/.test(fileName)) {
3
+ return `// wolf:rendered base=${stamp.base} set=${stamp.set}`;
4
+ }
5
+ return `<!-- wolf:rendered base=${stamp.base} set=${stamp.set} -->`;
6
+ }
7
+ export function parseStamp(text) {
8
+ const m = text.match(/(?:<!--|\/\/)\s*wolf:rendered\s+base=(\S+)\s+set=(\S+)(?:\s*-->)?/);
9
+ return m ? { base: m[1], set: m[2] } : null;
10
+ }
11
+ export function insertStamp(source, stamp, fileName) {
12
+ const line = renderStamp(stamp, fileName);
13
+ const stripped = source.replace(/(?:<!--|\/\/)\s*wolf:rendered[^\n]*(?:\s*-->)?\n?/g, '');
14
+ if (/^---\n/.test(stripped)) {
15
+ const end = stripped.indexOf('\n---', 4);
16
+ if (end !== -1) {
17
+ const after = stripped.indexOf('\n', end + 1);
18
+ return `${stripped.slice(0, after + 1)}${line}\n${stripped.slice(after + 1)}`;
19
+ }
20
+ }
21
+ return `${line}\n${stripped}`;
22
+ }
23
+ //# sourceMappingURL=stamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stamp.js","sourceRoot":"","sources":["../../../src/adapters/render/stamp.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,QAAgB;IACxD,IAAI,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,yBAAyB,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,2BAA2B,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,GAAG,MAAM,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAC1F,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,KAAY,EAAE,QAAgB;IACxE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,oDAAoD,EAAE,EAAE,CAAC,CAAC;IAC1F,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAC9C,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAChF,CAAC;IACH,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,QAAQ,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function packageRoot(): string;
2
+ export declare function templatesRoot(): string;
3
+ /** Harness-специфичные шаблоны (плагины) — вне нейтрального base (M6, спека §7.3). */
4
+ export declare function harnessTemplatesRoot(harnessId: string): string;
5
+ export declare function wolfVersion(): string;
6
+ //# sourceMappingURL=templates-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-root.d.ts","sourceRoot":"","sources":["../../../src/adapters/render/templates-root.ts"],"names":[],"mappings":"AAOA,wBAAgB,WAAW,IAAI,MAAM,CAWpC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,WAAW,IAAI,MAAM,CAGpC"}
@@ -0,0 +1,30 @@
1
+ // src/adapters/render/templates-root.ts
2
+ import { readFileSync, existsSync } from 'fs';
3
+ import { dirname, join } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ let cachedRoot = null;
6
+ export function packageRoot() {
7
+ if (cachedRoot)
8
+ return cachedRoot;
9
+ let dir = dirname(fileURLToPath(import.meta.url));
10
+ for (let i = 0; i < 8; i++) {
11
+ if (existsSync(join(dir, 'package.json'))) {
12
+ cachedRoot = dir;
13
+ return dir;
14
+ }
15
+ dir = dirname(dir);
16
+ }
17
+ throw new Error(`package.json not found upward from ${fileURLToPath(import.meta.url)}`);
18
+ }
19
+ export function templatesRoot() {
20
+ return join(packageRoot(), 'templates', 'base');
21
+ }
22
+ /** Harness-специфичные шаблоны (плагины) — вне нейтрального base (M6, спека §7.3). */
23
+ export function harnessTemplatesRoot(harnessId) {
24
+ return join(packageRoot(), 'templates', harnessId);
25
+ }
26
+ export function wolfVersion() {
27
+ const pkg = JSON.parse(readFileSync(join(packageRoot(), 'package.json'), 'utf-8'));
28
+ return pkg.version;
29
+ }
30
+ //# sourceMappingURL=templates-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-root.js","sourceRoot":"","sources":["../../../src/adapters/render/templates-root.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,MAAM,UAAU,WAAW;IACzB,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC1C,UAAU,GAAG,GAAG,CAAC;YACjB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAC;IAC1G,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC"}
@@ -1,10 +1,20 @@
1
1
  import { ProjectInitializer } from '../../ports/project-initializer.port.js';
2
2
  import { PlatformAdapter, McpCommand } from '../../ports/platform-adapter.port.js';
3
3
  import { scanProject } from './scan-project.js';
4
+ import { RenderAction } from '../../ports/base-set-renderer.port.js';
4
5
  /** Минимальный контракт реестра для init (структурно совместим с ProjectsRegistry). */
5
6
  export interface ProjectRegistry {
6
7
  register(path: string, schemaVersion: number): Promise<void>;
7
8
  }
9
+ export interface BaseSetOutcome {
10
+ file: string;
11
+ action: RenderAction;
12
+ reason?: string;
13
+ }
14
+ export interface BaseSetDeps {
15
+ render: (baseDir: string) => Promise<BaseSetOutcome[]>;
16
+ seed: (baseDir: string) => Promise<BaseSetOutcome[]>;
17
+ }
8
18
  export interface InitProjectDeps {
9
19
  initializer: ProjectInitializer;
10
20
  registry: ProjectRegistry;
@@ -15,6 +25,7 @@ export interface InitProjectDeps {
15
25
  scanDeps: Parameters<typeof scanProject>[0];
16
26
  /** Проставить маркер версии схемы (writeSchemaVersionIfAbsent). */
17
27
  markSchemaCurrent: (baseDir: string) => Promise<void>;
28
+ baseSet?: BaseSetDeps;
18
29
  }
19
30
  export interface PlatformInitOutcome {
20
31
  platform: string;
@@ -25,6 +36,7 @@ export interface InitProjectResult {
25
36
  npx: boolean;
26
37
  documentCount: number;
27
38
  platformOutcomes: PlatformInitOutcome[];
39
+ baseSetOutcomes: BaseSetOutcome[];
28
40
  }
29
41
  export declare function looksLikeProjectRoot(dir: string): boolean;
30
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,sFAAsF;IACtF,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,mEAAmE;IACnE,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,OAAO,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAiD5B;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnE"}
1
+ {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,sFAAsF;IACtF,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,mEAAmE;IACnE,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,OAAO,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;IACxC,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACpC,OAAO,CAAC,iBAAiB,CAAC,CA6D5B;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnE"}
@@ -24,6 +24,8 @@ export async function initProject(deps, baseDir, opts = {}) {
24
24
  await deps.initializer.initialize(baseDir);
25
25
  await deps.markSchemaCurrent(baseDir);
26
26
  const scan = await scanProject(deps.scanDeps, baseDir);
27
+ // Платформы детектируем ДО рендера базового набора: рендер создаёт .opencode/,
28
+ // и детект после него принял бы свежесозданный каталог за маркер платформы (T14).
27
29
  const platformOutcomes = [];
28
30
  if (deps.npx) {
29
31
  // try-out: память создаём, конфиги — никогда (спека §3, npx-путь)
@@ -62,8 +64,18 @@ export async function initProject(deps, baseDir, opts = {}) {
62
64
  }
63
65
  }
64
66
  }
67
+ const baseSetOutcomes = [];
68
+ if (deps.baseSet) {
69
+ if (deps.npx) {
70
+ baseSetOutcomes.push({ file: '(base set)', action: 'skipped', reason: 'npx try-out не пишет набор (спека §7)' });
71
+ }
72
+ else {
73
+ baseSetOutcomes.push(...(await deps.baseSet.render(baseDir)));
74
+ baseSetOutcomes.push(...(await deps.baseSet.seed(baseDir)));
75
+ }
76
+ }
65
77
  await deps.registry.register(baseDir, CURRENT_SCHEMA_VERSION);
66
- return { npx: deps.npx, documentCount: scan.documents.length, platformOutcomes };
78
+ return { npx: deps.npx, documentCount: scan.documents.length, platformOutcomes, baseSetOutcomes };
67
79
  }
68
80
  /**
69
81
  * §6: повреждённый .wolf → неинтерактивное восстановление:
@@ -1 +1 @@
1
- {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface SeedOutcome {
2
+ file: string;
3
+ action: 'created' | 'skipped';
4
+ reason?: string;
5
+ }
6
+ export type SeedAddFn = (input: {
7
+ type: 'playbook';
8
+ title: string;
9
+ body: string;
10
+ createdBy: string;
11
+ tags: string[];
12
+ extra: {
13
+ owner_skill: string;
14
+ version: string;
15
+ steps: string[];
16
+ };
17
+ }) => Promise<unknown>;
18
+ export interface SeedDeps {
19
+ files: Map<string, string>;
20
+ add: SeedAddFn;
21
+ /** Опциональный предикат «этот owner_skill уже посеян» (по умолчанию — нет, т.к. add сам валидирует). */
22
+ isSeeded?: (ownerSkill: string) => Promise<boolean>;
23
+ }
24
+ /** Посев (спека §7): скип по owner_skill (MAJ-3/C2), не по пересечению тегов. */
25
+ export declare function seedBasePlaybooks(deps: SeedDeps): Promise<SeedOutcome[]>;
26
+ //# sourceMappingURL=seed-base-playbooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-base-playbooks.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/seed-base-playbooks.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAClE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvB,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,GAAG,EAAE,SAAS,CAAC;IACf,yGAAyG;IACzG,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAaD,iFAAiF;AACjF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA4B9E"}