@soleri/forge 9.7.2 → 9.9.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 (39) hide show
  1. package/dist/agent-schema.d.ts +177 -6
  2. package/dist/agent-schema.js +58 -0
  3. package/dist/agent-schema.js.map +1 -1
  4. package/dist/compose-claude-md.js +56 -3
  5. package/dist/compose-claude-md.js.map +1 -1
  6. package/dist/domain-manager.d.ts +1 -0
  7. package/dist/domain-manager.js +57 -1
  8. package/dist/domain-manager.js.map +1 -1
  9. package/dist/knowledge-installer.d.ts +2 -0
  10. package/dist/knowledge-installer.js +107 -1
  11. package/dist/knowledge-installer.js.map +1 -1
  12. package/dist/lib.d.ts +1 -1
  13. package/dist/lib.js +1 -1
  14. package/dist/lib.js.map +1 -1
  15. package/dist/scaffold-filetree.d.ts +12 -0
  16. package/dist/scaffold-filetree.js +356 -10
  17. package/dist/scaffold-filetree.js.map +1 -1
  18. package/dist/scaffolder.js +12 -0
  19. package/dist/scaffolder.js.map +1 -1
  20. package/dist/skills/subagent-driven-development/SKILL.md +87 -20
  21. package/dist/templates/setup-script.js +71 -0
  22. package/dist/templates/setup-script.js.map +1 -1
  23. package/dist/templates/shared-rules.js +163 -6
  24. package/dist/templates/shared-rules.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/__tests__/domain-manager.test.ts +140 -0
  27. package/src/__tests__/scaffold-filetree.test.ts +326 -1
  28. package/src/__tests__/scaffolder.test.ts +7 -5
  29. package/src/__tests__/shared-rules.test.ts +48 -0
  30. package/src/agent-schema.ts +66 -0
  31. package/src/compose-claude-md.ts +63 -3
  32. package/src/domain-manager.ts +74 -1
  33. package/src/knowledge-installer.ts +124 -1
  34. package/src/lib.ts +6 -1
  35. package/src/scaffold-filetree.ts +404 -10
  36. package/src/scaffolder.ts +17 -0
  37. package/src/skills/subagent-driven-development/SKILL.md +87 -20
  38. package/src/templates/setup-script.ts +71 -0
  39. package/src/templates/shared-rules.ts +166 -6
@@ -14,6 +14,62 @@ import { AgentYamlSchema } from './agent-schema.js';
14
14
  import { getEngineRulesContent } from './templates/shared-rules.js';
15
15
  import { composeClaudeMd } from './compose-claude-md.js';
16
16
  import { generateSkills } from './templates/skills.js';
17
+ // ─── Skills Registry ─────────────────────────────────────────────────
18
+ /**
19
+ * Skills classified as essential (always scaffolded by default) or optional
20
+ * (installed on demand via `soleri skills install`).
21
+ */
22
+ export const SKILLS_REGISTRY = {
23
+ 'agent-guide': 'essential',
24
+ 'agent-persona': 'essential',
25
+ 'vault-navigator': 'essential',
26
+ 'vault-capture': 'essential',
27
+ 'systematic-debugging': 'essential',
28
+ 'writing-plans': 'essential',
29
+ 'context-resume': 'essential',
30
+ // ─── Optional (installed on demand) ────────────
31
+ 'agent-dev': 'optional',
32
+ 'agent-issues': 'optional',
33
+ 'brain-debrief': 'optional',
34
+ brainstorming: 'optional',
35
+ 'code-patrol': 'optional',
36
+ 'deep-review': 'optional',
37
+ 'deliver-and-ship': 'optional',
38
+ 'discovery-phase': 'optional',
39
+ 'env-setup': 'optional',
40
+ 'executing-plans': 'optional',
41
+ 'finishing-a-development-branch': 'optional',
42
+ 'fix-and-learn': 'optional',
43
+ 'health-check': 'optional',
44
+ 'knowledge-harvest': 'optional',
45
+ 'mcp-doctor': 'optional',
46
+ 'onboard-me': 'optional',
47
+ 'parallel-execute': 'optional',
48
+ retrospective: 'optional',
49
+ 'second-opinion': 'optional',
50
+ 'subagent-driven-development': 'optional',
51
+ 'test-driven-development': 'optional',
52
+ 'using-git-worktrees': 'optional',
53
+ 'vault-curate': 'optional',
54
+ 'vault-smells': 'optional',
55
+ 'verification-before-completion': 'optional',
56
+ 'yolo-mode': 'optional',
57
+ };
58
+ /** Names of essential skills (always scaffolded when skillsFilter is 'essential'). */
59
+ export const ESSENTIAL_SKILLS = Object.entries(SKILLS_REGISTRY)
60
+ .filter(([, tier]) => tier === 'essential')
61
+ .map(([name]) => name);
62
+ /**
63
+ * Resolve the skill names to scaffold based on the skillsFilter config value.
64
+ * Returns null when all skills should be included (no filtering).
65
+ */
66
+ export function resolveSkillsFilter(skillsFilter) {
67
+ if (skillsFilter === 'all')
68
+ return null; // null = include all
69
+ if (skillsFilter === 'essential')
70
+ return ESSENTIAL_SKILLS;
71
+ return skillsFilter; // explicit list
72
+ }
17
73
  const BUILTIN_WORKFLOWS = [
18
74
  {
19
75
  name: 'feature-dev',
@@ -53,7 +109,9 @@ When building a new feature, adding functionality, or creating components.
53
109
  - Link new entries to related knowledge: \`op:link_entries\`
54
110
  - Complete orchestration: \`op:orchestrate_complete\`
55
111
  `,
56
- gates: `gates:
112
+ gates: `# Workflow gates — engine reads these and enforces them during plan execution.
113
+ # Format: phase (brainstorming|pre-execution|post-task|completion), requirement, check
114
+ gates:
57
115
  - phase: brainstorming
58
116
  requirement: Requirements are clear and user has approved the approach
59
117
  check: user-approval
@@ -70,7 +128,9 @@ When building a new feature, adding functionality, or creating components.
70
128
  requirement: Knowledge captured to vault with links
71
129
  check: knowledge-captured
72
130
  `,
73
- tools: `tools:
131
+ tools: `# Workflow tools — engine merges these into plan steps.
132
+ # Format: list of operation strings (agentId_facade op:operation_name)
133
+ tools:
74
134
  - soleri_vault op:search_intelligent
75
135
  - soleri_vault op:capture_knowledge
76
136
  - soleri_links op:link_entries
@@ -111,7 +171,9 @@ When fixing bugs, resolving errors, or addressing regressions.
111
171
  - If the bug reveals a pattern or anti-pattern, capture it: \`op:capture_knowledge\`
112
172
  - Complete orchestration: \`op:orchestrate_complete\`
113
173
  `,
114
- gates: `gates:
174
+ gates: `# Workflow gates — engine reads these and enforces them during plan execution.
175
+ # Format: phase (brainstorming|pre-execution|post-task|completion), requirement, check
176
+ gates:
115
177
  - phase: pre-execution
116
178
  requirement: Root cause identified and fix plan approved
117
179
  check: plan-approved
@@ -124,7 +186,9 @@ When fixing bugs, resolving errors, or addressing regressions.
124
186
  requirement: Anti-pattern captured if applicable
125
187
  check: knowledge-captured
126
188
  `,
127
- tools: `tools:
189
+ tools: `# Workflow tools — engine merges these into plan steps.
190
+ # Format: list of operation strings (agentId_facade op:operation_name)
191
+ tools:
128
192
  - soleri_vault op:search_intelligent
129
193
  - soleri_vault op:capture_knowledge
130
194
  - soleri_plan op:create_plan
@@ -158,12 +222,16 @@ When reviewing code, auditing quality, or checking for issues.
158
222
  ### 4. Capture
159
223
  - If review reveals new patterns or anti-patterns, capture them: \`op:capture_knowledge\`
160
224
  `,
161
- gates: `gates:
225
+ gates: `# Workflow gates — engine reads these and enforces them during plan execution.
226
+ # Format: phase (brainstorming|pre-execution|post-task|completion), requirement, check
227
+ gates:
162
228
  - phase: completion
163
229
  requirement: All blocking issues addressed
164
230
  check: issues-resolved
165
231
  `,
166
- tools: `tools:
232
+ tools: `# Workflow tools — engine merges these into plan steps.
233
+ # Format: list of operation strings (agentId_facade op:operation_name)
234
+ tools:
167
235
  - soleri_vault op:search_intelligent
168
236
  - soleri_vault op:capture_knowledge
169
237
  - soleri_brain op:recommend
@@ -195,7 +263,9 @@ Before crossing a context window boundary — \`/clear\`, context compaction, or
195
263
  - Use plan IDs to look up active plans: \`op:orchestrate_status\`
196
264
  - Continue from where the handoff left off
197
265
  `,
198
- gates: `gates:
266
+ gates: `# Workflow gates — engine reads these and enforces them during plan execution.
267
+ # Format: phase (brainstorming|pre-execution|post-task|completion), requirement, check
268
+ gates:
199
269
  - phase: pre-transition
200
270
  requirement: Handoff document generated with current state
201
271
  check: handoff-generated
@@ -204,7 +274,9 @@ Before crossing a context window boundary — \`/clear\`, context compaction, or
204
274
  requirement: New context has loaded handoff and can reference active plans
205
275
  check: context-restored
206
276
  `,
207
- tools: `tools:
277
+ tools: `# Workflow tools — engine merges these into plan steps.
278
+ # Format: list of operation strings (agentId_facade op:operation_name)
279
+ tools:
208
280
  - soleri_memory op:handoff_generate
209
281
  - soleri_memory op:session_capture
210
282
  - soleri_orchestrate op:orchestrate_status
@@ -212,6 +284,154 @@ Before crossing a context window boundary — \`/clear\`, context compaction, or
212
284
  `,
213
285
  },
214
286
  ];
287
+ // ─── Example Instruction Files ───────────────────────────────────────
288
+ const INSTRUCTIONS_CONVENTIONS = `# Conventions
289
+
290
+ <!-- Customize this file with your project's naming conventions, coding standards, and rules. -->
291
+ <!-- This file is composed into CLAUDE.md automatically — your agent will follow these rules. -->
292
+
293
+ ## Naming Conventions
294
+
295
+ - Use \`kebab-case\` for file and directory names
296
+ - Use \`camelCase\` for variables and functions
297
+ - Use \`PascalCase\` for classes, types, and interfaces
298
+ - Prefix private helpers with \`_\` (e.g., \`_validateInput\`)
299
+
300
+ ## File Organization
301
+
302
+ - Source code goes in \`src/\`
303
+ - Tests live next to the code they test (\`*.test.ts\`)
304
+ - Shared utilities go in \`src/utils/\`
305
+ - Types and interfaces go in \`src/types/\`
306
+
307
+ ## Code Standards
308
+
309
+ - Every function must have a JSDoc comment explaining its purpose
310
+ - Prefer \`const\` over \`let\`; never use \`var\`
311
+ - Maximum file length: 300 lines — split if larger
312
+ - No default exports — use named exports only
313
+
314
+ ## What to Avoid
315
+
316
+ - Do not add new npm dependencies without approval
317
+ - Do not use \`any\` type — use \`unknown\` and narrow
318
+ - Do not commit commented-out code
319
+ - Do not use hardcoded values — extract to constants or config
320
+ `;
321
+ const INSTRUCTIONS_GETTING_STARTED = `# Getting Started with Instructions
322
+
323
+ This folder contains your agent's custom behavioral rules. Every \`.md\` file here
324
+ is automatically composed into \`CLAUDE.md\` when you run \`soleri dev\`.
325
+
326
+ ## How It Works
327
+
328
+ 1. Create a new \`.md\` file in this folder (e.g., \`api-guidelines.md\`)
329
+ 2. Write your rules, conventions, or guidelines in Markdown
330
+ 3. Run \`soleri dev\` — it watches for changes and regenerates \`CLAUDE.md\`
331
+ 4. Your agent now follows these rules in every conversation
332
+
333
+ ## File Naming
334
+
335
+ - Files are included in **alphabetical order** (prefix with numbers to control order)
336
+ - \`_engine.md\` is auto-generated by Soleri — **do not edit it manually**
337
+ - \`domain.md\` was generated from your agent's domain config
338
+
339
+ ## Tips
340
+
341
+ - Keep each file focused on one topic (conventions, workflows, constraints)
342
+ - Use clear headings — your agent reads these as instructions
343
+ - Add "What to Avoid" sections — agents benefit from explicit anti-patterns
344
+ - See the [Soleri docs](https://soleri.ai/docs) for more examples
345
+ `;
346
+ // ─── Workspace & Routing Seeds ───────────────────────────────────────
347
+ /** Default workspaces seeded based on agent domains. */
348
+ const DOMAIN_WORKSPACE_SEEDS = {
349
+ // Design-related domains
350
+ design: [
351
+ {
352
+ id: 'design',
353
+ name: 'Design',
354
+ description: 'Design system patterns, tokens, and components',
355
+ },
356
+ { id: 'review', name: 'Review', description: 'Design review and accessibility audits' },
357
+ ],
358
+ 'ui-design': [
359
+ { id: 'design', name: 'Design', description: 'UI design patterns, tokens, and components' },
360
+ { id: 'review', name: 'Review', description: 'Design review and accessibility audits' },
361
+ ],
362
+ accessibility: [
363
+ { id: 'design', name: 'Design', description: 'Accessible design patterns and tokens' },
364
+ { id: 'review', name: 'Review', description: 'Accessibility audits and compliance checks' },
365
+ ],
366
+ // Dev-related domains
367
+ architecture: [
368
+ {
369
+ id: 'planning',
370
+ name: 'Planning',
371
+ description: 'Architecture decisions and technical planning',
372
+ },
373
+ { id: 'src', name: 'Source', description: 'Implementation code and modules' },
374
+ { id: 'docs', name: 'Documentation', description: 'Technical documentation and ADRs' },
375
+ ],
376
+ backend: [
377
+ { id: 'planning', name: 'Planning', description: 'Backend architecture and API design' },
378
+ { id: 'src', name: 'Source', description: 'Implementation code and modules' },
379
+ { id: 'docs', name: 'Documentation', description: 'API documentation and guides' },
380
+ ],
381
+ frontend: [
382
+ {
383
+ id: 'planning',
384
+ name: 'Planning',
385
+ description: 'Frontend architecture and component design',
386
+ },
387
+ { id: 'src', name: 'Source', description: 'Implementation code and components' },
388
+ {
389
+ id: 'docs',
390
+ name: 'Documentation',
391
+ description: 'Component documentation and style guides',
392
+ },
393
+ ],
394
+ security: [
395
+ {
396
+ id: 'planning',
397
+ name: 'Planning',
398
+ description: 'Security architecture and threat modeling',
399
+ },
400
+ { id: 'src', name: 'Source', description: 'Security implementations and policies' },
401
+ { id: 'docs', name: 'Documentation', description: 'Security documentation and runbooks' },
402
+ ],
403
+ };
404
+ /** Default routing entries seeded based on agent domains. */
405
+ const DOMAIN_ROUTING_SEEDS = {
406
+ design: [
407
+ { pattern: 'design component', workspace: 'design', skills: ['vault-navigator'] },
408
+ { pattern: 'review design', workspace: 'review', skills: ['deep-review'] },
409
+ ],
410
+ 'ui-design': [
411
+ { pattern: 'design component', workspace: 'design', skills: ['vault-navigator'] },
412
+ { pattern: 'review design', workspace: 'review', skills: ['deep-review'] },
413
+ ],
414
+ architecture: [
415
+ { pattern: 'plan architecture', workspace: 'planning', skills: ['writing-plans'] },
416
+ { pattern: 'implement feature', workspace: 'src', skills: ['test-driven-development'] },
417
+ { pattern: 'write documentation', workspace: 'docs', skills: ['vault-capture'] },
418
+ ],
419
+ backend: [
420
+ { pattern: 'plan API', workspace: 'planning', skills: ['writing-plans'] },
421
+ { pattern: 'implement endpoint', workspace: 'src', skills: ['test-driven-development'] },
422
+ { pattern: 'write docs', workspace: 'docs', skills: ['vault-capture'] },
423
+ ],
424
+ frontend: [
425
+ { pattern: 'plan component', workspace: 'planning', skills: ['writing-plans'] },
426
+ { pattern: 'implement component', workspace: 'src', skills: ['test-driven-development'] },
427
+ { pattern: 'write docs', workspace: 'docs', skills: ['vault-capture'] },
428
+ ],
429
+ security: [
430
+ { pattern: 'threat model', workspace: 'planning', skills: ['writing-plans'] },
431
+ { pattern: 'implement policy', workspace: 'src', skills: ['test-driven-development'] },
432
+ { pattern: 'write runbook', workspace: 'docs', skills: ['vault-capture'] },
433
+ ],
434
+ };
215
435
  // ─── Main Scaffolder ──────────────────────────────────────────────────
216
436
  /**
217
437
  * Scaffold a file-tree agent.
@@ -288,10 +508,34 @@ export function scaffoldFileTree(input, outputDir) {
288
508
  'AGENTS.md',
289
509
  'instructions/_engine.md',
290
510
  '',
511
+ '# OS',
512
+ '.DS_Store',
513
+ '',
514
+ '# Editor / IDE state',
515
+ '.obsidian/',
516
+ '.opencode/',
517
+ '',
291
518
  ].join('\n'), filesCreated);
292
519
  // ─── 5. Write engine rules ──────────────────────────────────
293
520
  writeFile(agentDir, 'instructions/_engine.md', getEngineRulesContent(), filesCreated);
294
521
  // ─── 6. Write user instruction files ────────────────────────
522
+ // Generate user.md — user-editable file with priority placement in CLAUDE.md
523
+ const userMdContent = [
524
+ '# Your Custom Rules',
525
+ '',
526
+ 'Add your agent-specific rules, constraints, and preferences here.',
527
+ 'This file gets priority placement in CLAUDE.md — it appears before engine rules.',
528
+ '',
529
+ '## Examples of what to put here:',
530
+ '- Project-specific conventions',
531
+ '- Communication preferences',
532
+ '- Domain expertise to emphasize',
533
+ '- Things to always/never do',
534
+ '',
535
+ 'Delete these instructions and replace with your own content.',
536
+ '',
537
+ ].join('\n');
538
+ writeFile(agentDir, 'instructions/user.md', userMdContent, filesCreated);
295
539
  // Generate domain-specific instruction file if agent has specialized domains
296
540
  if (config.domains.length > 0) {
297
541
  const domainLines = [
@@ -306,6 +550,9 @@ export function scaffoldFileTree(input, outputDir) {
306
550
  ];
307
551
  writeFile(agentDir, 'instructions/domain.md', domainLines.join('\n'), filesCreated);
308
552
  }
553
+ // ─── 6b. Write example instruction files ─────────────────────
554
+ writeFile(agentDir, 'instructions/conventions.md', INSTRUCTIONS_CONVENTIONS, filesCreated);
555
+ writeFile(agentDir, 'instructions/getting-started.md', INSTRUCTIONS_GETTING_STARTED, filesCreated);
309
556
  // ─── 7. Write workflows ─────────────────────────────────────
310
557
  for (const wf of BUILTIN_WORKFLOWS) {
311
558
  writeFile(agentDir, `workflows/${wf.name}/prompt.md`, wf.prompt, filesCreated);
@@ -313,7 +560,11 @@ export function scaffoldFileTree(input, outputDir) {
313
560
  writeFile(agentDir, `workflows/${wf.name}/tools.yaml`, wf.tools, filesCreated);
314
561
  }
315
562
  // ─── 8. Copy bundled skills (with placeholder substitution) ─
316
- const skills = generateSkills({ id: config.id });
563
+ const resolvedSkills = resolveSkillsFilter(config.skillsFilter);
564
+ const skills = generateSkills({
565
+ id: config.id,
566
+ skills: resolvedSkills ?? undefined,
567
+ });
317
568
  for (const [relativePath, content] of skills) {
318
569
  mkdirSync(join(agentDir, dirname(relativePath)), { recursive: true });
319
570
  writeFile(agentDir, relativePath, content, filesCreated);
@@ -331,7 +582,27 @@ export function scaffoldFileTree(input, outputDir) {
331
582
  writeFile(agentDir, `knowledge/${domain}.json`, JSON.stringify(bundle, null, 2) + '\n', filesCreated);
332
583
  totalSeeded += starterEntries.length;
333
584
  }
334
- // ─── 9. Generate CLAUDE.md ──────────────────────────────────
585
+ // ─── 9b. Create workspace directories with CONTEXT.md ──────
586
+ // Resolve workspaces: use explicit config or seed from domains
587
+ const resolvedWorkspaces = resolveWorkspaces(config);
588
+ if (resolvedWorkspaces.length > 0) {
589
+ for (const ws of resolvedWorkspaces) {
590
+ const wsDir = join(agentDir, 'workspaces', ws.id);
591
+ mkdirSync(wsDir, { recursive: true });
592
+ const contextContent = [
593
+ `# ${ws.name}`,
594
+ '',
595
+ ws.description,
596
+ '',
597
+ '## Instructions',
598
+ '',
599
+ `<!-- Add workspace-specific instructions here for the "${ws.name}" context. -->`,
600
+ '',
601
+ ].join('\n');
602
+ writeFile(agentDir, `workspaces/${ws.id}/${ws.contextFile ?? 'CONTEXT.md'}`, contextContent, filesCreated);
603
+ }
604
+ }
605
+ // ─── 10. Generate CLAUDE.md ──────────────────────────────────
335
606
  const { content: claudeMd } = composeClaudeMd(agentDir);
336
607
  writeFile(agentDir, 'CLAUDE.md', claudeMd, filesCreated);
337
608
  // ─── 10. Summary ────────────────────────────────────────────
@@ -411,12 +682,87 @@ function buildAgentYaml(config) {
411
682
  setup.model = config.setup.model;
412
683
  if (Object.keys(setup).length > 0)
413
684
  yaml.setup = setup;
685
+ // Skills filter — only include if not the default ('essential')
686
+ if (config.skillsFilter && config.skillsFilter !== 'essential') {
687
+ yaml.skillsFilter = config.skillsFilter;
688
+ }
689
+ // Workspaces
690
+ const resolvedWs = resolveWorkspaces(config);
691
+ if (resolvedWs.length > 0) {
692
+ yaml.workspaces = resolvedWs.map((ws) => Object.assign({ id: ws.id, name: ws.name, description: ws.description }, ws.contextFile !== `CONTEXT.md` ? { contextFile: ws.contextFile } : {}));
693
+ }
694
+ // Routing
695
+ const resolvedRouting = resolveRouting(config);
696
+ if (resolvedRouting.length > 0) {
697
+ yaml.routing = resolvedRouting.map((r) => Object.assign({ pattern: r.pattern, workspace: r.workspace }, r.context.length > 0 ? { context: r.context } : {}, r.skills.length > 0 ? { skills: r.skills } : {}));
698
+ }
414
699
  // Packs
415
700
  if (config.packs && config.packs.length > 0) {
416
701
  yaml.packs = config.packs;
417
702
  }
418
703
  return yaml;
419
704
  }
705
+ // ─── Workspace & Routing Helpers ─────────────────────────────────────
706
+ /**
707
+ * Resolve workspaces: use explicit config or seed from domains.
708
+ * Deduplicates by workspace id.
709
+ */
710
+ function resolveWorkspaces(config) {
711
+ // If explicitly defined, use those
712
+ if (config.workspaces && config.workspaces.length > 0) {
713
+ return config.workspaces.map((ws) => ({
714
+ id: ws.id,
715
+ name: ws.name,
716
+ description: ws.description,
717
+ contextFile: ws.contextFile ?? 'CONTEXT.md',
718
+ }));
719
+ }
720
+ // Otherwise, seed from domains
721
+ const seen = new Set();
722
+ const workspaces = [];
723
+ for (const domain of config.domains) {
724
+ const seeds = DOMAIN_WORKSPACE_SEEDS[domain];
725
+ if (!seeds)
726
+ continue;
727
+ for (const seed of seeds) {
728
+ if (seen.has(seed.id))
729
+ continue;
730
+ seen.add(seed.id);
731
+ workspaces.push({ ...seed, contextFile: 'CONTEXT.md' });
732
+ }
733
+ }
734
+ return workspaces;
735
+ }
736
+ /**
737
+ * Resolve routing entries: use explicit config or seed from domains.
738
+ * Deduplicates by pattern string.
739
+ */
740
+ function resolveRouting(config) {
741
+ // If explicitly defined, use those
742
+ if (config.routing && config.routing.length > 0) {
743
+ return config.routing.map((r) => ({
744
+ pattern: r.pattern,
745
+ workspace: r.workspace,
746
+ context: r.context ?? [],
747
+ skills: r.skills ?? [],
748
+ }));
749
+ }
750
+ // Otherwise, seed from domains
751
+ const seen = new Set();
752
+ const routes = [];
753
+ for (const domain of config.domains) {
754
+ const seeds = DOMAIN_ROUTING_SEEDS[domain];
755
+ if (!seeds)
756
+ continue;
757
+ for (const seed of seeds) {
758
+ if (seen.has(seed.pattern))
759
+ continue;
760
+ seen.add(seed.pattern);
761
+ routes.push({ ...seed, context: [] });
762
+ }
763
+ }
764
+ return routes;
765
+ }
420
766
  // ─── Starter Pack Helpers ────────────────────────────────────────────
421
767
  /** Domain aliases — map agent domains to starter pack directories. */
422
768
  const DOMAIN_TO_STARTER = {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold-filetree.js","sourceRoot":"","sources":["../src/scaffold-filetree.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqBvD,MAAM,iBAAiB,GAAuB;IAC5C;QACE,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCX;QACG,KAAK,EAAE;;;;;;;;;;;;;;;;CAgBV;QACG,KAAK,EAAE;;;;;;;CAOV;KACE;IACD;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BX;QACG,KAAK,EAAE;;;;;;;;;;;;CAYV;QACG,KAAK,EAAE;;;;;CAKV;KACE;IACD;QACE,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CAwBX;QACG,KAAK,EAAE;;;;CAIV;QACG,KAAK,EAAE;;;;CAIV;KACE;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBX;QACG,KAAK,EAAE;;;;;;;;CAQV;QACG,KAAK,EAAE;;;;;CAKV;KACE;CACF,CAAC;AAEF,yEAAyE;AAEzE;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAqB,EAAE,SAAiB;IACvE,kBAAkB;IAClB,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,IAAI,SAAS,CAAC;YAChD,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,mBAAmB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;SACxD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,+BAA+B;IAC/B,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,6BAA6B,QAAQ,uCAAuC;SACtF,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEvF,8BAA8B;IAC9B,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,+DAA+D;IAC/D,MAAM,gBAAgB,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;QAC7D,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAElE,+DAA+D;IAC/D,sEAAsE;IACtE,uEAAuE;IACvE,MAAM,OAAO,GAAG;QACd,UAAU,EAAE;YACV,eAAe,EAAE;gBACf,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC;aACpD;SACF;KACF,CAAC;IACF,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC;IAExF,qHAAqH;IACrH,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,iCAAiC;QAC1C,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,GAAG,EAAE;YACH,eAAe,EAAE;gBACf,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC;aACpE;SACF;KACF,CAAC;IACF,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC;IAEjG,+DAA+D;IAC/D,SAAS,CACP,QAAQ,EACR,YAAY,EACZ;QACE,kCAAkC;QAClC,WAAW;QACX,WAAW;QACX,yBAAyB;QACzB,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,YAAY,CACb,CAAC;IAEF,+DAA+D;IAC/D,SAAS,CAAC,QAAQ,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,EAAE,YAAY,CAAC,CAAC;IAEtF,+DAA+D;IAC/D,6EAA6E;IAC7E,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG;YAClB,oBAAoB;YACpB,EAAE;YACF,8BAA8B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC1D,EAAE;YACF,eAAe;YACf,EAAE;YACF,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,EAAE;SACH,CAAC;QACF,SAAS,CAAC,QAAQ,EAAE,wBAAwB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IACtF,CAAC;IAED,+DAA+D;IAC/D,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,IAAI,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC/E,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC/E,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjF,CAAC;IAED,+DAA+D;IAC/D,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAiB,CAAC,CAAC;IAChE,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,2EAA2E;IAC3E,MAAM,eAAe,GAAG,sBAAsB,EAAE,CAAC;IACjD,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,cAAc,GAAG,kBAAkB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG;YACb,MAAM;YACN,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,cAAc;SACxB,CAAC;QACF,SAAS,CACP,QAAQ,EACR,aAAa,MAAM,OAAO,EAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACtC,YAAY,CACb,CAAC;QACF,WAAW,IAAI,cAAc,CAAC,MAAM,CAAC;IACvC,CAAC;IAED,+DAA+D;IAC/D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxD,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzD,+DAA+D;IAC/D,MAAM,OAAO,GAAG;QACd,UAAU,MAAM,CAAC,IAAI,mBAAmB,QAAQ,EAAE;QAClD,EAAE;QACF,YAAY,YAAY,CAAC,MAAM,EAAE;QACjC,cAAc,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACzC,gBAAgB,WAAW,yBAAyB;QACpD,gBAAgB,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACjE,EAAE;QACF,aAAa;QACb,WAAW,MAAM,CAAC,EAAE,EAAE;QACtB,oDAAoD;QACpD,mDAAmD;QACnD,wEAAwE;QACxE,EAAE;QACF,oDAAoD;KACrD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,YAAY;QACZ,OAAO;KACR,CAAC;AACJ,CAAC;AAED,yEAAyE;AAEzE,SAAS,SAAS,CAChB,QAAgB,EAChB,YAAoB,EACpB,OAAe,EACf,YAAsB;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CACd,QAAQ,EACR,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CACjF,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAiB;IACvC,MAAM,IAAI,GAA4B;QACpC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,4CAA4C;IAC5C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7D,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,KAAK,KAAK;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAEzD,SAAS;IACT,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,oCAAoC;IACpC,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IACjG,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB;QACtE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IACnC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAEtD,QAAQ;IACR,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wEAAwE;AAExE,sEAAsE;AACtE,MAAM,iBAAiB,GAA2B;IAChD,iBAAiB;IACjB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,QAAQ;IACrB,aAAa,EAAE,QAAQ;IACvB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,oBAAoB,EAAE,QAAQ;IAC9B,mBAAmB,EAAE,QAAQ;IAC7B,mBAAmB;IACnB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,UAAU;IAChB,cAAc,EAAE,UAAU;IAC1B,uBAAuB;IACvB,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,cAAc;IACvB,cAAc,EAAE,cAAc;CAC/B,CAAC;AAEF,SAAS,sBAAsB;IAC7B,gDAAgD;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,CAAC;QAC9D,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,CAAC;KACzD,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAyB,EAAE,MAAc;IACnE,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACrE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"scaffold-filetree.js","sourceRoot":"","sources":["../src/scaffold-filetree.ts"],"names":[],"mappings":"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"}
@@ -134,6 +134,12 @@ export function previewScaffold(config) {
134
134
  description: `Hook pack files (${config.hookPacks.join(', ')})`,
135
135
  });
136
136
  }
137
+ if (opencodeSetup && config.hookPacks?.length) {
138
+ files.push({
139
+ path: '.opencode/plugins/',
140
+ description: `OpenCode enforcement plugin (${config.hookPacks.join(', ')})`,
141
+ });
142
+ }
137
143
  if (config.telegram) {
138
144
  files.push({
139
145
  path: 'src/telegram-bot.ts',
@@ -289,6 +295,9 @@ export function scaffold(config) {
289
295
  if (claudeSetup && config.hookPacks?.length) {
290
296
  dirs.push('.claude');
291
297
  }
298
+ if (opencodeSetup && config.hookPacks?.length) {
299
+ dirs.push('.opencode/plugins');
300
+ }
292
301
  for (const dir of dirs) {
293
302
  mkdirSync(join(agentDir, dir), { recursive: true });
294
303
  }
@@ -494,6 +503,9 @@ export function scaffold(config) {
494
503
  if (claudeSetup && config.hookPacks?.length) {
495
504
  summaryLines.push(`${config.hookPacks.length} hook pack(s) bundled in .claude/`);
496
505
  }
506
+ if (opencodeSetup && config.hookPacks?.length) {
507
+ summaryLines.push(`${config.hookPacks.length} hook pack(s) bundled as OpenCode plugin in .opencode/plugins/`);
508
+ }
497
509
  for (const registration of mcpRegistrations) {
498
510
  if (registration.result.registered) {
499
511
  summaryLines.push(`${registration.host} MCP server registered in ${registration.result.path}`);