mister-wolf 2.14.1 → 2.15.1

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 +22 -11
  2. package/README.ru.md +22 -11
  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
@@ -4,25 +4,30 @@
4
4
 
5
5
  ![Mr. Wolf logo](docs/Mr.%20Wolf.png)
6
6
 
7
- > **"I solve problems."**
8
- >
9
7
  > **Memory is the carrier. Processes are the essence. Agents are the shape. Tools are the hands.**
10
8
  > And the hands accumulate: every useful script becomes a permanent project resource.
9
+ >
10
+ > **"I solve problems."**
11
11
 
12
- **Concept version:** 3.0 · Status: opencode-first, roadmap v3 Phases A–B implemented.
12
+ **Concept version:** 3.3.1 · Status: opencode-first, roadmap v3 Phases A–B implemented.
13
13
 
14
14
  ## What is Wolf
15
15
 
16
- Mr. Wolf is a local-first layer of memory, processes, agents and tools for AI coding: a single source of truth that agents write their experience to and read context from. It is not an orchestrator and not yet another agent — it is a substrate under any agent. Accumulation instead of evaporation: decisions, lessons, tools and processes stay with the project after the session and make the next task cheaper. The full picture is in the [concept v3 (RU)](docs/concept/concept.md).
16
+ Mr. Wolf is a permanent project organization assembled from temporary AI agents: a coordinator (L0) owns the goal and accepts the result, an executor (L1) supplies context and dispatches, workers (L2) run single tasks in clean sessions. Typed memory, a complaint-driven learning loop and a library of accumulated tools carry the organization from session to session — a new session starts from the project's state, not from zero. Local-first: everything lives in your repo, driven by CLI + MCP. We run our own development through this organization daily. The full picture is in the [concept v3 (RU)](docs/concept/concept.md).
17
17
 
18
18
  ## Problems Wolf solves
19
19
 
20
- | # | Problem | Symptom |
21
- | --- | ---------------------------------------- | ------------------------------------------------------------------------------ |
22
- | P1 | Context is lost between sessions | the agent starts from scratch |
23
- | P2 | Experience is not reused | recurring tasks are solved from scratch: prose reasoning + new one-off scripts |
24
- | P3 | Project documents live apart from agents | no single source of truth |
25
- | P4 | Accumulated knowledge becomes noise | memory grows, value drops |
20
+ | # | Problem | Symptom | Wolf response |
21
+ | --- | ---------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
22
+ | P1 | Context is lost between sessions | the agent starts from scratch | typed memory; `wolf call`/`wolf brief` re-inject project state at cold start |
23
+ | P2 | Experience is not reused | recurring tasks are solved from scratch: prose reasoning + new one-off scripts | lessons and the tool library: recurring work starts from what already worked |
24
+ | P3 | Project documents live apart from agents | no single source of truth | `.wolf/` — a single source of truth drafted from project documents |
25
+ | P4 | Accumulated knowledge becomes noise | memory grows, value drops | supersede chains, facets, decay by mileage |
26
+ | P7 | One agent thinks and checks itself | confident mistakes survive the session | L0/L1/L2 hierarchy, independent acceptance, Council for ambiguous calls (designed, roadmap) |
27
+ | P8 | The same mistakes repeat | corrections live in chat logs, not in the project | complaint → playbook mutation → next session behaves differently |
28
+ | P9 | Quality degrades over a long process | context bloat, drifting goals, lost decisions | briefs, checkpoints, typed state continuity |
29
+
30
+ > P5–P6 (capture/reuse failure) are answered by the learning loop and the tool pipeline — see the Learning Loop.
26
31
 
27
32
  ## Installation
28
33
 
@@ -77,7 +82,7 @@ Details: [architecture guide (RU)](docs/guide/architecture.md) · [concept v3 (R
77
82
 
78
83
  ### Memory
79
84
 
80
- Everything is memory: 25 object types (including `complaint`), versions, relations, attribution.
85
+ Everything is memory: 7 core types (`rule`, `lesson`, `decision`, `thread`, `complaint`, `tool`, `note`) plus facets, versions, relations, attribution.
81
86
 
82
87
  ```bash
83
88
  wolf add --type lesson --title "..." --body "..." --tags "vitest,ci" --confidence medium
@@ -111,6 +116,10 @@ wolf think start --goal "…" # последователь
111
116
 
112
117
  - Контур поправок замыкается в памяти: жалоба → триаж → исход (`relation outcome_of`) — **поправил → закрепилось → доставилось → окупилось**.
113
118
 
119
+ ### Organization
120
+
121
+ Wolf works as a permanent project organization from temporary agents: a **coordinator (L0)** holds the goal and accepts the result, an **executor (L1)** supplies context and dispatches, **workers (L2)** execute single tasks in clean sessions. Roles, the working cycle and the council for ambiguous calls — [Organization & Council](https://chekh.github.io/mister-wolf/guide/organization); the council is designed and on the roadmap, the hierarchy and independent acceptance work today. Corrections flow through the complaint loop: complaint → triage → outcome → playbook mutation → the next session behaves differently.
122
+
114
123
  ### Agents
115
124
 
116
125
  - `wolf scaffold agent|skill|command <name>` — a platform frame + a playbook in memory + a relation, all in one command; `--persona` and `--model` for agents, `--from-playbook <id>` to reuse an existing playbook.
@@ -200,6 +209,8 @@ Mutation attribution: every memory object has an author. Priority: the `--create
200
209
  - [Architecture (RU)](docs/guide/architecture.md) — how the system is built
201
210
  - [Documentation index (RU)](docs/README.md)
202
211
 
212
+ 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.
213
+
203
214
  ## Development
204
215
 
205
216
  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
@@ -4,25 +4,30 @@
4
4
 
5
5
  ![Mr. Wolf logo](docs/Mr.%20Wolf.png)
6
6
 
7
- > **«I solve problems.»**
8
- >
9
7
  > **Память — носитель. Процессы — суть. Агенты — форма. Инструменты — руки.**
10
8
  > И руки накапливаются: каждый полезный скрипт становится постоянным ресурсом проекта.
9
+ >
10
+ > **«I solve problems.»**
11
11
 
12
- **Версия концепта:** 3.0 · Статус: opencode-first, Фазы A–B roadmap v3 реализованы.
12
+ **Версия концепта:** 3.3.1 · Статус: opencode-first, Фазы A–B roadmap v3 реализованы.
13
13
 
14
14
  ## Что такое Wolf
15
15
 
16
- Mr. Wolf — local-first слой памяти, процессов, агентов и инструментов для AI-кодинга: единая точка правды проекта, в которую агенты пишут опыт и из которой получают контекст. Это не оркестратор и не ещё один агент, а субстрат под любого агента. Накопление вместо испарения: решения, уроки, инструменты и процессы остаются в проекте после сессии и делают следующую задачу дешевле. Полная картина — в [концепте v3](docs/concept/concept.md).
16
+ Mr. Wolf — постоянная проектная организация, собираемая из временных AI-агентов: координатор (L0) держит цель и принимает результат, исполнитель (L1) поставляет контекст и диспетчирует, воркеры (L2) решают одиночные задачи в чистых сессиях. Типизированная память, жалобный контур обучения и накопленная библиотека инструментов переносят организацию от сессии к сессии — новая сессия стартует из состояния проекта, а не с нуля. Local-first: всё живёт в вашем репозитории, управление — CLI + MCP. Мы гоняем через эту организацию собственную разработку каждый день. Полная картина — в [концепте v3](docs/concept/concept.md).
17
17
 
18
18
  ## Решаемые проблемы
19
19
 
20
- | № | Проблема | Проявление |
21
- | --- | ------------------------------------------- | ----------------------------------------------------------------------------------- |
22
- | П1 | Контекст теряется между сессиями | агент начинает с нуля |
23
- | П2 | Опыт не переиспользуется | повторные задачи решаются заново: текстовые рассуждения + новые одноразовые скрипты |
24
- | П3 | Документы проекта живут отдельно от агентов | единая точка правды отсутствует |
25
- | П4 | Накопленное становится шумом | память растёт, ценность падает |
20
+ | № | Проблема | Проявление | Ответ Wolf |
21
+ | ---- | ------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
22
+ | П1 | Контекст теряется между сессиями | агент начинает с нуля | типизированная память; `wolf call`/`wolf brief` заново инъецируют состояние |
23
+ | П2 | Опыт не переиспользуется | повторные задачи решаются заново: текстовые рассуждения + новые одноразовые скрипты | уроки и библиотека инструментов: повторная работа стартует от работавшего |
24
+ | П3 | Документы проекта живут отдельно от агентов | единая точка правды отсутствует | `.wolf/` — единая точка правды, наполненная из документов проекта |
25
+ | П4 | Накопленное становится шумом | память растёт, ценность падает | supersede-цепочки, фасеты, decay по пробегу |
26
+ | П7 | Один агент сам думает и сам себя проверяет | уверенные ошибки переживают сессию | иерархия L0/L1/L2, независимая приёмка, консилиум для спорных решений (designed, roadmap) |
27
+ | П8 | Одни и те же ошибки повторяются | правки живут в чат-логах, а не в проекте | жалоба → мутация playbook'а → следующая сессия работает иначе |
28
+ | П9 | Качество деградирует в длинном процессе | раздувание контекста, дрейф цели, потерянные решения | брифы, чекпоинты, типизированная преемственность состояния |
29
+
30
+ > П5–П6 (capture/reuse failure) закрывают контур обучения и конвейер инструментов — см. Контур обучения.
26
31
 
27
32
  ## Установка
28
33
 
@@ -94,7 +99,7 @@ Claude Code при первом старте попросит approve project-sc
94
99
 
95
100
  ### Память
96
101
 
97
- Всё есть память: 25 типов объектов (включая `complaint`), версии, связи, атрибуция.
102
+ Всё есть память: 7 ключевых типов (`rule`, `lesson`, `decision`, `thread`, `complaint`, `tool`, `note`) плюс фасеты, версии, связи, атрибуция.
98
103
 
99
104
  ```bash
100
105
  wolf add --type lesson --title "..." --body "..." --tags "vitest,ci" --confidence medium
@@ -128,6 +133,10 @@ wolf think start --goal "…" # последователь
128
133
 
129
134
  - Контур поправок замыкается в памяти: жалоба → триаж → исход (`relation outcome_of`) — **поправил → закрепилось → доставилось → окупилось**.
130
135
 
136
+ ### Организация
137
+
138
+ Wolf работает как постоянная проектная организация из временных агентов: **координатор (L0)** держит цель и принимает результат, **исполнитель (L1)** поставляет контекст и диспетчирует, **воркеры (L2)** выполняют одиночные задачи в чистых сессиях. Роли, цикл работы и консилиум для спорных решений — [Organization & Council](https://chekh.github.io/mister-wolf/guide/organization); консилиум спроектирован и в roadmap, иерархия и независимая приёмка работают сегодня. Поправки идут через жалобный контур: жалоба → триаж → исход → мутация playbook'а → следующая сессия работает иначе.
139
+
131
140
  ### Агенты
132
141
 
133
142
  - `wolf scaffold agent|skill|command <name>` — рамка платформы + playbook в памяти + relation одной командой; `--persona` и `--model` для агентов, `--from-playbook <id>` — переиспользовать существующий playbook.
@@ -217,6 +226,8 @@ wolf learn status # здоровье сигнального
217
226
  - [Architecture](docs/guide/architecture.md) — устройство системы
218
227
  - [Индекс документации](docs/README.md)
219
228
 
229
+ Документация фич живёт в `docs/dev/` как конвейер артефактов (requirements → design → plan → test-plan): `wolf scaffold artifact` создаёт папку фичи, `wolf sync` ведёт INDEX.md, `wolf doctor` линтит документы. Внешние скиллы подключаются через skill intake: поиск → ревью → гейт владельца → `npx skills add` → регистрация в памяти Wolf.
230
+
220
231
  ## Разработка
221
232
 
222
233
  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":"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;AAC9C,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,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,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;IACH,CAAC,CAAC,CAAC;AACP,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;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"}