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.
- package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
- package/dist/adapters/cli/cli-entry.js +2 -0
- package/dist/adapters/cli/cli-entry.js.map +1 -1
- package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-init.js +33 -1
- package/dist/adapters/cli/commands/memory-init.js.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.d.ts +3 -0
- package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -0
- package/dist/adapters/cli/commands/memory-sync.js +28 -0
- package/dist/adapters/cli/commands/memory-sync.js.map +1 -0
- package/dist/adapters/render/manifest.d.ts +13 -0
- package/dist/adapters/render/manifest.d.ts.map +1 -0
- package/dist/adapters/render/manifest.js +14 -0
- package/dist/adapters/render/manifest.js.map +1 -0
- package/dist/adapters/render/opencode/opencode-renderer.d.ts +22 -0
- package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -0
- package/dist/adapters/render/opencode/opencode-renderer.js +125 -0
- package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -0
- package/dist/adapters/render/stamp.d.ts +8 -0
- package/dist/adapters/render/stamp.d.ts.map +1 -0
- package/dist/adapters/render/stamp.js +23 -0
- package/dist/adapters/render/stamp.js.map +1 -0
- package/dist/adapters/render/templates-root.d.ts +6 -0
- package/dist/adapters/render/templates-root.d.ts.map +1 -0
- package/dist/adapters/render/templates-root.js +30 -0
- package/dist/adapters/render/templates-root.js.map +1 -0
- package/dist/app/use-cases/init-project.d.ts +12 -0
- package/dist/app/use-cases/init-project.d.ts.map +1 -1
- package/dist/app/use-cases/init-project.js +13 -1
- package/dist/app/use-cases/init-project.js.map +1 -1
- package/dist/app/use-cases/seed-base-playbooks.d.ts +26 -0
- package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -0
- package/dist/app/use-cases/seed-base-playbooks.js +43 -0
- package/dist/app/use-cases/seed-base-playbooks.js.map +1 -0
- package/dist/app/use-cases/sync-base-set.d.ts +12 -0
- package/dist/app/use-cases/sync-base-set.d.ts.map +1 -0
- package/dist/app/use-cases/sync-base-set.js +10 -0
- package/dist/app/use-cases/sync-base-set.js.map +1 -0
- package/dist/ports/base-set-renderer.port.d.ts +20 -0
- package/dist/ports/base-set-renderer.port.d.ts.map +1 -0
- package/dist/ports/base-set-renderer.port.js +2 -0
- package/dist/ports/base-set-renderer.port.js.map +1 -0
- package/package.json +11 -3
- package/templates/base/README.md +1 -0
- package/templates/base/agents/executor-lead.md +79 -0
- package/templates/base/agents/mr-wolf.md +76 -0
- package/templates/base/agents/steward.md +56 -0
- package/templates/base/agents/worker-implementer.md +58 -0
- package/templates/base/agents/worker-researcher.md +59 -0
- package/templates/base/agents/worker-reviewer.md +58 -0
- package/templates/base/commands/analyze-doc.md +11 -0
- package/templates/base/commands/complain.md +13 -0
- package/templates/base/commands/doc-review.md +15 -0
- package/templates/base/playbooks/complaint-protocol.md +39 -0
- package/templates/base/playbooks/steward-nastavnik.md +38 -0
- package/templates/base/playbooks/wolf-review-lenses.md +50 -0
- package/templates/base/playbooks/worker-implementer-playbook.md +51 -0
- package/templates/base/playbooks/worker-researcher-playbook.md +51 -0
- package/templates/base/playbooks/worker-reviewer-playbook.md +54 -0
- package/templates/base/skills/finishing-a-development-branch/SKILL.md +213 -0
- package/templates/base/skills/requesting-code-review/SKILL.md +123 -0
- package/templates/base/skills/test-driven-development/SKILL.md +391 -0
- package/templates/base/skills/using-git-worktrees/SKILL.md +178 -0
- package/templates/base/skills/using-skills/SKILL.md +128 -0
- package/templates/base/skills/verification-before-completion/SKILL.md +157 -0
- package/templates/base/skills/wolf-brainstorm/SKILL.md +167 -0
- package/templates/base/skills/wolf-debug/SKILL.md +293 -0
- package/templates/base/skills/wolf-execute/SKILL.md +96 -0
- package/templates/base/skills/wolf-handoff/SKILL.md +101 -0
- package/templates/base/skills/wolf-plan/SKILL.md +177 -0
- package/templates/base/skills/wolf-review/SKILL.md +61 -0
- package/templates/base/skills/wolf-sdd/SKILL.md +239 -0
- package/templates/opencode/README.md +1 -0
- package/templates/opencode/plugins/wolf-router.ts +104 -0
- 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;
|
|
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;
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACrF,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,2EAA2E,CAAC;SACxF,MAAM,CAAC,kBAAkB,EAAE,qFAAqF,CAAC;SACjH,MAAM,CAAC,YAAY,EAAE,qEAAqE,EAAE,KAAK,CAAC;SAClG,MAAM,CAAC,KAAK,EAAE,OAAkD,EAAE,EAAE;QACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9B,oFAAoF;YACpF,0FAA0F;YAC1F,gFAAgF;YAChF,kFAAkF;YAClF,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,WAAiC,CAAC;QACtC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,WAAW,GAAG,OAAO,CAAC,QAAQ;iBAC3B,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,eAAe,CAAC,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;
|
|
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 @@
|
|
|
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;
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAA8B,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
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"}
|