mister-wolf 2.14.1 → 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.
Files changed (56) hide show
  1. package/README.md +2 -0
  2. package/README.ru.md +2 -0
  3. package/dist/adapters/cli/commands/memory-doctor.d.ts.map +1 -1
  4. package/dist/adapters/cli/commands/memory-doctor.js +32 -1
  5. package/dist/adapters/cli/commands/memory-doctor.js.map +1 -1
  6. package/dist/adapters/cli/commands/memory-scaffold.d.ts.map +1 -1
  7. package/dist/adapters/cli/commands/memory-scaffold.js +15 -0
  8. package/dist/adapters/cli/commands/memory-scaffold.js.map +1 -1
  9. package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -1
  10. package/dist/adapters/cli/commands/memory-sync.js +8 -0
  11. package/dist/adapters/cli/commands/memory-sync.js.map +1 -1
  12. package/dist/adapters/fs/artifact-fs.d.ts +4 -0
  13. package/dist/adapters/fs/artifact-fs.d.ts.map +1 -0
  14. package/dist/adapters/fs/artifact-fs.js +29 -0
  15. package/dist/adapters/fs/artifact-fs.js.map +1 -0
  16. package/dist/app/use-cases/artifact-front-matter.d.ts +5 -0
  17. package/dist/app/use-cases/artifact-front-matter.d.ts.map +1 -0
  18. package/dist/app/use-cases/artifact-front-matter.js +16 -0
  19. package/dist/app/use-cases/artifact-front-matter.js.map +1 -0
  20. package/dist/app/use-cases/lint-artifacts.d.ts +18 -0
  21. package/dist/app/use-cases/lint-artifacts.d.ts.map +1 -0
  22. package/dist/app/use-cases/lint-artifacts.js +249 -0
  23. package/dist/app/use-cases/lint-artifacts.js.map +1 -0
  24. package/dist/app/use-cases/scaffold-agent.d.ts +1 -1
  25. package/dist/app/use-cases/scaffold-agent.d.ts.map +1 -1
  26. package/dist/app/use-cases/scaffold-agent.js +1 -1
  27. package/dist/app/use-cases/scaffold-agent.js.map +1 -1
  28. package/dist/app/use-cases/scaffold-artifact.d.ts +22 -0
  29. package/dist/app/use-cases/scaffold-artifact.d.ts.map +1 -0
  30. package/dist/app/use-cases/scaffold-artifact.js +153 -0
  31. package/dist/app/use-cases/scaffold-artifact.js.map +1 -0
  32. package/dist/app/use-cases/sync-artifact-index.d.ts +20 -0
  33. package/dist/app/use-cases/sync-artifact-index.d.ts.map +1 -0
  34. package/dist/app/use-cases/sync-artifact-index.js +68 -0
  35. package/dist/app/use-cases/sync-artifact-index.js.map +1 -0
  36. package/dist/domain/memory-types.d.ts +12 -0
  37. package/dist/domain/memory-types.d.ts.map +1 -1
  38. package/dist/domain/memory-types.js +4 -0
  39. package/dist/domain/memory-types.js.map +1 -1
  40. package/dist/domain/schemas/relation-schema.d.ts +1 -1
  41. package/package.json +1 -1
  42. package/templates/.wolf/router.log +1 -1
  43. package/templates/base/skills/finishing-a-development-branch/SKILL.md +32 -13
  44. package/templates/base/skills/receiving-code-review/SKILL.md +39 -0
  45. package/templates/base/skills/test-driven-development/SKILL.md +59 -37
  46. package/templates/base/skills/using-git-worktrees/SKILL.md +25 -15
  47. package/templates/base/skills/verification-before-completion/SKILL.md +39 -25
  48. package/templates/base/skills/wolf-brainstorm/SKILL.md +51 -36
  49. package/templates/base/skills/wolf-design/SKILL.md +45 -0
  50. package/templates/base/skills/wolf-execute/SKILL.md +30 -13
  51. package/templates/base/skills/wolf-plan/SKILL.md +38 -21
  52. package/templates/base/skills/wolf-review/SKILL.md +33 -14
  53. package/templates/base/skills/wolf-sdd/SKILL.md +38 -16
  54. package/templates/base/skills/wolf-skill-intake/SKILL.md +66 -0
  55. package/templates/base/skills/wolf-testplan/SKILL.md +37 -0
  56. package/templates/base/skills/writing-skills/SKILL.md +40 -0
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;AA0CpC,wBAAgB,mBAAmB,IAAI,OAAO,CA2C7C"}
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":"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"}
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,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C;;;;;GAKG;AACH,SAAS,aAAa,CAAC,CAAS;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,CAAS;IACrC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,+FAA+F,CAAC;SAC5G,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,QAAQ;YACR,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAClC,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,EAAE,OAAO,EAAE;YACd,SAAS,EAAE,aAAa;YACxB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,iBAAiB,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,gCAAgC,CAAC,CAAC;gBACzD,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YACtE,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,CAAC,MAAM,KAAK,iBAAiB;gBAAE,IAAI,GAAG,4CAA4C,CAAC;YACxF,IAAI,CAAC,CAAC,MAAM,KAAK,kBAAkB;gBAAE,IAAI,GAAG,6DAA6D,CAAC;YAC1G,IAAI,CAAC,CAAC,MAAM,KAAK,iBAAiB;gBAAE,IAAI,GAAG,sDAAsD,CAAC;YAClG,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,GAAG,mCAAmC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,YAAY,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YAClE,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,MAAM,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACtG,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;gBACnD,wFAAwF;gBACxF,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU;oBAAE,SAAS;gBACtC,MAAM,KAAK,GAAI,CAA8B,CAAC,WAAW,CAAC;gBAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE;oBAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;gBACrC,EAAE,EAAE,UAAU,EAAE;gBAChB,OAAO,EAAE,GAAG;gBACZ,UAAU;gBACV,cAAc;aACf,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,KAAK,MAAM,CAAC,IAAI,QAAQ;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -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;AAO9C,wBAAgB,qBAAqB,IAAI,OAAO,CA8C/C"}
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,OAAwF,EACxF,EAAE;QACF,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,eAAe,CAAC,yDAAyD,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAC/F,OAAO,CAAC,GAAG,EAAE,CACd,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAC9F;YACE,IAAI,EAAE,IAAoB;YAC1B,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;SAC/C,CACF,CAAC;QACF,6EAA6E;QAC7E,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI;YACJ,SAAS,EAAE,OAAO;YAClB,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;YAC1C,2DAA2D;YAC3D,SAAS,EAAE,gBAAgB,EAAE;YAC7B,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE;SACjD,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC,CACF,CAAC;AACN,CAAC"}
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;AAOpC,wBAAgB,iBAAiB,IAAI,OAAO,CAoB3C"}
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,4 @@
1
+ import type { ArtifactIndexFs } from '../../app/use-cases/sync-artifact-index.js';
2
+ /** Общий fs-адаптер артефактов: sync (генерация индексов, A2) и doctor (линт, A3). */
3
+ export declare function artifactFs(): ArtifactIndexFs;
4
+ //# sourceMappingURL=artifact-fs.d.ts.map
@@ -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"}
@@ -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"}
@@ -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"}
@@ -0,0 +1,249 @@
1
+ import { join } from 'path';
2
+ import { parseArtifactFrontMatter } from './artifact-front-matter.js';
3
+ /** Тело документа без front-matter (regex дублирует parseArtifactFrontMatter — она тело не отдаёт). */
4
+ function bodyOf(raw) {
5
+ const m = raw.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?([\s\S]*)$/);
6
+ return m ? m[1] : raw;
7
+ }
8
+ /** Нормализация для сравнения дубликатов: trim + lowercase + схлопывание пробелов. */
9
+ const normalize = (s) => s.replace(/\s+/g, ' ').trim().toLowerCase();
10
+ /** Слаг папки фичи: `2026-10-08-x` → `x`; без датового префикса — имя целиком. */
11
+ const folderSlug = (name) => name.replace(/^\d{4}-\d{2}-\d{2}-/, '');
12
+ /** Идентификатор CR-записи — первые 40 символов строки (спека §4-A3 п.6). */
13
+ const crId = (line) => line.slice(0, 40);
14
+ /** Линт артефактов docs/dev (спека §4-A3): только чтение + регулярки; tolerant —
15
+ * нечитаемое пропускается, линт никогда не бросает; находит, но не блокирует. */
16
+ export async function runArtifactLint(deps) {
17
+ const { fs, baseDir, toolOwners, baseSkillNames } = deps;
18
+ const findings = [];
19
+ const readOrNull = async (p) => {
20
+ try {
21
+ return await fs.readFile(p);
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ };
27
+ /** Tolerant listDir: нет каталога/ошибка → [] (адаптер уже самогейтится через existsSync). */
28
+ const listDirSafe = async (p) => {
29
+ try {
30
+ return await fs.listDir(p);
31
+ }
32
+ catch {
33
+ return [];
34
+ }
35
+ };
36
+ // 12. Скиллы-призраки — независимо от наличия docs/dev.
37
+ for (const name of await listDirSafe(join(baseDir, '.opencode', 'skills'))) {
38
+ if (!toolOwners.has(name) && !baseSkillNames.has(name)) {
39
+ findings.push({
40
+ file: `.opencode/skills/${name}`,
41
+ message: `скилл-призрак: .opencode/skills/${name}/ без тул-объекта в памяти (wolf add --type tool)`,
42
+ });
43
+ }
44
+ }
45
+ const devDir = join(baseDir, 'docs', 'dev');
46
+ try {
47
+ if (!(await fs.exists(devDir)))
48
+ return findings;
49
+ }
50
+ catch {
51
+ return findings;
52
+ }
53
+ const devEntries = (await listDirSafe(devDir)).sort();
54
+ const featureFolders = devEntries.filter((n) => !n.endsWith('.md') && n !== 'roadmap');
55
+ const waveNames = devEntries.filter((n) => n.startsWith('wave-') && n.endsWith('.md'));
56
+ // Волны/роадмап: все wave-*.md в docs/dev + *.md в docs/dev/roadmap/.
57
+ const globalDocs = [];
58
+ for (const name of waveNames) {
59
+ const raw = await readOrNull(join(devDir, name));
60
+ if (raw !== null)
61
+ globalDocs.push({ rel: `docs/dev/${name}`, raw });
62
+ }
63
+ const roadmapDir = join(devDir, 'roadmap');
64
+ for (const name of (await listDirSafe(roadmapDir)).sort()) {
65
+ if (!name.endsWith('.md'))
66
+ continue;
67
+ const raw = await readOrNull(join(roadmapDir, name));
68
+ if (raw !== null)
69
+ globalDocs.push({ rel: `docs/dev/roadmap/${name}`, raw });
70
+ }
71
+ // 9. Дубли роадмапа: один нормализованный пункт ^- в двух файлах.
72
+ const firstSeen = new Map();
73
+ const reportedItems = new Set();
74
+ for (const doc of globalDocs) {
75
+ for (const line of doc.raw.split('\n')) {
76
+ if (!/^- /.test(line))
77
+ continue;
78
+ const key = normalize(line);
79
+ const first = firstSeen.get(key);
80
+ if (first && first !== doc.rel && !reportedItems.has(key)) {
81
+ reportedItems.add(key);
82
+ findings.push({
83
+ file: doc.rel,
84
+ message: `пункт роадмапа в двух файлах: "${key.slice(0, 60)}" — ${first}, ${doc.rel}`,
85
+ });
86
+ }
87
+ else if (!first) {
88
+ firstSeen.set(key, doc.rel);
89
+ }
90
+ }
91
+ }
92
+ // 10a. Released-файл: слаг пункта без папки docs/dev/*-<слаг>.
93
+ for (const doc of globalDocs) {
94
+ if (parseArtifactFrontMatter(doc.raw).status !== 'released')
95
+ continue;
96
+ for (const line of doc.raw.split('\n')) {
97
+ const m = line.match(/^- (.+)$/);
98
+ if (!m)
99
+ continue;
100
+ const slug = m[1].split(/[\s—:]+/)[0] ?? '';
101
+ if (slug === '')
102
+ continue;
103
+ if (!featureFolders.some((f) => f === slug || f.endsWith(`-${slug}`))) {
104
+ findings.push({ file: doc.rel, message: `волна ${doc.rel}: у фичи ${slug} нет папки фичи` });
105
+ }
106
+ }
107
+ }
108
+ // Правила 2–8 — по requirements.md папки фичи; 3/11 — по спутникам (requirements не нужен).
109
+ for (const folder of featureFolders) {
110
+ const folderPath = join(devDir, folder);
111
+ const reqRel = `docs/dev/${folder}/requirements.md`;
112
+ const reqRaw = await readOrNull(join(folderPath, 'requirements.md'));
113
+ const reqIds = new Set();
114
+ if (reqRaw !== null) {
115
+ const reqMeta = parseArtifactFrontMatter(reqRaw);
116
+ const reqBody = bodyOf(reqRaw);
117
+ const reqLines = reqBody.split('\n');
118
+ // 2. Дубли ID в requirements.md.
119
+ const ids = [];
120
+ for (const line of reqLines) {
121
+ const m = line.match(/^###\s+(REQ|NFR)-(\d{2})\b/);
122
+ if (m)
123
+ ids.push(`${m[1]}-${m[2]}`);
124
+ }
125
+ for (const id of ids)
126
+ reqIds.add(id);
127
+ const idSeen = new Set();
128
+ for (const id of ids) {
129
+ if (idSeen.has(id)) {
130
+ findings.push({ file: reqRel, message: `${id} дублируется в ${folder}/requirements.md` });
131
+ }
132
+ else {
133
+ idSeen.add(id);
134
+ }
135
+ }
136
+ // 4. Блоки REQ: AC:/Источник:; 8. Дубли текста требований.
137
+ const blocks = reqBody.split(/^###\s+/m).slice(1);
138
+ const reqTexts = new Map();
139
+ for (const block of blocks) {
140
+ const m = block.match(/^(REQ|NFR)-(\d{2})/);
141
+ if (!m)
142
+ continue;
143
+ const id = `${m[1]}-${m[2]}`;
144
+ const blockBody = block.slice(m[0].length);
145
+ if (!blockBody.split('\n').some((l) => l.includes('AC:'))) {
146
+ findings.push({ file: reqRel, message: `${id}: нет строки "AC:"` });
147
+ }
148
+ if (!blockBody.split('\n').some((l) => l.includes('Источник:'))) {
149
+ findings.push({ file: reqRel, message: `${id}: нет строки "Источник:"` });
150
+ }
151
+ for (const line of blockBody.split('\n')) {
152
+ const tm = line.match(/^- Требование:\s*(.+)$/);
153
+ if (!tm)
154
+ continue;
155
+ const key = normalize(tm[1]);
156
+ const firstId = reqTexts.get(key);
157
+ if (firstId && firstId !== id) {
158
+ findings.push({
159
+ file: reqRel,
160
+ message: `дубликат требования: "${key.slice(0, 60)}" (${firstId} ↔ ${id})`,
161
+ });
162
+ }
163
+ else if (!firstId) {
164
+ reqTexts.set(key, id);
165
+ }
166
+ }
167
+ }
168
+ // 5. НЕОПРЕДЕЛЕНО в approved-документе.
169
+ if (reqMeta.status === 'approved' && reqBody.includes('[НЕОПРЕДЕЛЕНО')) {
170
+ findings.push({
171
+ file: reqRel,
172
+ message: `[НЕОПРЕДЕЛЕНО в approved-документе: ${reqRel} — убери плейсхолдер или верни статус в draft`,
173
+ });
174
+ }
175
+ // 6. CR без downstream-отметки; 7. Сброс downstream (§6.7).
176
+ for (const line of reqLines) {
177
+ if (!/^- CR-/.test(line))
178
+ continue;
179
+ const id = crId(line);
180
+ if (!line.includes('downstream:')) {
181
+ findings.push({ file: reqRel, message: `${id} без downstream-отметки (${reqRel})` });
182
+ continue;
183
+ }
184
+ if (reqMeta.status !== 'approved')
185
+ continue;
186
+ const lower = line.toLowerCase();
187
+ for (const word of ['design', 'plan']) {
188
+ if (!lower.includes(word))
189
+ continue;
190
+ const subRaw = await readOrNull(join(folderPath, `${word}.md`));
191
+ if (subRaw === null)
192
+ continue;
193
+ if (parseArtifactFrontMatter(subRaw).status === 'approved') {
194
+ findings.push({
195
+ file: reqRel,
196
+ message: `${id} требует сброса статуса ${word}.md → draft (остался approved)`,
197
+ });
198
+ }
199
+ }
200
+ }
201
+ // 3. Битые REQ-ссылки в design/plan/test-plan.
202
+ for (const fileName of ['design.md', 'plan.md', 'test-plan.md']) {
203
+ const raw = await readOrNull(join(folderPath, fileName));
204
+ if (raw === null)
205
+ continue;
206
+ const refs = [...new Set(bodyOf(raw).match(/REQ-\d{2}/g) ?? [])];
207
+ for (const ref of refs) {
208
+ if (!reqIds.has(ref)) {
209
+ findings.push({
210
+ file: `docs/dev/${folder}/${fileName}`,
211
+ message: `${ref} не найден в requirements.md (упомянут в docs/dev/${folder}/${fileName})`,
212
+ });
213
+ }
214
+ }
215
+ }
216
+ }
217
+ // 11. Готовность по plan.md.
218
+ const planRaw = await readOrNull(join(folderPath, 'plan.md'));
219
+ if (planRaw !== null) {
220
+ const planLines = planRaw.split('\n');
221
+ const done = planLines.filter((l) => /^\s*[-*] \[x\]/i.test(l)).length;
222
+ const todo = planLines.filter((l) => /^\s*[-*] \[ \]/.test(l)).length;
223
+ if (done > 0 && todo === 0 && parseArtifactFrontMatter(planRaw).status === 'approved') {
224
+ findings.push({
225
+ file: `docs/dev/${folder}/plan.md`,
226
+ message: `${folder} готова к релизу (все задачи закрыты, план approved)`,
227
+ });
228
+ }
229
+ else if (done > 0 && todo > 0) {
230
+ findings.push({
231
+ file: `docs/dev/${folder}/plan.md`,
232
+ message: `${folder} в работе (закрыто ${done} из ${done + todo} задач)`,
233
+ });
234
+ }
235
+ }
236
+ }
237
+ // 10b. Папка фичи, слаг которой не упомянут ни в одном wave/roadmap-файле.
238
+ const waveText = globalDocs.map((d) => d.raw).join('\n');
239
+ for (const folder of featureFolders) {
240
+ const slug = folderSlug(folder);
241
+ if (slug === '')
242
+ continue;
243
+ if (!waveText.includes(slug)) {
244
+ findings.push({ file: `docs/dev/${folder}`, message: `${folder} не упомянута в файлах волн` });
245
+ }
246
+ }
247
+ return findings;
248
+ }
249
+ //# sourceMappingURL=lint-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-artifacts.js","sourceRoot":"","sources":["../../../src/app/use-cases/lint-artifacts.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { MemoryLock } from '../../ports/memory-lock.port.js';
7
7
  import { RelationLog } from '../../ports/relation-log.port.js';
8
8
  import { FileSystem } from '../../ports/file-system.port.js';
9
9
  import { MemoryTypeDeclaration } from '../../domain/memory-types.js';
10
- export declare const SCAFFOLD_KINDS: readonly ["agent", "skill", "command"];
10
+ export declare const SCAFFOLD_KINDS: readonly ["agent", "skill", "command", "artifact"];
11
11
  export type ScaffoldKind = (typeof SCAFFOLD_KINDS)[number];
12
12
  export declare const DEFAULT_SCAFFOLD_MODEL = "zai-coding-plan/glm-5.3";
13
13
  export interface ScaffoldFrameInput {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold-agent.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/scaffold-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAkB,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAyBrF,eAAO,MAAM,cAAc,wCAAyC,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1E;AAoDD,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,EACD,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAqF9B"}
1
+ {"version":3,"file":"scaffold-agent.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/scaffold-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAkB,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAyBrF,eAAO,MAAM,cAAc,oDAAqD,CAAC;AACjF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1E;AAoDD,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,EACD,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAqF9B"}
@@ -20,7 +20,7 @@ function isPlaybookNote(pb) {
20
20
  (pb.type === 'note' &&
21
21
  (pb.facet === 'howto' || pb.alias_origin === 'playbook')));
22
22
  }
23
- export const SCAFFOLD_KINDS = ['agent', 'skill', 'command'];
23
+ export const SCAFFOLD_KINDS = ['agent', 'skill', 'command', 'artifact'];
24
24
  export const DEFAULT_SCAFFOLD_MODEL = 'zai-coding-plan/glm-5.3';
25
25
  /** Каталог command — единственного числа (.opencode/command/), agents и skills — как в opencode. */
26
26
  export function frameRelativePath(kind, name) {