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.
Files changed (141) hide show
  1. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  2. package/dist/adapters/cli/cli-entry.js +4 -0
  3. package/dist/adapters/cli/cli-entry.js.map +1 -1
  4. package/dist/adapters/cli/commands/memory-complain.d.ts.map +1 -1
  5. package/dist/adapters/cli/commands/memory-complain.js +41 -17
  6. package/dist/adapters/cli/commands/memory-complain.js.map +1 -1
  7. package/dist/adapters/cli/commands/memory-init.d.ts +21 -0
  8. package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
  9. package/dist/adapters/cli/commands/memory-init.js +194 -16
  10. package/dist/adapters/cli/commands/memory-init.js.map +1 -1
  11. package/dist/adapters/cli/commands/memory-search.d.ts.map +1 -1
  12. package/dist/adapters/cli/commands/memory-search.js +8 -0
  13. package/dist/adapters/cli/commands/memory-search.js.map +1 -1
  14. package/dist/adapters/cli/commands/memory-sync.d.ts +3 -0
  15. package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -0
  16. package/dist/adapters/cli/commands/memory-sync.js +36 -0
  17. package/dist/adapters/cli/commands/memory-sync.js.map +1 -0
  18. package/dist/adapters/cli/commands/memory-update.d.ts +3 -0
  19. package/dist/adapters/cli/commands/memory-update.d.ts.map +1 -0
  20. package/dist/adapters/cli/commands/memory-update.js +105 -0
  21. package/dist/adapters/cli/commands/memory-update.js.map +1 -0
  22. package/dist/adapters/mcp/mcp-schemas.d.ts +1 -1
  23. package/dist/adapters/mcp/mcp-schemas.d.ts.map +1 -1
  24. package/dist/adapters/mcp/mcp-schemas.js +8 -2
  25. package/dist/adapters/mcp/mcp-schemas.js.map +1 -1
  26. package/dist/adapters/mcp/mcp-tools.d.ts.map +1 -1
  27. package/dist/adapters/mcp/mcp-tools.js +10 -8
  28. package/dist/adapters/mcp/mcp-tools.js.map +1 -1
  29. package/dist/adapters/platforms/claude-adapter.d.ts +2 -2
  30. package/dist/adapters/platforms/claude-adapter.d.ts.map +1 -1
  31. package/dist/adapters/platforms/claude-adapter.js +2 -2
  32. package/dist/adapters/platforms/claude-adapter.js.map +1 -1
  33. package/dist/adapters/platforms/opencode-adapter.d.ts +4 -2
  34. package/dist/adapters/platforms/opencode-adapter.d.ts.map +1 -1
  35. package/dist/adapters/platforms/opencode-adapter.js +16 -4
  36. package/dist/adapters/platforms/opencode-adapter.js.map +1 -1
  37. package/dist/adapters/render/manifest.d.ts +14 -0
  38. package/dist/adapters/render/manifest.d.ts.map +1 -0
  39. package/dist/adapters/render/manifest.js +25 -0
  40. package/dist/adapters/render/manifest.js.map +1 -0
  41. package/dist/adapters/render/opencode/opencode-renderer.d.ts +29 -0
  42. package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -0
  43. package/dist/adapters/render/opencode/opencode-renderer.js +198 -0
  44. package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -0
  45. package/dist/adapters/render/stamp.d.ts +8 -0
  46. package/dist/adapters/render/stamp.d.ts.map +1 -0
  47. package/dist/adapters/render/stamp.js +23 -0
  48. package/dist/adapters/render/stamp.js.map +1 -0
  49. package/dist/adapters/render/templates-root.d.ts +6 -0
  50. package/dist/adapters/render/templates-root.d.ts.map +1 -0
  51. package/dist/adapters/render/templates-root.js +30 -0
  52. package/dist/adapters/render/templates-root.js.map +1 -0
  53. package/dist/adapters/sqlite/sqlite-search-index.d.ts +10 -1
  54. package/dist/adapters/sqlite/sqlite-search-index.d.ts.map +1 -1
  55. package/dist/adapters/sqlite/sqlite-search-index.js +48 -10
  56. package/dist/adapters/sqlite/sqlite-search-index.js.map +1 -1
  57. package/dist/app/use-cases/bootstrap-project.d.ts +4 -2
  58. package/dist/app/use-cases/bootstrap-project.d.ts.map +1 -1
  59. package/dist/app/use-cases/bootstrap-project.js +29 -8
  60. package/dist/app/use-cases/bootstrap-project.js.map +1 -1
  61. package/dist/app/use-cases/generate-recap.d.ts +8 -0
  62. package/dist/app/use-cases/generate-recap.d.ts.map +1 -1
  63. package/dist/app/use-cases/generate-recap.js +34 -1
  64. package/dist/app/use-cases/generate-recap.js.map +1 -1
  65. package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
  66. package/dist/app/use-cases/get-call-injections.js +7 -3
  67. package/dist/app/use-cases/get-call-injections.js.map +1 -1
  68. package/dist/app/use-cases/init-project.d.ts +57 -9
  69. package/dist/app/use-cases/init-project.d.ts.map +1 -1
  70. package/dist/app/use-cases/init-project.js +131 -24
  71. package/dist/app/use-cases/init-project.js.map +1 -1
  72. package/dist/app/use-cases/model-routing.d.ts +30 -0
  73. package/dist/app/use-cases/model-routing.d.ts.map +1 -0
  74. package/dist/app/use-cases/model-routing.js +39 -0
  75. package/dist/app/use-cases/model-routing.js.map +1 -0
  76. package/dist/app/use-cases/seed-base-playbooks.d.ts +26 -0
  77. package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -0
  78. package/dist/app/use-cases/seed-base-playbooks.js +43 -0
  79. package/dist/app/use-cases/seed-base-playbooks.js.map +1 -0
  80. package/dist/app/use-cases/sync-base-set.d.ts +13 -0
  81. package/dist/app/use-cases/sync-base-set.d.ts.map +1 -0
  82. package/dist/app/use-cases/sync-base-set.js +11 -0
  83. package/dist/app/use-cases/sync-base-set.js.map +1 -0
  84. package/dist/domain/governance.d.ts.map +1 -1
  85. package/dist/domain/governance.js +4 -2
  86. package/dist/domain/governance.js.map +1 -1
  87. package/dist/domain/memory-types.d.ts +45 -1
  88. package/dist/domain/memory-types.d.ts.map +1 -1
  89. package/dist/domain/memory-types.js +20 -0
  90. package/dist/domain/memory-types.js.map +1 -1
  91. package/dist/domain/schemas/article-schema.d.ts +1 -1
  92. package/dist/domain/schemas/blocker-schema.d.ts +1 -1
  93. package/dist/domain/schemas/decision-schema.d.ts +1 -1
  94. package/dist/domain/schemas/info-request-schema.d.ts +1 -1
  95. package/dist/domain/schemas/rule-schema.d.ts +1 -1
  96. package/dist/domain/schemas/session-checkpoint-schema.d.ts +1 -1
  97. package/dist/domain/schemas/thread-schema.d.ts +1 -1
  98. package/dist/domain/type-schema-builder.d.ts +11 -2
  99. package/dist/domain/type-schema-builder.d.ts.map +1 -1
  100. package/dist/domain/type-schema-builder.js +41 -0
  101. package/dist/domain/type-schema-builder.js.map +1 -1
  102. package/dist/ports/base-set-renderer.port.d.ts +34 -0
  103. package/dist/ports/base-set-renderer.port.d.ts.map +1 -0
  104. package/dist/ports/base-set-renderer.port.js +2 -0
  105. package/dist/ports/base-set-renderer.port.js.map +1 -0
  106. package/dist/ports/platform-adapter.port.d.ts +7 -1
  107. package/dist/ports/platform-adapter.port.d.ts.map +1 -1
  108. package/package.json +11 -8
  109. package/templates/base/AGENTS.md +28 -0
  110. package/templates/base/README.md +1 -0
  111. package/templates/base/agents/executor-lead.md +96 -0
  112. package/templates/base/agents/mr-wolf.md +89 -0
  113. package/templates/base/agents/steward.md +60 -0
  114. package/templates/base/agents/worker-implementer.md +59 -0
  115. package/templates/base/agents/worker-researcher.md +60 -0
  116. package/templates/base/agents/worker-reviewer.md +59 -0
  117. package/templates/base/commands/analyze-doc.md +11 -0
  118. package/templates/base/commands/complain.md +13 -0
  119. package/templates/base/commands/doc-review.md +15 -0
  120. package/templates/base/playbooks/complaint-protocol.md +112 -0
  121. package/templates/base/playbooks/steward-nastavnik.md +40 -0
  122. package/templates/base/playbooks/wolf-review-lenses.md +50 -0
  123. package/templates/base/playbooks/worker-implementer-playbook.md +59 -0
  124. package/templates/base/playbooks/worker-researcher-playbook.md +59 -0
  125. package/templates/base/playbooks/worker-reviewer-playbook.md +61 -0
  126. package/templates/base/skills/finishing-a-development-branch/SKILL.md +213 -0
  127. package/templates/base/skills/requesting-code-review/SKILL.md +123 -0
  128. package/templates/base/skills/test-driven-development/SKILL.md +391 -0
  129. package/templates/base/skills/using-git-worktrees/SKILL.md +178 -0
  130. package/templates/base/skills/using-skills/SKILL.md +128 -0
  131. package/templates/base/skills/verification-before-completion/SKILL.md +157 -0
  132. package/templates/base/skills/wolf-brainstorm/SKILL.md +167 -0
  133. package/templates/base/skills/wolf-debug/SKILL.md +293 -0
  134. package/templates/base/skills/wolf-execute/SKILL.md +96 -0
  135. package/templates/base/skills/wolf-handoff/SKILL.md +101 -0
  136. package/templates/base/skills/wolf-plan/SKILL.md +177 -0
  137. package/templates/base/skills/wolf-review/SKILL.md +61 -0
  138. package/templates/base/skills/wolf-sdd/SKILL.md +239 -0
  139. package/templates/opencode/README.md +1 -0
  140. package/templates/opencode/plugins/wolf-router.ts +104 -0
  141. 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":"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"}
1
+ {"version":3,"file":"generate-recap.js","sourceRoot":"","sources":["../../../src/app/use-cases/generate-recap.ts"],"names":[],"mappings":"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"}
@@ -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;AAMD,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"}
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 { scanProject } from './scan-project.js';
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` (спека §3, уровень 1): идемпотентный, неинтерактивный.
32
- * Скелет (ensure) → маркер схемы → лёгкий scan (document-ref'ы идемпотентны; глубокое
33
- * наполнение — отдельная команда `wolf bootstrap`) → платформы → реестр.
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, opts?: {
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,mBAAmB,CAAC;AAOhD,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,sFAAsF;IACtF,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,mEAAmE;IACnE,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,OAAO,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAiD5B;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnE"}
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` (спека §3, уровень 1): идемпотентный, неинтерактивный.
17
- * Скелет (ensure) → маркер схемы → лёгкий scan (document-ref'ы идемпотентны; глубокое
18
- * наполнение — отдельная команда `wolf bootstrap`) → платформы → реестр.
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, opts = {}) {
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 scan = await scanProject(deps.scanDeps, baseDir);
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 (opts.platformIds !== undefined) {
33
- // явный список ЗАМЕНЯЕТ набор: wolf-записи платформ вне списка удаляются (спека §3)
34
- const wanted = new Set(opts.platformIds);
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
- platformOutcomes.push({ platform: adapter.id, action: await adapter.writeConfig(baseDir, deps.mcpCommand) });
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
- // авто-детект: объединение найденных; «платформа не детектирована» — warning + skip
51
- const detected = deps.adapters.filter((a) => a.detect(baseDir));
52
- if (detected.length === 0) {
53
- platformOutcomes.push({
54
- platform: 'none',
55
- action: 'skipped',
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
- return { npx: deps.npx, documentCount: scan.documents.length, platformOutcomes };
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":"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"}
1
+ {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,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"}