mister-wolf 2.14.0 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/README.ru.md +2 -0
- package/dist/adapters/cli/commands/memory-doctor.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-doctor.js +32 -1
- package/dist/adapters/cli/commands/memory-doctor.js.map +1 -1
- package/dist/adapters/cli/commands/memory-scaffold.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-scaffold.js +15 -0
- package/dist/adapters/cli/commands/memory-scaffold.js.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.js +8 -0
- package/dist/adapters/cli/commands/memory-sync.js.map +1 -1
- package/dist/adapters/fs/artifact-fs.d.ts +4 -0
- package/dist/adapters/fs/artifact-fs.d.ts.map +1 -0
- package/dist/adapters/fs/artifact-fs.js +29 -0
- package/dist/adapters/fs/artifact-fs.js.map +1 -0
- package/dist/adapters/platforms/opencode-adapter.d.ts +8 -1
- package/dist/adapters/platforms/opencode-adapter.d.ts.map +1 -1
- package/dist/adapters/platforms/opencode-adapter.js +33 -0
- package/dist/adapters/platforms/opencode-adapter.js.map +1 -1
- package/dist/app/use-cases/artifact-front-matter.d.ts +5 -0
- package/dist/app/use-cases/artifact-front-matter.d.ts.map +1 -0
- package/dist/app/use-cases/artifact-front-matter.js +16 -0
- package/dist/app/use-cases/artifact-front-matter.js.map +1 -0
- package/dist/app/use-cases/init-project.d.ts +3 -1
- package/dist/app/use-cases/init-project.d.ts.map +1 -1
- package/dist/app/use-cases/init-project.js +36 -16
- package/dist/app/use-cases/init-project.js.map +1 -1
- package/dist/app/use-cases/lint-artifacts.d.ts +18 -0
- package/dist/app/use-cases/lint-artifacts.d.ts.map +1 -0
- package/dist/app/use-cases/lint-artifacts.js +249 -0
- package/dist/app/use-cases/lint-artifacts.js.map +1 -0
- package/dist/app/use-cases/scaffold-agent.d.ts +1 -1
- package/dist/app/use-cases/scaffold-agent.d.ts.map +1 -1
- package/dist/app/use-cases/scaffold-agent.js +1 -1
- package/dist/app/use-cases/scaffold-agent.js.map +1 -1
- package/dist/app/use-cases/scaffold-artifact.d.ts +22 -0
- package/dist/app/use-cases/scaffold-artifact.d.ts.map +1 -0
- package/dist/app/use-cases/scaffold-artifact.js +153 -0
- package/dist/app/use-cases/scaffold-artifact.js.map +1 -0
- package/dist/app/use-cases/sync-artifact-index.d.ts +20 -0
- package/dist/app/use-cases/sync-artifact-index.d.ts.map +1 -0
- package/dist/app/use-cases/sync-artifact-index.js +68 -0
- package/dist/app/use-cases/sync-artifact-index.js.map +1 -0
- package/dist/domain/memory-types.d.ts +12 -0
- package/dist/domain/memory-types.d.ts.map +1 -1
- package/dist/domain/memory-types.js +4 -0
- package/dist/domain/memory-types.js.map +1 -1
- package/dist/domain/schemas/relation-schema.d.ts +1 -1
- package/dist/ports/platform-adapter.port.d.ts +15 -0
- package/dist/ports/platform-adapter.port.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/.wolf/router.log +1 -0
- package/templates/base/skills/finishing-a-development-branch/SKILL.md +32 -13
- package/templates/base/skills/receiving-code-review/SKILL.md +39 -0
- package/templates/base/skills/test-driven-development/SKILL.md +59 -37
- package/templates/base/skills/using-git-worktrees/SKILL.md +25 -15
- package/templates/base/skills/verification-before-completion/SKILL.md +39 -25
- package/templates/base/skills/wolf-brainstorm/SKILL.md +51 -36
- package/templates/base/skills/wolf-design/SKILL.md +45 -0
- package/templates/base/skills/wolf-execute/SKILL.md +30 -13
- package/templates/base/skills/wolf-plan/SKILL.md +38 -21
- package/templates/base/skills/wolf-review/SKILL.md +33 -14
- package/templates/base/skills/wolf-sdd/SKILL.md +38 -16
- package/templates/base/skills/wolf-skill-intake/SKILL.md +66 -0
- package/templates/base/skills/wolf-testplan/SKILL.md +37 -0
- package/templates/base/skills/writing-skills/SKILL.md +40 -0
- package/templates/opencode/plugins/wolf-router.ts +110 -52
- package/templates/opencode/plugins/wolf-session-start.js +88 -40
package/README.md
CHANGED
|
@@ -200,6 +200,8 @@ Mutation attribution: every memory object has an author. Priority: the `--create
|
|
|
200
200
|
- [Architecture (RU)](docs/guide/architecture.md) — how the system is built
|
|
201
201
|
- [Documentation index (RU)](docs/README.md)
|
|
202
202
|
|
|
203
|
+
Feature documentation lives in `docs/dev/` as an artifact pipeline (requirements → design → plan → test-plan): `wolf scaffold artifact` creates the feature folder, `wolf sync` maintains INDEX.md, and `wolf doctor` lints the documents. External skills are onboarded through skill intake: search → review → owner gate → `npx skills add` → registration in Wolf memory.
|
|
204
|
+
|
|
203
205
|
## Development
|
|
204
206
|
|
|
205
207
|
TypeScript (strict, ESM), Node 22, vitest. Verification: `npm run check` (format + lint + test + build); e2e suite: `npm run e2e`. Architecture: ports & adapters — `src/domain` · `src/app/use-cases` · `src/adapters` · `src/ports`.
|
package/README.ru.md
CHANGED
|
@@ -217,6 +217,8 @@ wolf learn status # здоровье сигнального
|
|
|
217
217
|
- [Architecture](docs/guide/architecture.md) — устройство системы
|
|
218
218
|
- [Индекс документации](docs/README.md)
|
|
219
219
|
|
|
220
|
+
Документация фич живёт в `docs/dev/` как конвейер артефактов (requirements → design → plan → test-plan): `wolf scaffold artifact` создаёт папку фичи, `wolf sync` ведёт INDEX.md, `wolf doctor` линтит документы. Внешние скиллы подключаются через skill intake: поиск → ревью → гейт владельца → `npx skills add` → регистрация в памяти Wolf.
|
|
221
|
+
|
|
220
222
|
## Разработка
|
|
221
223
|
|
|
222
224
|
TypeScript (strict, ESM), Node 22, vitest. Верификация: `npm run check` (format + lint + test + build); e2e-набор: `npm run e2e`. Архитектура — ports & adapters: `src/domain` · `src/app/use-cases` · `src/adapters` · `src/ports`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-doctor.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-doctor.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC,wBAAgB,mBAAmB,IAAI,OAAO,CAoE7C"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { join, sep } from 'path';
|
|
3
|
-
import { existsSync, realpathSync } from 'fs';
|
|
3
|
+
import { existsSync, readdirSync, realpathSync } from 'fs';
|
|
4
4
|
import { readFile } from 'fs/promises';
|
|
5
5
|
import { tmpdir } from 'os';
|
|
6
6
|
import { runDoctor } from '../../../app/use-cases/doctor.js';
|
|
7
|
+
import { runArtifactLint } from '../../../app/use-cases/lint-artifacts.js';
|
|
7
8
|
import { ProjectsRegistry } from '../../../adapters/fs/projects-registry.js';
|
|
8
9
|
import { wolfUserConfigDir } from '../../../adapters/fs/user-config.js';
|
|
9
10
|
import { readSchemaVersion } from '../../../adapters/fs/schema-version.js';
|
|
11
|
+
import { artifactFs } from '../../../adapters/fs/artifact-fs.js';
|
|
12
|
+
import { templatesRoot } from '../../../adapters/render/templates-root.js';
|
|
10
13
|
import { PLATFORM_ADAPTERS } from '../../../adapters/platforms/index.js';
|
|
14
|
+
import { createCliContainer } from '../../../bootstrap/container.js';
|
|
11
15
|
import { safeCwd } from '../cli-entry.js';
|
|
12
16
|
/**
|
|
13
17
|
* Песочницы (спека 2.14 §8.2): записи под os.tmpdir() чистим с пометкой sandbox.
|
|
@@ -85,6 +89,33 @@ export function memoryDoctorCommand() {
|
|
|
85
89
|
console.log();
|
|
86
90
|
console.log(`Pruned ${report.pruned.length} dead entr${report.pruned.length === 1 ? 'y' : 'ies'}.`);
|
|
87
91
|
}
|
|
92
|
+
const cwd = safeCwd();
|
|
93
|
+
if (existsSync(join(cwd, 'docs', 'dev'))) {
|
|
94
|
+
const { store } = createCliContainer(cwd);
|
|
95
|
+
const toolOwners = new Set();
|
|
96
|
+
for (const t of await store.list({ type: 'tool' })) {
|
|
97
|
+
// archived-тулы не гасят призрака: гасят только живые регистрации (контракт e2e intake)
|
|
98
|
+
if (t.status === 'archived')
|
|
99
|
+
continue;
|
|
100
|
+
const owner = t.owner_skill;
|
|
101
|
+
if (typeof owner === 'string' && owner !== '')
|
|
102
|
+
toolOwners.add(owner);
|
|
103
|
+
}
|
|
104
|
+
const baseSkillsDir = join(templatesRoot(), 'skills');
|
|
105
|
+
const baseSkillNames = new Set(existsSync(baseSkillsDir) ? readdirSync(baseSkillsDir) : []);
|
|
106
|
+
const findings = await runArtifactLint({
|
|
107
|
+
fs: artifactFs(),
|
|
108
|
+
baseDir: cwd,
|
|
109
|
+
toolOwners,
|
|
110
|
+
baseSkillNames,
|
|
111
|
+
});
|
|
112
|
+
if (findings.length > 0) {
|
|
113
|
+
console.log();
|
|
114
|
+
console.log('## Artifacts (docs/dev)');
|
|
115
|
+
for (const f of findings)
|
|
116
|
+
console.log(`! ${f.file}: ${f.message}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
88
119
|
});
|
|
89
120
|
}
|
|
90
121
|
//# sourceMappingURL=memory-doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-doctor.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-doctor.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-scaffold.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-scaffold.d.ts","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,WAAW,CAAC;AAQ9C,wBAAgB,qBAAqB,IAAI,OAAO,CA8D/C"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command, Argument } from 'commander';
|
|
2
2
|
import { scaffoldFrame, SCAFFOLD_KINDS } from '../../../app/use-cases/scaffold-agent.js';
|
|
3
|
+
import { scaffoldArtifact } from '../../../app/use-cases/scaffold-artifact.js';
|
|
3
4
|
import { createCliContainer } from '../../../bootstrap/container.js';
|
|
4
5
|
import { resolveCreatedBy, resolveSessionId } from '../../../domain/actor.js';
|
|
5
6
|
import { UserFacingError } from '../../../domain/errors.js';
|
|
@@ -12,8 +13,22 @@ export function memoryScaffoldCommand() {
|
|
|
12
13
|
.option('--persona <text>', 'Agent frame body text (agent only)')
|
|
13
14
|
.option('--model <model>', 'Agent frontmatter model (agent only)')
|
|
14
15
|
.option('--from-playbook <id>', 'Reuse existing playbook id instead of creating a new one')
|
|
16
|
+
.option('--fix', 'Fix profile for kind=artifact: requirements.md + plan.md only', false)
|
|
15
17
|
.option('--created-by <actor>', 'Creator actor (default: env WOLF_ACTOR, else user:cli)')
|
|
16
18
|
.action(async (kind, name, options) => {
|
|
19
|
+
if (kind !== 'artifact' && options.fix) {
|
|
20
|
+
throw new UserFacingError('--fix is supported only for kind=artifact');
|
|
21
|
+
}
|
|
22
|
+
if (kind === 'artifact') {
|
|
23
|
+
if (options.persona !== undefined || options.model !== undefined || options.fromPlaybook !== undefined) {
|
|
24
|
+
throw new UserFacingError('--persona/--model/--from-playbook are not supported for kind=artifact');
|
|
25
|
+
}
|
|
26
|
+
const { clock, fs } = createCliContainer(process.cwd());
|
|
27
|
+
const res = await scaffoldArtifact({ clock, fs, baseDir: process.cwd() }, { slug: name, fix: options.fix === true });
|
|
28
|
+
for (const f of res.files)
|
|
29
|
+
console.log(`Created artifact: ${f}`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
17
32
|
if (kind !== 'agent' && (options.persona !== undefined || options.model !== undefined)) {
|
|
18
33
|
throw new UserFacingError('--persona and --model are supported only for kind=agent');
|
|
19
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-scaffold.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAqB,MAAM,0CAA0C,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAEnF,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;SAC3B,WAAW,CAAC,yEAAyE,CAAC;SACtF,WAAW,CAAC,IAAI,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;SAC9E,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;SAChC,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,sBAAsB,EAAE,0DAA0D,CAAC;SAC1F,MAAM,CAAC,sBAAsB,EAAE,wDAAwD,CAAC;SACxF,MAAM,CACL,KAAK,EACH,IAAY,EACZ,IAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"memory-scaffold.js","sourceRoot":"","sources":["../../../../src/adapters/cli/commands/memory-scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AASpC,wBAAgB,iBAAiB,IAAI,OAAO,CA4B3C"}
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { OpencodeBaseSetRenderer } from '../../../adapters/render/opencode/opencode-renderer.js';
|
|
4
4
|
import { templatesRoot, harnessTemplatesRoot } from '../../../adapters/render/templates-root.js';
|
|
5
|
+
import { artifactFs } from '../../../adapters/fs/artifact-fs.js';
|
|
5
6
|
import { syncBaseSet } from '../../../app/use-cases/sync-base-set.js';
|
|
7
|
+
import { syncArtifactIndex } from '../../../app/use-cases/sync-artifact-index.js';
|
|
6
8
|
import { isNpxRun } from '../../../domain/npx.js';
|
|
7
9
|
import { UserFacingError } from '../../../domain/errors.js';
|
|
8
10
|
export function memorySyncCommand() {
|
|
@@ -17,6 +19,12 @@ export function memorySyncCommand() {
|
|
|
17
19
|
harnessTemplatesRoot: harnessTemplatesRoot('opencode'),
|
|
18
20
|
});
|
|
19
21
|
const { outcomes, orphaned } = await syncBaseSet(renderer, baseDir, 'omit');
|
|
22
|
+
const indexResult = await syncArtifactIndex({ fs: artifactFs(), baseDir });
|
|
23
|
+
console.log(indexResult.action === 'written'
|
|
24
|
+
? '- docs/dev/INDEX.md: regenerated'
|
|
25
|
+
: indexResult.action === 'unchanged'
|
|
26
|
+
? '- docs/dev/INDEX.md: unchanged'
|
|
27
|
+
: '- docs/dev/INDEX.md: docs/dev missing — skipped');
|
|
20
28
|
console.log('# wolf sync');
|
|
21
29
|
console.log('- models: omit — model: lines omitted (no routing source since wave 2.13)');
|
|
22
30
|
for (const o of outcomes)
|
|
@@ -1 +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,CACvB,0FAA0F,CAC3F,CAAC;QACJ,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,EAAE,MAAM,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,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,mDAAmD,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
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,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,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,CACvB,0FAA0F,CAC3F,CAAC;QACJ,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,EAAE,MAAM,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,MAAM,KAAK,SAAS;YAC9B,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,WAAW;gBAClC,CAAC,CAAC,gCAAgC;gBAClC,CAAC,CAAC,iDAAiD,CACxD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,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,mDAAmD,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-fs.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/artifact-fs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAElF,sFAAsF;AACtF,wBAAgB,UAAU,IAAI,eAAe,CAmB5C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/adapters/fs/artifact-fs.ts
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import { readFile, writeFile, readdir } from 'fs/promises';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
/** Общий fs-адаптер артефактов: sync (генерация индексов, A2) и doctor (линт, A3). */
|
|
6
|
+
export function artifactFs() {
|
|
7
|
+
return {
|
|
8
|
+
exists: (p) => Promise.resolve(existsSync(p)),
|
|
9
|
+
readFile: async (p) => readFile(p, 'utf-8').catch(() => null),
|
|
10
|
+
writeFile: (p, c) => writeFile(p, c, 'utf-8'),
|
|
11
|
+
listDir: async (p) => (existsSync(p) ? (await readdir(p)).filter((f) => !f.startsWith('.')) : []),
|
|
12
|
+
listFiles: async (p) => {
|
|
13
|
+
const out = [];
|
|
14
|
+
if (!existsSync(p))
|
|
15
|
+
return out;
|
|
16
|
+
const walk = async (dir, prefix) => {
|
|
17
|
+
for (const e of await readdir(dir, { withFileTypes: true })) {
|
|
18
|
+
if (e.isDirectory())
|
|
19
|
+
await walk(join(dir, e.name), `${prefix}${e.name}/`);
|
|
20
|
+
else if (e.name.endsWith('.md'))
|
|
21
|
+
out.push(`${prefix}${e.name}`);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
await walk(p, '');
|
|
25
|
+
return out;
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=artifact-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-fs.js","sourceRoot":"","sources":["../../../src/adapters/fs/artifact-fs.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,sFAAsF;AACtF,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrD,QAAQ,EAAE,KAAK,EAAE,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACrE,SAAS,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,SAAS,EAAE,KAAK,EAAE,CAAS,EAAqB,EAAE;YAChD,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,MAAc,EAAiB,EAAE;gBAChE,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,CAAC,WAAW,EAAE;wBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;yBACrE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC,CAAC;YACF,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClB,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { PlatformAdapter, McpCommand, PlatformConfig, PlatformWriteResult } from '../../ports/platform-adapter.port.js';
|
|
1
|
+
import { PlatformAdapter, McpCommand, PlatformConfig, PlatformWriteResult, PlatformVersionInfo } from '../../ports/platform-adapter.port.js';
|
|
2
2
|
/** Дефолтный агент Wolf в opencode (§6.1). */
|
|
3
3
|
export declare const DEFAULT_AGENT = "mr-wolf";
|
|
4
4
|
/** Глубина субагентов: executor-lead спавнит worker-* (трёхуровневая схема). */
|
|
5
5
|
export declare const SUBAGENT_DEPTH = 2;
|
|
6
|
+
/**
|
|
7
|
+
* Чистый парсер `opencode --version`. Эмпирика форматов: v1 печатает `1.18.35`,
|
|
8
|
+
* v2 — `opencode v2.0.24`; regex вытаскивает M.m.p из обоих.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseOpencodeVersion(raw: string): PlatformVersionInfo;
|
|
6
11
|
export declare class OpencodeAdapter implements PlatformAdapter {
|
|
7
12
|
readonly id = "opencode";
|
|
8
13
|
detect(projectRoot: string): boolean;
|
|
14
|
+
/** `opencode --version`; бинарь недоступен/ошибка запуска → absent (не бросаем). */
|
|
15
|
+
detectVersion(projectRoot: string): Promise<PlatformVersionInfo>;
|
|
9
16
|
/** Существующий конфиг (jsonc — только если нет json); для новой установки — opencode.json. */
|
|
10
17
|
private configFile;
|
|
11
18
|
readConfig(projectRoot: string): Promise<PlatformConfig | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/platforms/opencode-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/platforms/opencode-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,eAAe,EACf,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAK9C,8CAA8C;AAC9C,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,gFAAgF;AAChF,eAAO,MAAM,cAAc,IAAI,CAAC;AAQhC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAUrE;AAID,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,EAAE,cAAc;IAEzB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAQpC,oFAAoF;IAC9E,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAStE,+FAA+F;IAC/F,OAAO,CAAC,UAAU;IAOZ,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkB/D,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2C/E,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAYxD"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs/promises';
|
|
2
2
|
import { existsSync } from 'fs';
|
|
3
|
+
import { execFile } from 'child_process';
|
|
4
|
+
import { promisify } from 'util';
|
|
3
5
|
import { basename, join } from 'path';
|
|
4
6
|
import { parseJsonc } from './jsonc.js';
|
|
5
7
|
import { writeFileAtomic } from '../fs/markdown-memory-store.js';
|
|
@@ -8,6 +10,27 @@ import { UserFacingError } from '../../domain/errors.js';
|
|
|
8
10
|
export const DEFAULT_AGENT = 'mr-wolf';
|
|
9
11
|
/** Глубина субагентов: executor-lead спавнит worker-* (трёхуровневая схема). */
|
|
10
12
|
export const SUBAGENT_DEPTH = 2;
|
|
13
|
+
const execFileAsync = promisify(execFile);
|
|
14
|
+
/** Минимальная поддержанная v1 (порог диапазона). */
|
|
15
|
+
const V1_MIN_MINOR = 18;
|
|
16
|
+
const V1_MIN_PATCH = 29;
|
|
17
|
+
/**
|
|
18
|
+
* Чистый парсер `opencode --version`. Эмпирика форматов: v1 печатает `1.18.35`,
|
|
19
|
+
* v2 — `opencode v2.0.24`; regex вытаскивает M.m.p из обоих.
|
|
20
|
+
*/
|
|
21
|
+
export function parseOpencodeVersion(raw) {
|
|
22
|
+
const trimmed = raw.trim();
|
|
23
|
+
const m = trimmed.match(/(\d+)\.(\d+)\.(\d+)/);
|
|
24
|
+
if (!m)
|
|
25
|
+
return { status: 'unparseable', raw: trimmed };
|
|
26
|
+
const version = `${m[1]}.${m[2]}.${m[3]}`;
|
|
27
|
+
const [major, minor, patch] = [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
28
|
+
if (major >= 2)
|
|
29
|
+
return { status: 'v2', version, raw: trimmed };
|
|
30
|
+
if (major === 1 && (minor > V1_MIN_MINOR || (minor === V1_MIN_MINOR && patch >= V1_MIN_PATCH)))
|
|
31
|
+
return { status: 'v1', version, raw: trimmed };
|
|
32
|
+
return { status: 'unsupported', version, raw: trimmed };
|
|
33
|
+
}
|
|
11
34
|
// ponytail: комментарии в opencode.jsonc теряются при rewrite (plain JSON валиден как JSONC);
|
|
12
35
|
// сохранение комментариев = AST-редактор, YAGNI до запроса.
|
|
13
36
|
export class OpencodeAdapter {
|
|
@@ -17,6 +40,16 @@ export class OpencodeAdapter {
|
|
|
17
40
|
existsSync(join(projectRoot, 'opencode.jsonc')) ||
|
|
18
41
|
existsSync(join(projectRoot, '.opencode')));
|
|
19
42
|
}
|
|
43
|
+
/** `opencode --version`; бинарь недоступен/ошибка запуска → absent (не бросаем). */
|
|
44
|
+
async detectVersion(projectRoot) {
|
|
45
|
+
try {
|
|
46
|
+
const { stdout } = await execFileAsync('opencode', ['--version'], { cwd: projectRoot, timeout: 5000 });
|
|
47
|
+
return parseOpencodeVersion(stdout);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return { status: 'absent', message: err instanceof Error ? err.message : String(err) };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
20
53
|
/** Существующий конфиг (jsonc — только если нет json); для новой установки — opencode.json. */
|
|
21
54
|
configFile(projectRoot) {
|
|
22
55
|
if (existsSync(join(projectRoot, 'opencode.jsonc')) && !existsSync(join(projectRoot, 'opencode.json'))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-adapter.js","sourceRoot":"","sources":["../../../src/adapters/platforms/opencode-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-adapter.js","sourceRoot":"","sources":["../../../src/adapters/platforms/opencode-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Tolerant-парсинг YAML front-matter артефактов (прецедент parseFrontmatter
|
|
2
|
+
* seed-base-playbooks.ts:38-47; риск спеки §9 «линт хрупок к формату»:
|
|
3
|
+
* нечитаемый файл → пустая карта, не исключение). */
|
|
4
|
+
export declare function parseArtifactFrontMatter(raw: string): Record<string, string>;
|
|
5
|
+
//# sourceMappingURL=artifact-front-matter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-front-matter.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/artifact-front-matter.ts"],"names":[],"mappings":"AAAA;;qDAEqD;AACrD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS5E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Tolerant-парсинг YAML front-matter артефактов (прецедент parseFrontmatter
|
|
2
|
+
* seed-base-playbooks.ts:38-47; риск спеки §9 «линт хрупок к формату»:
|
|
3
|
+
* нечитаемый файл → пустая карта, не исключение). */
|
|
4
|
+
export function parseArtifactFrontMatter(raw) {
|
|
5
|
+
const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
6
|
+
if (!m)
|
|
7
|
+
return {};
|
|
8
|
+
const meta = {};
|
|
9
|
+
for (const line of m[1].split('\n')) {
|
|
10
|
+
const kv = line.match(/^([\w-]+):\s*(.+)$/);
|
|
11
|
+
if (kv)
|
|
12
|
+
meta[kv[1]] = kv[2].trim();
|
|
13
|
+
}
|
|
14
|
+
return meta;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=artifact-front-matter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-front-matter.js","sourceRoot":"","sources":["../../../src/app/use-cases/artifact-front-matter.ts"],"names":[],"mappings":"AAAA;;qDAEqD;AACrD,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5C,IAAI,EAAE;YAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ProjectInitializer } from '../../ports/project-initializer.port.js';
|
|
2
|
-
import { PlatformAdapter, McpCommand } from '../../ports/platform-adapter.port.js';
|
|
2
|
+
import { PlatformAdapter, McpCommand, PlatformVersionInfo } from '../../ports/platform-adapter.port.js';
|
|
3
3
|
import { MemoryStore } from '../../ports/memory-store.port.js';
|
|
4
4
|
import { EventLog } from '../../ports/event-log.port.js';
|
|
5
5
|
import { Clock } from '../../ports/clock.port.js';
|
|
@@ -61,6 +61,8 @@ export interface PlatformInitOutcome {
|
|
|
61
61
|
/** F6 (спека 2.1.0 §2.4): имя конфиг-файла платформы + фактические wolf-ключи (проброс из writeConfig). */
|
|
62
62
|
configFile?: string;
|
|
63
63
|
keys?: string[];
|
|
64
|
+
/** 2.14.1: детект версии opencode (диапазон v1 >= 1.18.29 + v2). */
|
|
65
|
+
version?: PlatformVersionInfo;
|
|
64
66
|
}
|
|
65
67
|
export interface InitProjectResult {
|
|
66
68
|
npx: boolean;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,26 @@ export async function findInitReport(store) {
|
|
|
23
23
|
INIT_REPORT_TAGS.every((t) => o.tags.includes(t)));
|
|
24
24
|
return active.length > 0 ? active[0] : null;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* writeConfig + (для opencode) detectVersion — единый outcome обоих call site (§4.4).
|
|
28
|
+
* Версия добавляется, только если адаптер её умеет и вернул.
|
|
29
|
+
*/
|
|
30
|
+
async function writePlatformOutcome(adapter, baseDir, cmd) {
|
|
31
|
+
const r = await adapter.writeConfig(baseDir, cmd);
|
|
32
|
+
const outcome = {
|
|
33
|
+
platform: adapter.id,
|
|
34
|
+
action: r.action,
|
|
35
|
+
reason: r.reason,
|
|
36
|
+
configFile: r.configFile,
|
|
37
|
+
keys: r.keys,
|
|
38
|
+
};
|
|
39
|
+
if (adapter.id === 'opencode') {
|
|
40
|
+
const version = await adapter.detectVersion?.(baseDir);
|
|
41
|
+
if (version)
|
|
42
|
+
outcome.version = version;
|
|
43
|
+
}
|
|
44
|
+
return outcome;
|
|
45
|
+
}
|
|
26
46
|
/**
|
|
27
47
|
* `wolf init` v2 (спека §4, onboarding-pipeline-v2): без скана (D1/F8 — полный скан живёт
|
|
28
48
|
* в bootstrap), платформы/модель до рендера, opencode-конфиг
|
|
@@ -69,14 +89,7 @@ export async function initProject(deps, baseDir, input) {
|
|
|
69
89
|
const wanted = new Set(input.platformChoice);
|
|
70
90
|
for (const adapter of deps.adapters) {
|
|
71
91
|
if (wanted.has(adapter.id)) {
|
|
72
|
-
|
|
73
|
-
platformOutcomes.push({
|
|
74
|
-
platform: adapter.id,
|
|
75
|
-
action: r.action,
|
|
76
|
-
reason: r.reason,
|
|
77
|
-
configFile: r.configFile,
|
|
78
|
-
keys: r.keys,
|
|
79
|
-
});
|
|
92
|
+
platformOutcomes.push(await writePlatformOutcome(adapter, baseDir, deps.mcpCommand));
|
|
80
93
|
}
|
|
81
94
|
else if (adapter.detect(baseDir)) {
|
|
82
95
|
const removed = await adapter.removeWolf(baseDir);
|
|
@@ -93,14 +106,7 @@ export async function initProject(deps, baseDir, input) {
|
|
|
93
106
|
// (D2: детекция не гейтит; F4); прочие платформы — по маркерам, не зависящим от рендера
|
|
94
107
|
for (const adapter of deps.adapters) {
|
|
95
108
|
if (adapter.id === 'opencode' || adapter.detect(baseDir)) {
|
|
96
|
-
|
|
97
|
-
platformOutcomes.push({
|
|
98
|
-
platform: adapter.id,
|
|
99
|
-
action: r.action,
|
|
100
|
-
reason: r.reason,
|
|
101
|
-
configFile: r.configFile,
|
|
102
|
-
keys: r.keys,
|
|
103
|
-
});
|
|
109
|
+
platformOutcomes.push(await writePlatformOutcome(adapter, baseDir, deps.mcpCommand));
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
}
|
|
@@ -163,11 +169,25 @@ function renderInitReportBody(deps, input, outcomes) {
|
|
|
163
169
|
versions.push(`wolf ${deps.wolfVersion}`);
|
|
164
170
|
versions.push(`schema v${CURRENT_SCHEMA_VERSION}`);
|
|
165
171
|
found.push(`- versions: ${versions.join(', ')}`);
|
|
172
|
+
// 2.14.1: версия opencode (диапазон поддержки v1 >= 1.18.29 + v2)
|
|
173
|
+
const ocVersion = platformOutcomes.find((o) => o.platform === 'opencode')?.version;
|
|
174
|
+
if (ocVersion?.status === 'absent') {
|
|
175
|
+
found.push('- opencode: not found on PATH; assuming v1');
|
|
176
|
+
}
|
|
177
|
+
else if (ocVersion) {
|
|
178
|
+
found.push(`- opencode: ${ocVersion.raw ?? ocVersion.version} (${ocVersion.status})`);
|
|
179
|
+
}
|
|
166
180
|
const needsFix = [];
|
|
167
181
|
for (const o of platformOutcomes) {
|
|
168
182
|
if (o.reason && o.action !== 'removed')
|
|
169
183
|
needsFix.push(`- ${o.platform}: ${o.reason}`);
|
|
170
184
|
}
|
|
185
|
+
if (ocVersion?.status === 'unsupported') {
|
|
186
|
+
needsFix.push(`- opencode ${ocVersion.version} is unsupported: Wolf needs opencode v1 >= 1.18.29 or v2 — upgrade opencode`);
|
|
187
|
+
}
|
|
188
|
+
if (ocVersion?.status === 'unparseable') {
|
|
189
|
+
needsFix.push(`- opencode version could not be parsed (${ocVersion.raw || 'empty output'}): Wolf needs v1 >= 1.18.29 or v2`);
|
|
190
|
+
}
|
|
171
191
|
// §4.4 граничный случай: явный выбор без opencode — набор отрендерен, но MCP не подключён (осознанное состояние)
|
|
172
192
|
if (input.platformChoice !== undefined && !input.platformChoice.includes('opencode')) {
|
|
173
193
|
needsFix.push('- opencode not in the --platform list: Wolf agents are rendered into .opencode/, but mcp.wolf/default_agent/subagent_depth are not written; connect: wolf init --platform opencode,…');
|
|
@@ -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,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,IAAI,MAAM,SAAS,CAAC;AAW3B,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;AAEzD,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,18 @@
|
|
|
1
|
+
import type { ArtifactIndexFs } from './sync-artifact-index.js';
|
|
2
|
+
export interface ArtifactFinding {
|
|
3
|
+
/** Путь относительно baseDir (или маркер, напр. `.opencode/skills/<имя>`). */
|
|
4
|
+
file: string;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export interface LintArtifactsDeps {
|
|
8
|
+
fs: ArtifactIndexFs;
|
|
9
|
+
baseDir: string;
|
|
10
|
+
/** owner_skill всех тул-объектов памяти (для призраков). */
|
|
11
|
+
toolOwners: Set<string>;
|
|
12
|
+
/** Имена скиллов базового набора (исключение из призраков). */
|
|
13
|
+
baseSkillNames: Set<string>;
|
|
14
|
+
}
|
|
15
|
+
/** Линт артефактов docs/dev (спека §4-A3): только чтение + регулярки; tolerant —
|
|
16
|
+
* нечитаемое пропускается, линт никогда не бросает; находит, но не блокирует. */
|
|
17
|
+
export declare function runArtifactLint(deps: LintArtifactsDeps): Promise<ArtifactFinding[]>;
|
|
18
|
+
//# sourceMappingURL=lint-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-artifacts.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/lint-artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,eAAe,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,+DAA+D;IAC/D,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAiBD;iFACiF;AACjF,wBAAsB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgOzF"}
|