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.
- package/README.md +22 -11
- package/README.ru.md +22 -11
- 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/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/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/package.json +1 -1
- package/templates/.wolf/router.log +1 -1
- 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/README.md
CHANGED
|
@@ -4,25 +4,30 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
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.
|
|
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
|
|
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:
|
|
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
|

|
|
6
6
|
|
|
7
|
-
> **«I solve problems.»**
|
|
8
|
-
>
|
|
9
7
|
> **Память — носитель. Процессы — суть. Агенты — форма. Инструменты — руки.**
|
|
10
8
|
> И руки накапливаются: каждый полезный скрипт становится постоянным ресурсом проекта.
|
|
9
|
+
>
|
|
10
|
+
> **«I solve problems.»**
|
|
11
11
|
|
|
12
|
-
**Версия концепта:** 3.
|
|
12
|
+
**Версия концепта:** 3.3.1 · Статус: opencode-first, Фазы A–B roadmap v3 реализованы.
|
|
13
13
|
|
|
14
14
|
## Что такое Wolf
|
|
15
15
|
|
|
16
|
-
Mr. Wolf —
|
|
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
|
-
Всё есть память:
|
|
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;
|
|
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"}
|
|
@@ -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"}
|