mister-wolf 1.0.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
- package/dist/adapters/cli/cli-entry.js +4 -0
- package/dist/adapters/cli/cli-entry.js.map +1 -1
- package/dist/adapters/cli/commands/memory-complain.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-complain.js +41 -17
- package/dist/adapters/cli/commands/memory-complain.js.map +1 -1
- package/dist/adapters/cli/commands/memory-init.d.ts +21 -0
- package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-init.js +194 -16
- package/dist/adapters/cli/commands/memory-init.js.map +1 -1
- package/dist/adapters/cli/commands/memory-search.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-search.js +8 -0
- package/dist/adapters/cli/commands/memory-search.js.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.d.ts +3 -0
- package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -0
- package/dist/adapters/cli/commands/memory-sync.js +36 -0
- package/dist/adapters/cli/commands/memory-sync.js.map +1 -0
- package/dist/adapters/cli/commands/memory-update.d.ts +3 -0
- package/dist/adapters/cli/commands/memory-update.d.ts.map +1 -0
- package/dist/adapters/cli/commands/memory-update.js +105 -0
- package/dist/adapters/cli/commands/memory-update.js.map +1 -0
- package/dist/adapters/mcp/mcp-schemas.d.ts +1 -1
- package/dist/adapters/mcp/mcp-schemas.d.ts.map +1 -1
- package/dist/adapters/mcp/mcp-schemas.js +8 -2
- package/dist/adapters/mcp/mcp-schemas.js.map +1 -1
- package/dist/adapters/mcp/mcp-tools.d.ts.map +1 -1
- package/dist/adapters/mcp/mcp-tools.js +10 -8
- package/dist/adapters/mcp/mcp-tools.js.map +1 -1
- package/dist/adapters/platforms/claude-adapter.d.ts +2 -2
- package/dist/adapters/platforms/claude-adapter.d.ts.map +1 -1
- package/dist/adapters/platforms/claude-adapter.js +2 -2
- package/dist/adapters/platforms/claude-adapter.js.map +1 -1
- package/dist/adapters/platforms/opencode-adapter.d.ts +4 -2
- package/dist/adapters/platforms/opencode-adapter.d.ts.map +1 -1
- package/dist/adapters/platforms/opencode-adapter.js +16 -4
- package/dist/adapters/platforms/opencode-adapter.js.map +1 -1
- package/dist/adapters/render/manifest.d.ts +14 -0
- package/dist/adapters/render/manifest.d.ts.map +1 -0
- package/dist/adapters/render/manifest.js +25 -0
- package/dist/adapters/render/manifest.js.map +1 -0
- package/dist/adapters/render/opencode/opencode-renderer.d.ts +29 -0
- package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -0
- package/dist/adapters/render/opencode/opencode-renderer.js +198 -0
- package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -0
- package/dist/adapters/render/stamp.d.ts +8 -0
- package/dist/adapters/render/stamp.d.ts.map +1 -0
- package/dist/adapters/render/stamp.js +23 -0
- package/dist/adapters/render/stamp.js.map +1 -0
- package/dist/adapters/render/templates-root.d.ts +6 -0
- package/dist/adapters/render/templates-root.d.ts.map +1 -0
- package/dist/adapters/render/templates-root.js +30 -0
- package/dist/adapters/render/templates-root.js.map +1 -0
- package/dist/adapters/sqlite/sqlite-search-index.d.ts +10 -1
- package/dist/adapters/sqlite/sqlite-search-index.d.ts.map +1 -1
- package/dist/adapters/sqlite/sqlite-search-index.js +48 -10
- package/dist/adapters/sqlite/sqlite-search-index.js.map +1 -1
- package/dist/app/use-cases/bootstrap-project.d.ts +4 -2
- package/dist/app/use-cases/bootstrap-project.d.ts.map +1 -1
- package/dist/app/use-cases/bootstrap-project.js +29 -8
- package/dist/app/use-cases/bootstrap-project.js.map +1 -1
- package/dist/app/use-cases/generate-recap.d.ts +8 -0
- package/dist/app/use-cases/generate-recap.d.ts.map +1 -1
- package/dist/app/use-cases/generate-recap.js +34 -1
- package/dist/app/use-cases/generate-recap.js.map +1 -1
- package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
- package/dist/app/use-cases/get-call-injections.js +7 -3
- package/dist/app/use-cases/get-call-injections.js.map +1 -1
- package/dist/app/use-cases/init-project.d.ts +57 -9
- package/dist/app/use-cases/init-project.d.ts.map +1 -1
- package/dist/app/use-cases/init-project.js +131 -24
- package/dist/app/use-cases/init-project.js.map +1 -1
- package/dist/app/use-cases/model-routing.d.ts +30 -0
- package/dist/app/use-cases/model-routing.d.ts.map +1 -0
- package/dist/app/use-cases/model-routing.js +39 -0
- package/dist/app/use-cases/model-routing.js.map +1 -0
- package/dist/app/use-cases/seed-base-playbooks.d.ts +26 -0
- package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -0
- package/dist/app/use-cases/seed-base-playbooks.js +43 -0
- package/dist/app/use-cases/seed-base-playbooks.js.map +1 -0
- package/dist/app/use-cases/sync-base-set.d.ts +13 -0
- package/dist/app/use-cases/sync-base-set.d.ts.map +1 -0
- package/dist/app/use-cases/sync-base-set.js +11 -0
- package/dist/app/use-cases/sync-base-set.js.map +1 -0
- package/dist/domain/governance.d.ts.map +1 -1
- package/dist/domain/governance.js +4 -2
- package/dist/domain/governance.js.map +1 -1
- package/dist/domain/memory-types.d.ts +45 -1
- package/dist/domain/memory-types.d.ts.map +1 -1
- package/dist/domain/memory-types.js +20 -0
- package/dist/domain/memory-types.js.map +1 -1
- package/dist/domain/schemas/article-schema.d.ts +1 -1
- package/dist/domain/schemas/blocker-schema.d.ts +1 -1
- package/dist/domain/schemas/decision-schema.d.ts +1 -1
- package/dist/domain/schemas/info-request-schema.d.ts +1 -1
- package/dist/domain/schemas/rule-schema.d.ts +1 -1
- package/dist/domain/schemas/session-checkpoint-schema.d.ts +1 -1
- package/dist/domain/schemas/thread-schema.d.ts +1 -1
- package/dist/domain/type-schema-builder.d.ts +11 -2
- package/dist/domain/type-schema-builder.d.ts.map +1 -1
- package/dist/domain/type-schema-builder.js +41 -0
- package/dist/domain/type-schema-builder.js.map +1 -1
- package/dist/ports/base-set-renderer.port.d.ts +34 -0
- package/dist/ports/base-set-renderer.port.d.ts.map +1 -0
- package/dist/ports/base-set-renderer.port.js +2 -0
- package/dist/ports/base-set-renderer.port.js.map +1 -0
- package/dist/ports/platform-adapter.port.d.ts +7 -1
- package/dist/ports/platform-adapter.port.d.ts.map +1 -1
- package/package.json +11 -8
- package/templates/base/AGENTS.md +28 -0
- package/templates/base/README.md +1 -0
- package/templates/base/agents/executor-lead.md +96 -0
- package/templates/base/agents/mr-wolf.md +89 -0
- package/templates/base/agents/steward.md +60 -0
- package/templates/base/agents/worker-implementer.md +59 -0
- package/templates/base/agents/worker-researcher.md +60 -0
- package/templates/base/agents/worker-reviewer.md +59 -0
- package/templates/base/commands/analyze-doc.md +11 -0
- package/templates/base/commands/complain.md +13 -0
- package/templates/base/commands/doc-review.md +15 -0
- package/templates/base/playbooks/complaint-protocol.md +112 -0
- package/templates/base/playbooks/steward-nastavnik.md +40 -0
- package/templates/base/playbooks/wolf-review-lenses.md +50 -0
- package/templates/base/playbooks/worker-implementer-playbook.md +59 -0
- package/templates/base/playbooks/worker-researcher-playbook.md +59 -0
- package/templates/base/playbooks/worker-reviewer-playbook.md +61 -0
- package/templates/base/skills/finishing-a-development-branch/SKILL.md +213 -0
- package/templates/base/skills/requesting-code-review/SKILL.md +123 -0
- package/templates/base/skills/test-driven-development/SKILL.md +391 -0
- package/templates/base/skills/using-git-worktrees/SKILL.md +178 -0
- package/templates/base/skills/using-skills/SKILL.md +128 -0
- package/templates/base/skills/verification-before-completion/SKILL.md +157 -0
- package/templates/base/skills/wolf-brainstorm/SKILL.md +167 -0
- package/templates/base/skills/wolf-debug/SKILL.md +293 -0
- package/templates/base/skills/wolf-execute/SKILL.md +96 -0
- package/templates/base/skills/wolf-handoff/SKILL.md +101 -0
- package/templates/base/skills/wolf-plan/SKILL.md +177 -0
- package/templates/base/skills/wolf-review/SKILL.md +61 -0
- package/templates/base/skills/wolf-sdd/SKILL.md +239 -0
- package/templates/opencode/README.md +1 -0
- package/templates/opencode/plugins/wolf-router.ts +104 -0
- package/templates/opencode/plugins/wolf-session-start.js +144 -0
|
@@ -1,10 +1,26 @@
|
|
|
1
|
+
import { BOOTSTRAP_THREAD_TITLE } from './bootstrap-project.js';
|
|
2
|
+
/**
|
|
3
|
+
* Правила вывода секции Onboarding (§3):
|
|
4
|
+
* 1. bootstrap-thread active → продолжение-сигнал (покрывает legacy без init-report);
|
|
5
|
+
* 2. иначе init-report (теги wolf-init + onboarding-v2, active) есть, а thread
|
|
6
|
+
* отсутствует вовсе → bootstrap-сигнал; thread paused — тишина (Q4);
|
|
7
|
+
* 3. иначе (нет ни того ни другого; thread completed/archived/paused) — null.
|
|
8
|
+
*/
|
|
9
|
+
function detectOnboarding(all) {
|
|
10
|
+
const thread = all.find((o) => o.type === 'work-thread' && o.title === BOOTSTRAP_THREAD_TITLE);
|
|
11
|
+
if (thread) {
|
|
12
|
+
return thread.status === 'active' ? { kind: 'continue', threadId: thread.id } : null;
|
|
13
|
+
}
|
|
14
|
+
const hasInitReport = all.some((o) => o.type === 'report' && o.status === 'active' && o.tags.includes('wolf-init') && o.tags.includes('onboarding-v2'));
|
|
15
|
+
return hasInitReport ? { kind: 'bootstrap' } : null;
|
|
16
|
+
}
|
|
1
17
|
export async function generateRecap(deps) {
|
|
2
18
|
// ponytail: store.list() — полный reparse всех md (V6); ровно один вызов на отчёт (D1)
|
|
3
19
|
const all = await deps.store.list();
|
|
4
20
|
// Вопросы живут в 'open' (defaultStatus) или 'active' (созданные до введения defaultStatus)
|
|
5
21
|
const openQuestions = all.filter((obj) => obj.type === 'open-question' && (obj.status === 'open' || obj.status === 'active'));
|
|
6
22
|
return {
|
|
7
|
-
activeRules: all.filter((obj) => obj.type === 'rule' && obj.status === 'active'),
|
|
23
|
+
activeRules: all.filter((obj) => obj.type === 'rule' && (obj.status === 'active' || obj.status === 'accepted')),
|
|
8
24
|
activeWorkThreads: all.filter((obj) => obj.type === 'work-thread' && obj.status === 'active'),
|
|
9
25
|
openBlockers: all.filter((obj) => obj.type === 'blocker' && obj.status === 'active'),
|
|
10
26
|
openQuestions,
|
|
@@ -13,6 +29,7 @@ export async function generateRecap(deps) {
|
|
|
13
29
|
.filter((obj) => obj.type === 'decision' && obj.status === 'active')
|
|
14
30
|
.sort((a, b) => b.updated_at.localeCompare(a.updated_at))
|
|
15
31
|
.slice(0, 5),
|
|
32
|
+
onboarding: detectOnboarding(all),
|
|
16
33
|
};
|
|
17
34
|
}
|
|
18
35
|
function section(lines, title, items) {
|
|
@@ -25,9 +42,25 @@ function section(lines, title, items) {
|
|
|
25
42
|
lines.push(item);
|
|
26
43
|
}
|
|
27
44
|
}
|
|
45
|
+
/** Тексты секции — контракт для рамки mr-wolf (§6.2), дословно. */
|
|
46
|
+
function onboardingText(signal) {
|
|
47
|
+
if (signal.kind === 'bootstrap') {
|
|
48
|
+
return ('Onboarding v2: init выполнен, bootstrap — нет. Уточни у пользователя: предложить выполнить ' +
|
|
49
|
+
'`wolf bootstrap` (можно исполнить прямо в сессии: `wolf bootstrap`; в dogfood-репо Wolf — ' +
|
|
50
|
+
'`node dist/bootstrap/cli.js bootstrap`) или следовать пути пользователя. ' +
|
|
51
|
+
'Действия с побочными эффектами — только с согласия пользователя.');
|
|
52
|
+
}
|
|
53
|
+
return ('Onboarding v2: bootstrap выполнен, онбординг не завершён (thread active). Работай под управлением ' +
|
|
54
|
+
'пользователя — свёртка черновиков, глубокое изучение проекта — как решит пользователь; предписанных ' +
|
|
55
|
+
`ролей нет. Когда онбординг завершён — предложи закрыть thread (\`wolf transition ${signal.threadId} ` +
|
|
56
|
+
'completed`) и закрой с согласия пользователя.');
|
|
57
|
+
}
|
|
28
58
|
export function renderRecap(report) {
|
|
29
59
|
const fmtObj = (obj) => `- ${obj.id} [${obj.type}] ${obj.title}`;
|
|
30
60
|
const lines = ['Recap'];
|
|
61
|
+
if (report.onboarding !== null) {
|
|
62
|
+
section(lines, 'Onboarding', [onboardingText(report.onboarding)]);
|
|
63
|
+
}
|
|
31
64
|
section(lines, 'Active rules', report.activeRules.map(fmtObj));
|
|
32
65
|
section(lines, 'Active work threads', report.activeWorkThreads.map(fmtObj));
|
|
33
66
|
section(lines, 'Open blockers', report.openBlockers.map(fmtObj));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-recap.js","sourceRoot":"","sources":["../../../src/app/use-cases/generate-recap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-recap.js","sourceRoot":"","sources":["../../../src/app/use-cases/generate-recap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAehE;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,GAAmB;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,KAAK,KAAK,sBAAsB,CAAC,CAAC;IAC/F,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,CAAC;IACD,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CACnH,CAAC;IACF,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAA4B;IAC9D,uFAAuF;IACvF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEpC,4FAA4F;IAC5F,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAC5F,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;QAC/G,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC7F,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;QACpF,aAAa;QACb,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;QAC3F,eAAe,EAAE,GAAG;aACjB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;aACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aACxD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACd,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAe,EAAE,KAAa,EAAE,KAAe;IAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,SAAS,cAAc,CAAC,MAAwB;IAC9C,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,CACL,6FAA6F;YAC7F,4FAA4F;YAC5F,2EAA2E;YAC3E,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,CACL,oGAAoG;QACpG,sGAAsG;QACtG,oFAAoF,MAAM,CAAC,QAAQ,GAAG;QACtG,+CAA+C,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC7C,MAAM,MAAM,GAAG,CAAC,GAAiB,EAAU,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;IACvF,MAAM,KAAK,GAAa,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,KAAK,EAAE,oBAAoB,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-call-injections.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/get-call-injections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIlD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"get-call-injections.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/get-call-injections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIlD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAWD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,EAC/D,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC5E,OAAO,CAAC,mBAAmB,CAAC,CAwG9B"}
|
|
@@ -3,6 +3,10 @@ import { finalScore } from '../../domain/solve/relevance.js';
|
|
|
3
3
|
function formatBlock(obj) {
|
|
4
4
|
return `- [${obj.id}] ${obj.title} (${obj.confidence}, ${obj.updated_at})\n source: ${obj.id}`;
|
|
5
5
|
}
|
|
6
|
+
/** Машино-состояние (routing-объект моделей) — не руководство для агента: в инъекции никогда. */
|
|
7
|
+
function isMachineState(obj) {
|
|
8
|
+
return Array.isArray(obj.tags) && obj.tags.includes('wolf-routing');
|
|
9
|
+
}
|
|
6
10
|
export async function getCallInjections(deps, input) {
|
|
7
11
|
const now = deps.clock.now();
|
|
8
12
|
const topicTokens = input.topic ? tokenize(input.topic) : [];
|
|
@@ -43,14 +47,14 @@ export async function getCallInjections(deps, input) {
|
|
|
43
47
|
matched.push(l);
|
|
44
48
|
}
|
|
45
49
|
const rules = (await deps.store.list({ type: 'rule', status: 'active' }));
|
|
46
|
-
const keywordRules = rules.filter(kwMatched);
|
|
50
|
+
const keywordRules = rules.filter((r) => !isMachineState(r) && kwMatched(r));
|
|
47
51
|
for (const r of keywordRules) {
|
|
48
52
|
if (!matched.some((m) => m.id === r.id))
|
|
49
53
|
matched.push(r);
|
|
50
54
|
}
|
|
51
55
|
// 3. fallback to rules if no matches (keyword-matched rules excluded)
|
|
52
56
|
if (matched.length === 0) {
|
|
53
|
-
matched = rules.filter((r) => !keywordRules.some((k) => k.id === r.id)).slice(0, 3);
|
|
57
|
+
matched = rules.filter((r) => !isMachineState(r) && !keywordRules.some((k) => k.id === r.id)).slice(0, 3);
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
60
|
else {
|
|
@@ -61,7 +65,7 @@ export async function getCallInjections(deps, input) {
|
|
|
61
65
|
const threadId = typeof input.thread === 'string' ? input.thread : null;
|
|
62
66
|
const rules = (await deps.store.list({ type: 'rule', status: 'active' }));
|
|
63
67
|
for (const r of rules) {
|
|
64
|
-
if (r.scope === 'project' && !matched.some((m) => m.id === r.id)) {
|
|
68
|
+
if (!isMachineState(r) && r.scope === 'project' && !matched.some((m) => m.id === r.id)) {
|
|
65
69
|
matched.push(r);
|
|
66
70
|
}
|
|
67
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-call-injections.js","sourceRoot":"","sources":["../../../src/app/use-cases/get-call-injections.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"get-call-injections.js","sourceRoot":"","sources":["../../../src/app/use-cases/get-call-injections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
import { ProjectInitializer } from '../../ports/project-initializer.port.js';
|
|
2
2
|
import { PlatformAdapter, McpCommand } from '../../ports/platform-adapter.port.js';
|
|
3
|
-
import {
|
|
3
|
+
import { MemoryStore } from '../../ports/memory-store.port.js';
|
|
4
|
+
import { EventLog } from '../../ports/event-log.port.js';
|
|
5
|
+
import { Clock } from '../../ports/clock.port.js';
|
|
6
|
+
import { IdGenerator } from '../../ports/id-generator.port.js';
|
|
7
|
+
import { SearchIndex } from '../../ports/search-index.port.js';
|
|
8
|
+
import { MemoryLock } from '../../ports/memory-lock.port.js';
|
|
9
|
+
import type { MemoryTypeDeclaration } from '../../domain/memory-types.js';
|
|
10
|
+
import { MemoryObject } from '../../domain/schemas/memory-object-schema.js';
|
|
11
|
+
import { RenderAction, ModelContext } from '../../ports/base-set-renderer.port.js';
|
|
4
12
|
/** Минимальный контракт реестра для init (структурно совместим с ProjectsRegistry). */
|
|
5
13
|
export interface ProjectRegistry {
|
|
6
14
|
register(path: string, schemaVersion: number): Promise<void>;
|
|
7
15
|
}
|
|
16
|
+
export interface BaseSetOutcome {
|
|
17
|
+
file: string;
|
|
18
|
+
action: RenderAction;
|
|
19
|
+
reason?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface BaseSetDeps {
|
|
22
|
+
render: (baseDir: string, opts?: {
|
|
23
|
+
models?: ModelContext;
|
|
24
|
+
}) => Promise<BaseSetOutcome[]>;
|
|
25
|
+
seed: (baseDir: string) => Promise<BaseSetOutcome[]>;
|
|
26
|
+
}
|
|
8
27
|
export interface InitProjectDeps {
|
|
9
28
|
initializer: ProjectInitializer;
|
|
10
29
|
registry: ProjectRegistry;
|
|
@@ -12,9 +31,28 @@ export interface InitProjectDeps {
|
|
|
12
31
|
mcpCommand: McpCommand;
|
|
13
32
|
/** true, когда бинарник запущен через npx (try-out: MCP-конфиги не пишем никогда). */
|
|
14
33
|
npx: boolean;
|
|
15
|
-
scanDeps: Parameters<typeof scanProject>[0];
|
|
16
34
|
/** Проставить маркер версии схемы (writeSchemaVersionIfAbsent). */
|
|
17
35
|
markSchemaCurrent: (baseDir: string) => Promise<void>;
|
|
36
|
+
baseSet?: BaseSetDeps;
|
|
37
|
+
/** Память: routing-объект моделей (§4.5) + init-отчёт (§4.1). */
|
|
38
|
+
store: MemoryStore;
|
|
39
|
+
log: EventLog;
|
|
40
|
+
clock: Clock;
|
|
41
|
+
idGen: IdGenerator;
|
|
42
|
+
index?: SearchIndex;
|
|
43
|
+
lock?: MemoryLock;
|
|
44
|
+
declarations?: readonly MemoryTypeDeclaration[];
|
|
45
|
+
/** Версия wolf для секции found отчёта (§4.1); нет — строка версий опускается. */
|
|
46
|
+
wolfVersion?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Входы init v2 (§4 п.4): платформы и модель известны ДО рендера набора. */
|
|
49
|
+
export interface InitProjectInput {
|
|
50
|
+
/** Явный выбор платформ (флаг или TTY-ответ) — авторитетен (§4.4); undefined — дефолт рендера. */
|
|
51
|
+
platformChoice?: string[];
|
|
52
|
+
platformSource?: 'flag' | 'tty' | 'default';
|
|
53
|
+
/** Модель агентов (§4.5): primary всегда известен (Q7/Q11); worker = primary при init. */
|
|
54
|
+
models: ModelContext;
|
|
55
|
+
modelSource?: 'flag' | 'tty';
|
|
18
56
|
}
|
|
19
57
|
export interface PlatformInitOutcome {
|
|
20
58
|
platform: string;
|
|
@@ -23,18 +61,28 @@ export interface PlatformInitOutcome {
|
|
|
23
61
|
}
|
|
24
62
|
export interface InitProjectResult {
|
|
25
63
|
npx: boolean;
|
|
26
|
-
documentCount: number;
|
|
27
64
|
platformOutcomes: PlatformInitOutcome[];
|
|
65
|
+
baseSetOutcomes: BaseSetOutcome[];
|
|
66
|
+
routing: {
|
|
67
|
+
action: 'created' | 'unchanged' | 'superseded' | 'skipped';
|
|
68
|
+
id?: string;
|
|
69
|
+
};
|
|
70
|
+
initReport: {
|
|
71
|
+
action: 'created' | 'skipped';
|
|
72
|
+
id?: string;
|
|
73
|
+
};
|
|
28
74
|
}
|
|
75
|
+
/** Теги init-отчёта — единственный машинный маркер (D4). */
|
|
76
|
+
export declare const INIT_REPORT_TAGS: readonly ["wolf-init", "onboarding-v2"];
|
|
29
77
|
export declare function looksLikeProjectRoot(dir: string): boolean;
|
|
78
|
+
/** Guard идемпотентности отчёта (§4.1): активный report с тегами wolf-init+onboarding-v2. */
|
|
79
|
+
export declare function findInitReport(store: MemoryStore): Promise<MemoryObject | null>;
|
|
30
80
|
/**
|
|
31
|
-
* `wolf init` (спека §
|
|
32
|
-
*
|
|
33
|
-
*
|
|
81
|
+
* `wolf init` v2 (спека §4, onboarding-pipeline-v2): без скана (D1/F8 — полный скан живёт
|
|
82
|
+
* в bootstrap), платформы/модель до рендера, routing-объект до рендера, opencode-конфиг
|
|
83
|
+
* безусловно по факту рендера набора (D2/F4), init-отчёт с guard по тегам (D4).
|
|
34
84
|
*/
|
|
35
|
-
export declare function initProject(deps: InitProjectDeps, baseDir: string,
|
|
36
|
-
platformIds?: string[];
|
|
37
|
-
}): Promise<InitProjectResult>;
|
|
85
|
+
export declare function initProject(deps: InitProjectDeps, baseDir: string, input: InitProjectInput): Promise<InitProjectResult>;
|
|
38
86
|
/**
|
|
39
87
|
* §6: повреждённый .wolf → неинтерактивное восстановление:
|
|
40
88
|
* битый yaml → бэкап в .wolf/backup/<ts>/ + дефолтный рендер.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +1,74 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import * as fs from 'fs/promises';
|
|
3
|
-
import { join } from 'path';
|
|
3
|
+
import { join, basename } from 'path';
|
|
4
4
|
import yaml from 'js-yaml';
|
|
5
|
-
import { scanProject } from './scan-project.js';
|
|
6
5
|
import { CURRENT_SCHEMA_VERSION } from '../../adapters/fs/schema-version.js';
|
|
7
6
|
import { renderConfigYaml } from '../../adapters/fs/config-file.js';
|
|
8
7
|
import { configPath } from '../../adapters/fs/project-paths.js';
|
|
9
8
|
import { writeFileAtomic } from '../../adapters/fs/markdown-memory-store.js';
|
|
10
9
|
import { UserFacingError } from '../../domain/errors.js';
|
|
10
|
+
import { addMemoryObject } from './add-memory-object.js';
|
|
11
|
+
import { upsertModelRouting } from './model-routing.js';
|
|
12
|
+
/** Теги init-отчёта — единственный машинный маркер (D4). */
|
|
13
|
+
export const INIT_REPORT_TAGS = ['wolf-init', 'onboarding-v2'];
|
|
11
14
|
const PROJECT_ROOT_MARKERS = ['package.json', '.git', 'pyproject.toml', 'go.mod', 'Cargo.toml', 'README.md'];
|
|
12
15
|
export function looksLikeProjectRoot(dir) {
|
|
13
16
|
return PROJECT_ROOT_MARKERS.some((marker) => existsSync(join(dir, marker)));
|
|
14
17
|
}
|
|
18
|
+
/** Guard идемпотентности отчёта (§4.1): активный report с тегами wolf-init+onboarding-v2. */
|
|
19
|
+
export async function findInitReport(store) {
|
|
20
|
+
const reports = await store.list({ type: 'report' });
|
|
21
|
+
const active = reports.filter((o) => o.status === 'active' && INIT_REPORT_TAGS.every((t) => o.tags.includes(t)));
|
|
22
|
+
return active.length > 0 ? active[0] : null;
|
|
23
|
+
}
|
|
15
24
|
/**
|
|
16
|
-
* `wolf init` (спека §
|
|
17
|
-
*
|
|
18
|
-
*
|
|
25
|
+
* `wolf init` v2 (спека §4, onboarding-pipeline-v2): без скана (D1/F8 — полный скан живёт
|
|
26
|
+
* в bootstrap), платформы/модель до рендера, routing-объект до рендера, opencode-конфиг
|
|
27
|
+
* безусловно по факту рендера набора (D2/F4), init-отчёт с guard по тегам (D4).
|
|
19
28
|
*/
|
|
20
|
-
export async function initProject(deps, baseDir,
|
|
29
|
+
export async function initProject(deps, baseDir, input) {
|
|
21
30
|
if (!looksLikeProjectRoot(baseDir)) {
|
|
22
31
|
throw new UserFacingError('Not a project root (no package.json/.git/pyproject.toml/go.mod/Cargo.toml/README.md found). cd into your project first.');
|
|
23
32
|
}
|
|
24
33
|
await deps.initializer.initialize(baseDir);
|
|
25
34
|
await deps.markSchemaCurrent(baseDir);
|
|
26
|
-
const
|
|
35
|
+
const memDeps = {
|
|
36
|
+
store: deps.store,
|
|
37
|
+
log: deps.log,
|
|
38
|
+
clock: deps.clock,
|
|
39
|
+
idGen: deps.idGen,
|
|
40
|
+
index: deps.index,
|
|
41
|
+
lock: deps.lock,
|
|
42
|
+
declarations: deps.declarations,
|
|
43
|
+
};
|
|
44
|
+
// §4 п.4/§4.5: routing-объект до рендера — рендер подставляет модели. npx молчит (§4 п.6).
|
|
45
|
+
const routing = deps.npx
|
|
46
|
+
? { action: 'skipped' }
|
|
47
|
+
: await upsertModelRouting(memDeps, input.models, 'wolf-init');
|
|
48
|
+
// §4 п.5: рендер базового набора с подстановкой моделей (AGENTS.md — частью рендера, §4.2)
|
|
49
|
+
const baseSetOutcomes = [];
|
|
50
|
+
if (deps.baseSet) {
|
|
51
|
+
if (deps.npx) {
|
|
52
|
+
baseSetOutcomes.push({ file: '(base set)', action: 'skipped', reason: 'npx try-out не пишет набор (спека §7)' });
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
baseSetOutcomes.push(...(await deps.baseSet.render(baseDir, { models: input.models })));
|
|
56
|
+
baseSetOutcomes.push(...(await deps.baseSet.seed(baseDir)));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// §4 п.6: платформы (D2+D10/F4)
|
|
27
60
|
const platformOutcomes = [];
|
|
28
61
|
if (deps.npx) {
|
|
29
62
|
// try-out: память создаём, конфиги — никогда (спека §3, npx-путь)
|
|
30
63
|
platformOutcomes.push({ platform: 'npx', action: 'skipped', reason: 'npx try-out never writes MCP configs' });
|
|
31
64
|
}
|
|
32
|
-
else if (
|
|
33
|
-
// явный
|
|
34
|
-
const wanted = new Set(
|
|
65
|
+
else if (input.platformChoice !== undefined) {
|
|
66
|
+
// явный выбор (флаг/TTY) ЗАМЕНЯЕТ набор: wolf-записи платформ вне списка удаляются (§4.4 п.1)
|
|
67
|
+
const wanted = new Set(input.platformChoice);
|
|
35
68
|
for (const adapter of deps.adapters) {
|
|
36
69
|
if (wanted.has(adapter.id)) {
|
|
37
|
-
|
|
70
|
+
const r = await adapter.writeConfig(baseDir, deps.mcpCommand);
|
|
71
|
+
platformOutcomes.push({ platform: adapter.id, action: r.action, reason: r.reason });
|
|
38
72
|
}
|
|
39
73
|
else if (adapter.detect(baseDir)) {
|
|
40
74
|
const removed = await adapter.removeWolf(baseDir);
|
|
@@ -47,23 +81,96 @@ export async function initProject(deps, baseDir, opts = {}) {
|
|
|
47
81
|
}
|
|
48
82
|
}
|
|
49
83
|
else {
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
action:
|
|
56
|
-
reason: 'no platform detected; use --platform opencode|claude',
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
for (const adapter of detected) {
|
|
61
|
-
platformOutcomes.push({ platform: adapter.id, action: await adapter.writeConfig(baseDir, deps.mcpCommand) });
|
|
84
|
+
// неинтерактивный дефолт (§4.4 п.3): opencode — безусловно, по факту рендера набора
|
|
85
|
+
// (D2: детекция не гейтит; F4); прочие платформы — по маркерам, не зависящим от рендера
|
|
86
|
+
for (const adapter of deps.adapters) {
|
|
87
|
+
if (adapter.id === 'opencode' || adapter.detect(baseDir)) {
|
|
88
|
+
const r = await adapter.writeConfig(baseDir, deps.mcpCommand);
|
|
89
|
+
platformOutcomes.push({ platform: adapter.id, action: r.action, reason: r.reason });
|
|
62
90
|
}
|
|
63
91
|
}
|
|
64
92
|
}
|
|
93
|
+
// §4 п.8: реестр проектов
|
|
65
94
|
await deps.registry.register(baseDir, CURRENT_SCHEMA_VERSION);
|
|
66
|
-
|
|
95
|
+
// §4 п.9: init-отчёт (D4) — guard по тегам, повторный init не дублирует; npx молчит (§4 п.6)
|
|
96
|
+
let initReport;
|
|
97
|
+
if (deps.npx) {
|
|
98
|
+
initReport = { action: 'skipped' };
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const existing = await findInitReport(deps.store);
|
|
102
|
+
if (existing) {
|
|
103
|
+
initReport = { action: 'skipped', id: existing.id };
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
const { object } = await addMemoryObject(memDeps, {
|
|
107
|
+
type: 'report',
|
|
108
|
+
title: `Init report: ${basename(baseDir)}`,
|
|
109
|
+
body: renderInitReportBody(deps, input, { baseSetOutcomes, platformOutcomes, routingAction: routing.action }),
|
|
110
|
+
createdBy: 'wolf-init',
|
|
111
|
+
tags: [...INIT_REPORT_TAGS],
|
|
112
|
+
importance: 0.7,
|
|
113
|
+
});
|
|
114
|
+
initReport = { action: 'created', id: object.id };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { npx: deps.npx, platformOutcomes, baseSetOutcomes, routing, initReport };
|
|
118
|
+
}
|
|
119
|
+
/** Тело init-отчёта (§4.1): made / found / needs-fix. */
|
|
120
|
+
function renderInitReportBody(deps, input, outcomes) {
|
|
121
|
+
const { baseSetOutcomes, platformOutcomes, routingAction } = outcomes;
|
|
122
|
+
const platformSource = input.platformSource ?? (input.platformChoice ? 'flag' : 'default');
|
|
123
|
+
const selectedPlatforms = input.platformChoice ??
|
|
124
|
+
platformOutcomes.filter((o) => o.action !== 'removed' && o.action !== 'skipped').map((o) => o.platform);
|
|
125
|
+
const modelSource = input.modelSource ?? 'flag';
|
|
126
|
+
const agentsMd = baseSetOutcomes.find((o) => o.file === 'AGENTS.md');
|
|
127
|
+
const made = [];
|
|
128
|
+
for (const o of baseSetOutcomes) {
|
|
129
|
+
if (o.file !== 'AGENTS.md')
|
|
130
|
+
made.push(`- набор: ${o.file} — ${o.action}${o.reason ? ` (${o.reason})` : ''}`);
|
|
131
|
+
}
|
|
132
|
+
for (const o of platformOutcomes) {
|
|
133
|
+
if (o.action !== 'removed' && o.action !== 'skipped')
|
|
134
|
+
made.push(`- конфиг платформы ${o.platform}: ${o.action}`);
|
|
135
|
+
}
|
|
136
|
+
if (agentsMd)
|
|
137
|
+
made.push(`- AGENTS.md: ${agentsMd.action}`);
|
|
138
|
+
made.push(`- платформы: ${selectedPlatforms.join(', ') || '—'} (источник: ${platformSource})`);
|
|
139
|
+
made.push(`- модель: primary ${input.models.primary} (источник: ${modelSource}) — подставлена всем агентам (worker = primary)`);
|
|
140
|
+
made.push(`- routing-объект моделей: ${routingAction}`);
|
|
141
|
+
const found = [];
|
|
142
|
+
const skippedFiles = baseSetOutcomes.filter((o) => o.action === 'skipped' && o.file !== '(base set)');
|
|
143
|
+
if (skippedFiles.length > 0)
|
|
144
|
+
found.push(`- существовавшие файлы (skipped): ${skippedFiles.map((o) => o.file).join(', ')}`);
|
|
145
|
+
if (agentsMd && agentsMd.action !== 'created')
|
|
146
|
+
found.push(`- AGENTS.md уже существовал (${agentsMd.action})`);
|
|
147
|
+
const versions = [];
|
|
148
|
+
if (deps.wolfVersion)
|
|
149
|
+
versions.push(`wolf ${deps.wolfVersion}`);
|
|
150
|
+
versions.push(`schema v${CURRENT_SCHEMA_VERSION}`);
|
|
151
|
+
found.push(`- версии: ${versions.join(', ')}`);
|
|
152
|
+
const needsFix = [];
|
|
153
|
+
for (const o of platformOutcomes) {
|
|
154
|
+
if (o.reason && o.action !== 'removed')
|
|
155
|
+
needsFix.push(`- ${o.platform}: ${o.reason}`);
|
|
156
|
+
}
|
|
157
|
+
// §4.4 граничный случай: явный выбор без opencode — набор отрендерен, но MCP не подключён (осознанное состояние)
|
|
158
|
+
if (input.platformChoice !== undefined && !input.platformChoice.includes('opencode')) {
|
|
159
|
+
needsFix.push('- opencode вне списка --platform: агенты Wolf отрендерены в .opencode/, но mcp.wolf/default_agent не записаны; подключите: wolf init --platform opencode,…');
|
|
160
|
+
}
|
|
161
|
+
const mcpWritten = platformOutcomes.some((o) => o.action === 'written' || o.action === 'replaced');
|
|
162
|
+
if (mcpWritten)
|
|
163
|
+
needsFix.push('- подключите MCP: перезапустите платформу (opencode подхватит mcp.wolf и default_agent)');
|
|
164
|
+
return [
|
|
165
|
+
'## Сделано (made)',
|
|
166
|
+
...made,
|
|
167
|
+
'',
|
|
168
|
+
'## Обнаружено (found)',
|
|
169
|
+
...found,
|
|
170
|
+
'',
|
|
171
|
+
'## Требует поправки (needs-fix)',
|
|
172
|
+
...needsFix,
|
|
173
|
+
].join('\n');
|
|
67
174
|
}
|
|
68
175
|
/**
|
|
69
176
|
* §6: повреждённый .wolf → неинтерактивное восстановление:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,IAAI,MAAM,SAAS,CAAC;AAW3B,OAAO,EAA8B,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA+DxD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,eAAe,CAAU,CAAC;AAExE,MAAM,oBAAoB,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAE7G,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAkB;IACrD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAqB,EACrB,OAAe,EACf,KAAuB;IAEvB,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CACvB,yHAAyH,CAC1H,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;IAEF,2FAA2F;IAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG;QACtB,CAAC,CAAE,EAAE,MAAM,EAAE,SAAS,EAAY;QAClC,CAAC,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEjE,2FAA2F;IAC3F,MAAM,eAAe,GAAqB,EAAE,CAAC;IAC7C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC,CAAC;QACnH,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACxF,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,gBAAgB,GAA0B,EAAE,CAAC;IACnD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,kEAAkE;QAClE,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC,CAAC;IAChH,CAAC;SAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC9C,8FAA8F;QAC9F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9D,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAClD,gBAAgB,CAAC,IAAI,CAAC;oBACpB,QAAQ,EAAE,OAAO,CAAC,EAAE;oBACpB,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,eAAe;iBAC3E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,oFAAoF;QACpF,wFAAwF;QACxF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,EAAE,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9D,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IAE9D,6FAA6F;IAC7F,IAAI,UAA2C,CAAC;IAChD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,UAAU,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE;gBAChD,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,gBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC1C,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7G,SAAS,EAAE,WAAW;gBACtB,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC;gBAC3B,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,UAAU,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACnF,CAAC;AAED,yDAAyD;AACzD,SAAS,oBAAoB,CAC3B,IAAqB,EACrB,KAAuB,EACvB,QAIC;IAED,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;IACtE,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3F,MAAM,iBAAiB,GACrB,KAAK,CAAC,cAAc;QACpB,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1G,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC;IAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAErE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,CAAC,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,cAAc,GAAG,CAAC,CAAC;IAC/F,IAAI,CAAC,IAAI,CACP,qBAAqB,KAAK,CAAC,MAAM,CAAC,OAAO,eAAe,WAAW,iDAAiD,CACrH,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,6BAA6B,aAAa,EAAE,CAAC,CAAC;IAExD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACtG,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,qCAAqC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChG,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,gCAAgC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9G,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,WAAW;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,IAAI,CAAC,WAAW,sBAAsB,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,iHAAiH;IACjH,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACrF,QAAQ,CAAC,IAAI,CACX,4JAA4J,CAC7J,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACnG,IAAI,UAAU;QACZ,QAAQ,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;IAE3G,OAAO;QACL,mBAAmB;QACnB,GAAG,IAAI;QACP,EAAE;QACF,uBAAuB;QACvB,GAAG,KAAK;QACR,EAAE;QACF,iCAAiC;QACjC,GAAG,QAAQ;KACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,oCAAoC;IAC9C,CAAC;IACD,wEAAwE;IACxE,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,SAAS,CAAC,CAAC,oCAAoC;IAC1D,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO;IAE1D,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAC3D,MAAM,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MemoryStore } from '../../ports/memory-store.port.js';
|
|
2
|
+
import { EventLog } from '../../ports/event-log.port.js';
|
|
3
|
+
import { Clock } from '../../ports/clock.port.js';
|
|
4
|
+
import { IdGenerator } from '../../ports/id-generator.port.js';
|
|
5
|
+
import { SearchIndex } from '../../ports/search-index.port.js';
|
|
6
|
+
import { MemoryLock } from '../../ports/memory-lock.port.js';
|
|
7
|
+
import { MemoryObject } from '../../domain/schemas/memory-object-schema.js';
|
|
8
|
+
import type { MemoryTypeDeclaration } from '../../domain/memory-types.js';
|
|
9
|
+
import { ModelContext } from '../../ports/base-set-renderer.port.js';
|
|
10
|
+
export declare const ROUTING_TAGS: readonly ["wolf-routing", "models"];
|
|
11
|
+
export interface ModelRoutingDeps {
|
|
12
|
+
store: MemoryStore;
|
|
13
|
+
log: EventLog;
|
|
14
|
+
clock: Clock;
|
|
15
|
+
idGen: IdGenerator;
|
|
16
|
+
index?: SearchIndex;
|
|
17
|
+
lock?: MemoryLock;
|
|
18
|
+
declarations?: readonly MemoryTypeDeclaration[];
|
|
19
|
+
}
|
|
20
|
+
export interface UpsertModelRoutingResult {
|
|
21
|
+
action: 'created' | 'unchanged' | 'superseded';
|
|
22
|
+
id: string;
|
|
23
|
+
supersededId?: string;
|
|
24
|
+
}
|
|
25
|
+
/** Guard (как init-отчёт §4.1): активный объект по тегам; один — первый. */
|
|
26
|
+
export declare function findModelRouting(store: MemoryStore): Promise<MemoryObject | null>;
|
|
27
|
+
/** Машинно-читаемые строки `primary: <id>` / `worker: <id>` в body. */
|
|
28
|
+
export declare function parseModelRouting(obj: MemoryObject): ModelContext | null;
|
|
29
|
+
export declare function upsertModelRouting(deps: ModelRoutingDeps, models: ModelContext, createdBy: string): Promise<UpsertModelRoutingResult>;
|
|
30
|
+
//# sourceMappingURL=model-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-routing.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/model-routing.ts"],"names":[],"mappings":"AAIA,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,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAIrE,eAAO,MAAM,YAAY,qCAAsC,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,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,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,4EAA4E;AAC5E,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAIvF;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI,CAIxE;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC,CAsBnC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { addMemoryObject } from './add-memory-object.js';
|
|
2
|
+
import { supersedeMemoryObject } from './supersede-memory-object.js';
|
|
3
|
+
export const ROUTING_TAGS = ['wolf-routing', 'models'];
|
|
4
|
+
/** Guard (как init-отчёт §4.1): активный объект по тегам; один — первый. */
|
|
5
|
+
export async function findModelRouting(store) {
|
|
6
|
+
const rules = await store.list({ type: 'rule' });
|
|
7
|
+
const active = rules.filter((o) => o.status === 'active' && ROUTING_TAGS.every((t) => o.tags.includes(t)));
|
|
8
|
+
return active.length > 0 ? active[0] : null;
|
|
9
|
+
}
|
|
10
|
+
/** Машинно-читаемые строки `primary: <id>` / `worker: <id>` в body. */
|
|
11
|
+
export function parseModelRouting(obj) {
|
|
12
|
+
const primary = obj.body.match(/^primary:[ \t]*(\S+)/m)?.[1];
|
|
13
|
+
const worker = obj.body.match(/^worker:[ \t]*(\S+)/m)?.[1];
|
|
14
|
+
return primary && worker ? { primary, worker } : null;
|
|
15
|
+
}
|
|
16
|
+
export async function upsertModelRouting(deps, models, createdBy) {
|
|
17
|
+
const existing = await findModelRouting(deps.store);
|
|
18
|
+
if (existing) {
|
|
19
|
+
const parsed = parseModelRouting(existing);
|
|
20
|
+
if (parsed && parsed.primary === models.primary && parsed.worker === models.worker) {
|
|
21
|
+
return { action: 'unchanged', id: existing.id };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const { object } = await addMemoryObject(deps, {
|
|
25
|
+
type: 'rule',
|
|
26
|
+
title: 'Routing: модели агентов',
|
|
27
|
+
body: `Модели агентов базового набора (onboarding v2, §4.5).\nprimary: ${models.primary}\nworker: ${models.worker}\n`,
|
|
28
|
+
createdBy,
|
|
29
|
+
tags: [...ROUTING_TAGS],
|
|
30
|
+
memoryClass: 'working',
|
|
31
|
+
extra: { scope: 'project' },
|
|
32
|
+
});
|
|
33
|
+
if (existing) {
|
|
34
|
+
await supersedeMemoryObject(deps, existing.id, object.id);
|
|
35
|
+
return { action: 'superseded', id: object.id, supersededId: existing.id };
|
|
36
|
+
}
|
|
37
|
+
return { action: 'created', id: object.id };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=model-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-routing.js","sourceRoot":"","sources":["../../../src/app/use-cases/model-routing.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAU,CAAC;AAkBhE,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAkB;IACvD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,iBAAiB,CAAC,GAAiB;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAsB,EACtB,MAAoB,EACpB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACnF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;QAC7C,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,mEAAmE,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,MAAM,IAAI;QACrH,SAAS;QACT,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC;QACvB,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC5B,CAAC,CAAC;IACH,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface SeedOutcome {
|
|
2
|
+
file: string;
|
|
3
|
+
action: 'created' | 'skipped';
|
|
4
|
+
reason?: string;
|
|
5
|
+
}
|
|
6
|
+
export type SeedAddFn = (input: {
|
|
7
|
+
type: 'playbook';
|
|
8
|
+
title: string;
|
|
9
|
+
body: string;
|
|
10
|
+
createdBy: string;
|
|
11
|
+
tags: string[];
|
|
12
|
+
extra: {
|
|
13
|
+
owner_skill: string;
|
|
14
|
+
version: string;
|
|
15
|
+
steps: string[];
|
|
16
|
+
};
|
|
17
|
+
}) => Promise<unknown>;
|
|
18
|
+
export interface SeedDeps {
|
|
19
|
+
files: Map<string, string>;
|
|
20
|
+
add: SeedAddFn;
|
|
21
|
+
/** Опциональный предикат «этот owner_skill уже посеян» (по умолчанию — нет, т.к. add сам валидирует). */
|
|
22
|
+
isSeeded?: (ownerSkill: string) => Promise<boolean>;
|
|
23
|
+
}
|
|
24
|
+
/** Посев (спека §7): скип по owner_skill (MAJ-3/C2), не по пересечению тегов. */
|
|
25
|
+
export declare function seedBasePlaybooks(deps: SeedDeps): Promise<SeedOutcome[]>;
|
|
26
|
+
//# sourceMappingURL=seed-base-playbooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-base-playbooks.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/seed-base-playbooks.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAClE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvB,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,GAAG,EAAE,SAAS,CAAC;IACf,yGAAyG;IACzG,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAaD,iFAAiF;AACjF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA4B9E"}
|