@agents-inc/cli 0.72.0 → 0.74.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/{chunk-ZEJIEC2A.js → chunk-4CRWKTNQ.js} +66 -261
  3. package/dist/chunk-4CRWKTNQ.js.map +1 -0
  4. package/dist/{chunk-V2XIWRHP.js → chunk-ANUYSHQA.js} +6 -7
  5. package/dist/chunk-ANUYSHQA.js.map +1 -0
  6. package/dist/{chunk-URAXGHF2.js → chunk-B7KVPY3Z.js} +20 -15
  7. package/dist/chunk-B7KVPY3Z.js.map +1 -0
  8. package/dist/{chunk-ZYUASJUN.js → chunk-BH4LN7XV.js} +8 -6
  9. package/dist/chunk-BH4LN7XV.js.map +1 -0
  10. package/dist/{chunk-J4TVAB5H.js → chunk-BM5Y6LIC.js} +2 -2
  11. package/dist/{chunk-6YMW4HMX.js → chunk-DNPJ5GUK.js} +6 -6
  12. package/dist/chunk-DNPJ5GUK.js.map +1 -0
  13. package/dist/chunk-E74Q7GUE.js +5132 -0
  14. package/dist/chunk-E74Q7GUE.js.map +1 -0
  15. package/dist/chunk-EMX7PA2I.js +39 -0
  16. package/dist/chunk-EMX7PA2I.js.map +1 -0
  17. package/dist/chunk-GDUOOT3J.js +689 -0
  18. package/dist/chunk-GDUOOT3J.js.map +1 -0
  19. package/dist/{chunk-MGQVO357.js → chunk-IJLAVOKZ.js} +2 -2
  20. package/dist/chunk-IJLAVOKZ.js.map +1 -0
  21. package/dist/{chunk-G3LNIYZG.js → chunk-J5T7M2CS.js} +2 -2
  22. package/dist/{chunk-FKRYJOPC.js → chunk-J6SHWAS6.js} +5 -5
  23. package/dist/chunk-J6SHWAS6.js.map +1 -0
  24. package/dist/{chunk-RJOLQ7EK.js → chunk-JWZLVWTX.js} +4 -4
  25. package/dist/{chunk-CKPJTMNC.js → chunk-KSMT5FVM.js} +4 -4
  26. package/dist/chunk-KSMT5FVM.js.map +1 -0
  27. package/dist/{chunk-OODTDGEM.js → chunk-KTF5RKKP.js} +6 -6
  28. package/dist/{chunk-SEAL43IR.js → chunk-NTVY4G35.js} +3 -3
  29. package/dist/{chunk-52THXN5G.js → chunk-NUJHWYCR.js} +2 -2
  30. package/dist/{chunk-HJVWBSLM.js → chunk-QJUPZPXO.js} +4 -4
  31. package/dist/chunk-QJUPZPXO.js.map +1 -0
  32. package/dist/{chunk-F43WGOGN.js → chunk-RRBWNEG3.js} +2 -2
  33. package/dist/chunk-RRBWNEG3.js.map +1 -0
  34. package/dist/chunk-SRIH4U5Y.js +159 -0
  35. package/dist/chunk-SRIH4U5Y.js.map +1 -0
  36. package/dist/{chunk-Q3YMO5YG.js → chunk-TNSVPZHP.js} +20 -2
  37. package/dist/chunk-TNSVPZHP.js.map +1 -0
  38. package/dist/{chunk-UQTG4ZBA.js → chunk-UFAP6GHD.js} +18 -20
  39. package/dist/chunk-UFAP6GHD.js.map +1 -0
  40. package/dist/{chunk-WWHDP5CP.js → chunk-V5HR77EY.js} +94 -13
  41. package/dist/chunk-V5HR77EY.js.map +1 -0
  42. package/dist/{chunk-ZFRALAK5.js → chunk-VOYGRNLS.js} +4 -5
  43. package/dist/chunk-VOYGRNLS.js.map +1 -0
  44. package/dist/{chunk-LM5YQUBR.js → chunk-WQRFVEAA.js} +6 -6
  45. package/dist/{chunk-LBTW5HSY.js → chunk-XP7BXHFG.js} +11 -11
  46. package/dist/chunk-XP7BXHFG.js.map +1 -0
  47. package/dist/{chunk-AHZ34QVK.js → chunk-ZCJ4YYWL.js} +40 -35
  48. package/dist/chunk-ZCJ4YYWL.js.map +1 -0
  49. package/dist/{chunk-HMJGSAKV.js → chunk-ZLMKEYDF.js} +2514 -2687
  50. package/dist/chunk-ZLMKEYDF.js.map +1 -0
  51. package/dist/{chunk-3SLO2QPW.js → chunk-ZO7C5WMJ.js} +12 -14
  52. package/dist/chunk-ZO7C5WMJ.js.map +1 -0
  53. package/dist/commands/build/marketplace.js +4 -3
  54. package/dist/commands/build/marketplace.js.map +1 -1
  55. package/dist/commands/build/plugins.js +8 -7
  56. package/dist/commands/build/plugins.js.map +1 -1
  57. package/dist/commands/build/stack.js +8 -7
  58. package/dist/commands/build/stack.js.map +1 -1
  59. package/dist/commands/compile.js +13 -9
  60. package/dist/commands/compile.js.map +1 -1
  61. package/dist/commands/config/index.js +8 -7
  62. package/dist/commands/config/index.js.map +1 -1
  63. package/dist/commands/config/path.js +7 -6
  64. package/dist/commands/config/path.js.map +1 -1
  65. package/dist/commands/config/show.js +8 -7
  66. package/dist/commands/diff.js +7 -6
  67. package/dist/commands/diff.js.map +1 -1
  68. package/dist/commands/doctor.js +12 -13
  69. package/dist/commands/doctor.js.map +1 -1
  70. package/dist/commands/edit.js +32 -36
  71. package/dist/commands/edit.js.map +1 -1
  72. package/dist/commands/eject.js +15 -13
  73. package/dist/commands/eject.js.map +1 -1
  74. package/dist/commands/import/skill.js +7 -6
  75. package/dist/commands/import/skill.js.map +1 -1
  76. package/dist/commands/info.js +11 -10
  77. package/dist/commands/info.js.map +1 -1
  78. package/dist/commands/init.js +27 -26
  79. package/dist/commands/list.js +7 -6
  80. package/dist/commands/list.js.map +1 -1
  81. package/dist/commands/new/agent.js +8 -7
  82. package/dist/commands/new/agent.js.map +1 -1
  83. package/dist/commands/new/marketplace.js +11 -14
  84. package/dist/commands/new/marketplace.js.map +1 -1
  85. package/dist/commands/new/skill.js +8 -7
  86. package/dist/commands/outdated.js +7 -6
  87. package/dist/commands/outdated.js.map +1 -1
  88. package/dist/commands/search.js +8 -9
  89. package/dist/commands/search.js.map +1 -1
  90. package/dist/commands/uninstall.js +10 -7
  91. package/dist/commands/uninstall.js.map +1 -1
  92. package/dist/commands/update.js +9 -9
  93. package/dist/commands/update.js.map +1 -1
  94. package/dist/commands/validate.js +15 -17
  95. package/dist/commands/validate.js.map +1 -1
  96. package/dist/components/wizard/category-grid.js +2 -2
  97. package/dist/components/wizard/category-grid.test.js +16 -65
  98. package/dist/components/wizard/category-grid.test.js.map +1 -1
  99. package/dist/components/wizard/domain-selection.js +9 -8
  100. package/dist/components/wizard/source-grid.js +4 -4
  101. package/dist/components/wizard/source-grid.test.js +18 -16
  102. package/dist/components/wizard/source-grid.test.js.map +1 -1
  103. package/dist/components/wizard/stack-selection.js +8 -7
  104. package/dist/components/wizard/step-agents.js +9 -8
  105. package/dist/components/wizard/step-agents.test.js +14 -13
  106. package/dist/components/wizard/step-agents.test.js.map +1 -1
  107. package/dist/components/wizard/step-build.js +10 -9
  108. package/dist/components/wizard/step-build.test.js +16 -15
  109. package/dist/components/wizard/step-build.test.js.map +1 -1
  110. package/dist/components/wizard/step-confirm.js +5 -4
  111. package/dist/components/wizard/step-confirm.test.js +10 -9
  112. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  113. package/dist/components/wizard/step-settings.js +8 -7
  114. package/dist/components/wizard/step-settings.test.js +11 -10
  115. package/dist/components/wizard/step-settings.test.js.map +1 -1
  116. package/dist/components/wizard/step-sources.js +13 -12
  117. package/dist/components/wizard/step-sources.test.js +18 -17
  118. package/dist/components/wizard/step-sources.test.js.map +1 -1
  119. package/dist/components/wizard/step-stack.js +11 -10
  120. package/dist/components/wizard/step-stack.test.js +15 -14
  121. package/dist/components/wizard/step-stack.test.js.map +1 -1
  122. package/dist/components/wizard/wizard-layout.js +8 -7
  123. package/dist/components/wizard/wizard.js +25 -24
  124. package/dist/hooks/init.js +27 -26
  125. package/dist/hooks/init.js.map +1 -1
  126. package/dist/{loader-KVKSTKWX.js → loader-NHUCFMFQ.js} +4 -3
  127. package/dist/{source-loader-65IAJPNV.js → source-loader-RTG42MWG.js} +7 -6
  128. package/dist/source-manager-NCOFHYHD.js +20 -0
  129. package/dist/stores/wizard-store.js +7 -6
  130. package/dist/stores/wizard-store.test.js +29 -28
  131. package/dist/stores/wizard-store.test.js.map +1 -1
  132. package/package.json +1 -1
  133. package/src/schemas/custom-metadata.schema.json +81 -0
  134. package/src/schemas/metadata.schema.json +127 -41
  135. package/src/schemas/stacks.schema.json +3 -45
  136. package/dist/chunk-3SLO2QPW.js.map +0 -1
  137. package/dist/chunk-6YMW4HMX.js.map +0 -1
  138. package/dist/chunk-AHZ34QVK.js.map +0 -1
  139. package/dist/chunk-BKL3DF2Q.js +0 -45
  140. package/dist/chunk-BKL3DF2Q.js.map +0 -1
  141. package/dist/chunk-CKPJTMNC.js.map +0 -1
  142. package/dist/chunk-D7FEORKC.js +0 -253
  143. package/dist/chunk-D7FEORKC.js.map +0 -1
  144. package/dist/chunk-F43WGOGN.js.map +0 -1
  145. package/dist/chunk-FKRYJOPC.js.map +0 -1
  146. package/dist/chunk-HJVWBSLM.js.map +0 -1
  147. package/dist/chunk-HMJGSAKV.js.map +0 -1
  148. package/dist/chunk-LBTW5HSY.js.map +0 -1
  149. package/dist/chunk-MGQVO357.js.map +0 -1
  150. package/dist/chunk-Q3YMO5YG.js.map +0 -1
  151. package/dist/chunk-T4EXUIBY.js +0 -19
  152. package/dist/chunk-T4EXUIBY.js.map +0 -1
  153. package/dist/chunk-UQTG4ZBA.js.map +0 -1
  154. package/dist/chunk-URAXGHF2.js.map +0 -1
  155. package/dist/chunk-V2XIWRHP.js.map +0 -1
  156. package/dist/chunk-WWHDP5CP.js.map +0 -1
  157. package/dist/chunk-ZEJIEC2A.js.map +0 -1
  158. package/dist/chunk-ZFRALAK5.js.map +0 -1
  159. package/dist/chunk-ZYUASJUN.js.map +0 -1
  160. package/dist/source-manager-LJH225GA.js +0 -19
  161. package/dist/stores/matrix-store.js +0 -15
  162. package/dist/stores/matrix-store.js.map +0 -1
  163. package/dist/stores/matrix-store.test.js +0 -127
  164. package/dist/stores/matrix-store.test.js.map +0 -1
  165. /package/dist/{chunk-J4TVAB5H.js.map → chunk-BM5Y6LIC.js.map} +0 -0
  166. /package/dist/{chunk-G3LNIYZG.js.map → chunk-J5T7M2CS.js.map} +0 -0
  167. /package/dist/{chunk-RJOLQ7EK.js.map → chunk-JWZLVWTX.js.map} +0 -0
  168. /package/dist/{chunk-OODTDGEM.js.map → chunk-KTF5RKKP.js.map} +0 -0
  169. /package/dist/{chunk-SEAL43IR.js.map → chunk-NTVY4G35.js.map} +0 -0
  170. /package/dist/{chunk-52THXN5G.js.map → chunk-NUJHWYCR.js.map} +0 -0
  171. /package/dist/{chunk-LM5YQUBR.js.map → chunk-WQRFVEAA.js.map} +0 -0
  172. /package/dist/{loader-KVKSTKWX.js.map → loader-NHUCFMFQ.js.map} +0 -0
  173. /package/dist/{source-loader-65IAJPNV.js.map → source-loader-RTG42MWG.js.map} +0 -0
  174. /package/dist/{source-manager-LJH225GA.js.map → source-manager-NCOFHYHD.js.map} +0 -0
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-DHET7RCE.js";
5
+
6
+ // src/cli/types/generated/source-types.ts
7
+ init_esm_shims();
8
+ var SKILL_SLUGS = [
9
+ "angular-standalone",
10
+ "anti-over-engineering",
11
+ "api-performance",
12
+ "auth-security",
13
+ "axiom-pino-sentry",
14
+ "better-auth-drizzle-hono",
15
+ "cli-commander",
16
+ "cli-reviewing",
17
+ "context-management",
18
+ "css-animations",
19
+ "cva",
20
+ "cypress-e2e",
21
+ "date-fns",
22
+ "drizzle",
23
+ "error-boundaries",
24
+ "expo",
25
+ "express",
26
+ "fastify",
27
+ "file-upload-patterns",
28
+ "framer-motion",
29
+ "github-actions",
30
+ "graphql-apollo",
31
+ "graphql-urql",
32
+ "hono",
33
+ "image-handling",
34
+ "improvement-protocol",
35
+ "investigation-requirements",
36
+ "jotai",
37
+ "mobx",
38
+ "msw",
39
+ "native-js",
40
+ "next-intl",
41
+ "nextjs-app-router",
42
+ "nextjs-server-actions",
43
+ "ngrx-signalstore",
44
+ "nuxt",
45
+ "oclif-ink",
46
+ "offline-first",
47
+ "pinia",
48
+ "playwright-e2e",
49
+ "posthog-analytics",
50
+ "posthog-flags",
51
+ "prisma",
52
+ "radix-ui",
53
+ "react",
54
+ "react-hook-form",
55
+ "react-intl",
56
+ "react-native",
57
+ "react-query",
58
+ "react-testing-library",
59
+ "redux-toolkit",
60
+ "remix",
61
+ "research-methodology",
62
+ "resend-react-email",
63
+ "result-types",
64
+ "reviewing",
65
+ "scss-modules",
66
+ "service-workers",
67
+ "setup-axiom-pino-sentry",
68
+ "setup-env",
69
+ "setup-posthog",
70
+ "setup-resend",
71
+ "setup-tooling",
72
+ "shadcn-ui",
73
+ "socket-io",
74
+ "solidjs",
75
+ "sse",
76
+ "storybook",
77
+ "success-criteria",
78
+ "swr",
79
+ "tailwind",
80
+ "tanstack-table",
81
+ "trpc",
82
+ "turborepo",
83
+ "vee-validate",
84
+ "view-transitions",
85
+ "vitest",
86
+ "vue-composition-api",
87
+ "vue-i18n",
88
+ "vue-test-utils",
89
+ "web-accessibility",
90
+ "web-performance",
91
+ "websockets",
92
+ "write-verification",
93
+ "zod-validation",
94
+ "zustand"
95
+ ];
96
+ var CATEGORIES = [
97
+ "api-analytics",
98
+ "api-api",
99
+ "api-auth",
100
+ "api-database",
101
+ "api-email",
102
+ "api-observability",
103
+ "api-performance",
104
+ "cli-framework",
105
+ "mobile-framework",
106
+ "shared-ci-cd",
107
+ "shared-methodology",
108
+ "shared-monorepo",
109
+ "shared-research",
110
+ "shared-reviewing",
111
+ "shared-security",
112
+ "shared-tooling",
113
+ "web-accessibility",
114
+ "web-animation",
115
+ "web-client-state",
116
+ "web-error-handling",
117
+ "web-file-upload",
118
+ "web-files",
119
+ "web-forms",
120
+ "web-framework",
121
+ "web-i18n",
122
+ "web-mocking",
123
+ "web-performance",
124
+ "web-pwa",
125
+ "web-realtime",
126
+ "web-server-state",
127
+ "web-styling",
128
+ "web-testing",
129
+ "web-ui-components",
130
+ "web-utilities"
131
+ ];
132
+ var DOMAINS = ["api", "cli", "mobile", "shared", "web"];
133
+ var AGENT_NAMES = [
134
+ "agent-summoner",
135
+ "api-developer",
136
+ "api-researcher",
137
+ "api-reviewer",
138
+ "cli-developer",
139
+ "cli-reviewer",
140
+ "cli-tester",
141
+ "documentor",
142
+ "pattern-scout",
143
+ "skill-summoner",
144
+ "web-architecture",
145
+ "web-developer",
146
+ "web-pattern-critique",
147
+ "web-pm",
148
+ "web-researcher",
149
+ "web-reviewer",
150
+ "web-tester"
151
+ ];
152
+
153
+ export {
154
+ SKILL_SLUGS,
155
+ CATEGORIES,
156
+ DOMAINS,
157
+ AGENT_NAMES
158
+ };
159
+ //# sourceMappingURL=chunk-SRIH4U5Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/types/generated/source-types.ts"],"sourcesContent":["// AUTO-GENERATED from skills source and agent metadata — do not edit manually\n// Run: bun run generate:types\n\n// ── Skill Map (slug → ID) ─────────────────────────────────────\n\nexport const SKILL_MAP = {\n \"angular-standalone\": \"web-framework-angular-standalone\",\n \"anti-over-engineering\": \"meta-methodology-anti-over-engineering\",\n \"api-performance\": \"api-performance-api-performance\",\n \"auth-security\": \"security-auth-security\",\n \"axiom-pino-sentry\": \"api-observability-axiom-pino-sentry\",\n \"better-auth-drizzle-hono\": \"api-auth-better-auth-drizzle-hono\",\n \"cli-commander\": \"cli-framework-cli-commander\",\n \"cli-reviewing\": \"meta-reviewing-cli-reviewing\",\n \"context-management\": \"meta-methodology-context-management\",\n \"css-animations\": \"web-animation-css-animations\",\n cva: \"web-styling-cva\",\n \"cypress-e2e\": \"web-testing-cypress-e2e\",\n \"date-fns\": \"web-utilities-date-fns\",\n drizzle: \"api-database-drizzle\",\n \"error-boundaries\": \"web-error-handling-error-boundaries\",\n expo: \"mobile-framework-expo\",\n express: \"api-framework-express\",\n fastify: \"api-framework-fastify\",\n \"file-upload-patterns\": \"web-files-file-upload-patterns\",\n \"framer-motion\": \"web-animation-framer-motion\",\n \"github-actions\": \"api-ci-cd-github-actions\",\n \"graphql-apollo\": \"web-data-fetching-graphql-apollo\",\n \"graphql-urql\": \"web-data-fetching-graphql-urql\",\n hono: \"api-framework-hono\",\n \"image-handling\": \"web-files-image-handling\",\n \"improvement-protocol\": \"meta-methodology-improvement-protocol\",\n \"investigation-requirements\": \"meta-methodology-investigation-requirements\",\n jotai: \"web-state-jotai\",\n mobx: \"web-state-mobx\",\n msw: \"web-mocks-msw\",\n \"native-js\": \"web-utilities-native-js\",\n \"next-intl\": \"web-i18n-next-intl\",\n \"nextjs-app-router\": \"web-framework-nextjs-app-router\",\n \"nextjs-server-actions\": \"web-framework-nextjs-server-actions\",\n \"ngrx-signalstore\": \"web-state-ngrx-signalstore\",\n nuxt: \"web-framework-nuxt\",\n \"oclif-ink\": \"cli-framework-oclif-ink\",\n \"offline-first\": \"web-pwa-offline-first\",\n pinia: \"web-state-pinia\",\n \"playwright-e2e\": \"web-testing-playwright-e2e\",\n \"posthog-analytics\": \"api-analytics-posthog-analytics\",\n \"posthog-flags\": \"api-flags-posthog-flags\",\n prisma: \"api-database-prisma\",\n \"radix-ui\": \"web-ui-radix-ui\",\n react: \"web-framework-react\",\n \"react-hook-form\": \"web-forms-react-hook-form\",\n \"react-intl\": \"web-i18n-react-intl\",\n \"react-native\": \"mobile-framework-react-native\",\n \"react-query\": \"web-server-state-react-query\",\n \"react-testing-library\": \"web-testing-react-testing-library\",\n \"redux-toolkit\": \"web-state-redux-toolkit\",\n remix: \"web-framework-remix\",\n \"research-methodology\": \"meta-research-research-methodology\",\n \"resend-react-email\": \"api-email-resend-react-email\",\n \"result-types\": \"web-error-handling-result-types\",\n reviewing: \"meta-reviewing-reviewing\",\n \"scss-modules\": \"web-styling-scss-modules\",\n \"service-workers\": \"web-pwa-service-workers\",\n \"setup-axiom-pino-sentry\": \"api-observability-setup-axiom-pino-sentry\",\n \"setup-env\": \"infra-env-setup-env\",\n \"setup-posthog\": \"api-analytics-setup-posthog\",\n \"setup-resend\": \"api-email-setup-resend\",\n \"setup-tooling\": \"infra-tooling-setup-tooling\",\n \"shadcn-ui\": \"web-ui-shadcn-ui\",\n \"socket-io\": \"web-realtime-socket-io\",\n solidjs: \"web-framework-solidjs\",\n sse: \"web-realtime-sse\",\n storybook: \"web-tooling-storybook\",\n \"success-criteria\": \"meta-methodology-success-criteria\",\n swr: \"web-data-fetching-swr\",\n tailwind: \"web-styling-tailwind\",\n \"tanstack-table\": \"web-ui-tanstack-table\",\n trpc: \"web-data-fetching-trpc\",\n turborepo: \"infra-monorepo-turborepo\",\n \"vee-validate\": \"web-forms-vee-validate\",\n \"view-transitions\": \"web-animation-view-transitions\",\n vitest: \"web-testing-vitest\",\n \"vue-composition-api\": \"web-framework-vue-composition-api\",\n \"vue-i18n\": \"web-i18n-vue-i18n\",\n \"vue-test-utils\": \"web-testing-vue-test-utils\",\n \"web-accessibility\": \"web-accessibility-web-accessibility\",\n \"web-performance\": \"web-performance-web-performance\",\n websockets: \"web-realtime-websockets\",\n \"write-verification\": \"meta-methodology-write-verification\",\n \"zod-validation\": \"web-forms-zod-validation\",\n zustand: \"web-state-zustand\",\n} as const;\n\nexport type SkillSlug = keyof typeof SKILL_MAP;\nexport type SkillId = (typeof SKILL_MAP)[SkillSlug];\n\n// Derived arrays for Zod enum compatibility\n// (z.enum() requires a readonly tuple, not Object.keys/values)\nexport const SKILL_SLUGS = [\n \"angular-standalone\",\n \"anti-over-engineering\",\n \"api-performance\",\n \"auth-security\",\n \"axiom-pino-sentry\",\n \"better-auth-drizzle-hono\",\n \"cli-commander\",\n \"cli-reviewing\",\n \"context-management\",\n \"css-animations\",\n \"cva\",\n \"cypress-e2e\",\n \"date-fns\",\n \"drizzle\",\n \"error-boundaries\",\n \"expo\",\n \"express\",\n \"fastify\",\n \"file-upload-patterns\",\n \"framer-motion\",\n \"github-actions\",\n \"graphql-apollo\",\n \"graphql-urql\",\n \"hono\",\n \"image-handling\",\n \"improvement-protocol\",\n \"investigation-requirements\",\n \"jotai\",\n \"mobx\",\n \"msw\",\n \"native-js\",\n \"next-intl\",\n \"nextjs-app-router\",\n \"nextjs-server-actions\",\n \"ngrx-signalstore\",\n \"nuxt\",\n \"oclif-ink\",\n \"offline-first\",\n \"pinia\",\n \"playwright-e2e\",\n \"posthog-analytics\",\n \"posthog-flags\",\n \"prisma\",\n \"radix-ui\",\n \"react\",\n \"react-hook-form\",\n \"react-intl\",\n \"react-native\",\n \"react-query\",\n \"react-testing-library\",\n \"redux-toolkit\",\n \"remix\",\n \"research-methodology\",\n \"resend-react-email\",\n \"result-types\",\n \"reviewing\",\n \"scss-modules\",\n \"service-workers\",\n \"setup-axiom-pino-sentry\",\n \"setup-env\",\n \"setup-posthog\",\n \"setup-resend\",\n \"setup-tooling\",\n \"shadcn-ui\",\n \"socket-io\",\n \"solidjs\",\n \"sse\",\n \"storybook\",\n \"success-criteria\",\n \"swr\",\n \"tailwind\",\n \"tanstack-table\",\n \"trpc\",\n \"turborepo\",\n \"vee-validate\",\n \"view-transitions\",\n \"vitest\",\n \"vue-composition-api\",\n \"vue-i18n\",\n \"vue-test-utils\",\n \"web-accessibility\",\n \"web-performance\",\n \"websockets\",\n \"write-verification\",\n \"zod-validation\",\n \"zustand\",\n] as const satisfies readonly SkillSlug[];\n\nexport const SKILL_IDS = [\n \"api-analytics-posthog-analytics\",\n \"api-analytics-setup-posthog\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-ci-cd-github-actions\",\n \"api-database-drizzle\",\n \"api-database-prisma\",\n \"api-email-resend-react-email\",\n \"api-email-setup-resend\",\n \"api-flags-posthog-flags\",\n \"api-framework-express\",\n \"api-framework-fastify\",\n \"api-framework-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"api-observability-setup-axiom-pino-sentry\",\n \"api-performance-api-performance\",\n \"cli-framework-cli-commander\",\n \"cli-framework-oclif-ink\",\n \"infra-env-setup-env\",\n \"infra-monorepo-turborepo\",\n \"infra-tooling-setup-tooling\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-context-management\",\n \"meta-methodology-improvement-protocol\",\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-success-criteria\",\n \"meta-methodology-write-verification\",\n \"meta-research-research-methodology\",\n \"meta-reviewing-cli-reviewing\",\n \"meta-reviewing-reviewing\",\n \"mobile-framework-expo\",\n \"mobile-framework-react-native\",\n \"security-auth-security\",\n \"web-accessibility-web-accessibility\",\n \"web-animation-css-animations\",\n \"web-animation-framer-motion\",\n \"web-animation-view-transitions\",\n \"web-data-fetching-graphql-apollo\",\n \"web-data-fetching-graphql-urql\",\n \"web-data-fetching-swr\",\n \"web-data-fetching-trpc\",\n \"web-error-handling-error-boundaries\",\n \"web-error-handling-result-types\",\n \"web-files-file-upload-patterns\",\n \"web-files-image-handling\",\n \"web-forms-react-hook-form\",\n \"web-forms-vee-validate\",\n \"web-forms-zod-validation\",\n \"web-framework-angular-standalone\",\n \"web-framework-nextjs-app-router\",\n \"web-framework-nextjs-server-actions\",\n \"web-framework-nuxt\",\n \"web-framework-react\",\n \"web-framework-remix\",\n \"web-framework-solidjs\",\n \"web-framework-vue-composition-api\",\n \"web-i18n-next-intl\",\n \"web-i18n-react-intl\",\n \"web-i18n-vue-i18n\",\n \"web-mocks-msw\",\n \"web-performance-web-performance\",\n \"web-pwa-offline-first\",\n \"web-pwa-service-workers\",\n \"web-realtime-socket-io\",\n \"web-realtime-sse\",\n \"web-realtime-websockets\",\n \"web-server-state-react-query\",\n \"web-state-jotai\",\n \"web-state-mobx\",\n \"web-state-ngrx-signalstore\",\n \"web-state-pinia\",\n \"web-state-redux-toolkit\",\n \"web-state-zustand\",\n \"web-styling-cva\",\n \"web-styling-scss-modules\",\n \"web-styling-tailwind\",\n \"web-testing-cypress-e2e\",\n \"web-testing-playwright-e2e\",\n \"web-testing-react-testing-library\",\n \"web-testing-vitest\",\n \"web-testing-vue-test-utils\",\n \"web-tooling-storybook\",\n \"web-ui-radix-ui\",\n \"web-ui-shadcn-ui\",\n \"web-ui-tanstack-table\",\n \"web-utilities-date-fns\",\n \"web-utilities-native-js\",\n] as const satisfies readonly SkillId[];\n\n// ── Categories ─────────────────────────────────────────────────\n\nexport const CATEGORIES = [\n \"api-analytics\",\n \"api-api\",\n \"api-auth\",\n \"api-database\",\n \"api-email\",\n \"api-observability\",\n \"api-performance\",\n \"cli-framework\",\n \"mobile-framework\",\n \"shared-ci-cd\",\n \"shared-methodology\",\n \"shared-monorepo\",\n \"shared-research\",\n \"shared-reviewing\",\n \"shared-security\",\n \"shared-tooling\",\n \"web-accessibility\",\n \"web-animation\",\n \"web-client-state\",\n \"web-error-handling\",\n \"web-file-upload\",\n \"web-files\",\n \"web-forms\",\n \"web-framework\",\n \"web-i18n\",\n \"web-mocking\",\n \"web-performance\",\n \"web-pwa\",\n \"web-realtime\",\n \"web-server-state\",\n \"web-styling\",\n \"web-testing\",\n \"web-ui-components\",\n \"web-utilities\",\n] as const;\n\nexport type Category = (typeof CATEGORIES)[number];\n\n// ── Domains ────────────────────────────────────────────────────\n\nexport const DOMAINS = [\"api\", \"cli\", \"mobile\", \"shared\", \"web\"] as const;\n\nexport type Domain = (typeof DOMAINS)[number];\n\n// ── Agent Names ────────────────────────────────────────────────\n\nexport const AGENT_NAMES = [\n \"agent-summoner\",\n \"api-developer\",\n \"api-researcher\",\n \"api-reviewer\",\n \"cli-developer\",\n \"cli-reviewer\",\n \"cli-tester\",\n \"documentor\",\n \"pattern-scout\",\n \"skill-summoner\",\n \"web-architecture\",\n \"web-developer\",\n \"web-pattern-critique\",\n \"web-pm\",\n \"web-researcher\",\n \"web-reviewer\",\n \"web-tester\",\n] as const;\n\nexport type AgentName = (typeof AGENT_NAMES)[number];\n"],"mappings":";;;;;;AAAA;AAmGO,IAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA6FO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,UAAU,CAAC,OAAO,OAAO,UAAU,UAAU,KAAK;AAMxD,IAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  TEST_CATEGORIES
4
- } from "./chunk-WWHDP5CP.js";
4
+ } from "./chunk-V5HR77EY.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -45,6 +45,24 @@ var FRAMEWORK_CATEGORY = {
45
45
  description: "Web frameworks",
46
46
  order: 1
47
47
  };
48
+ var MULTI_SOURCE_CATEGORIES = {
49
+ "web-framework": { ...TEST_CATEGORIES.framework, exclusive: true, required: true },
50
+ "web-client-state": {
51
+ ...TEST_CATEGORIES.clientState,
52
+ displayName: "State",
53
+ description: "State category",
54
+ order: 1
55
+ },
56
+ "web-styling": { ...TEST_CATEGORIES.styling, order: 2 },
57
+ "web-testing": { ...TEST_CATEGORIES.testing, exclusive: false, order: 3 },
58
+ "api-api": { ...TEST_CATEGORIES.api, exclusive: true, order: 4 },
59
+ "api-database": { ...TEST_CATEGORIES.database, order: 5 },
60
+ "shared-security": { ...TEST_CATEGORIES.security, order: 6 },
61
+ "web-animation": { ...TEST_CATEGORIES.animation, order: 7 },
62
+ "shared-methodology": { ...TEST_CATEGORIES.methodology, order: 8 },
63
+ "web-accessibility": { ...TEST_CATEGORIES.accessibility, order: 9 },
64
+ "api-observability": { ...TEST_CATEGORIES.observability, order: 10 }
65
+ };
48
66
 
49
67
  export {
50
68
  WEB_FRAMEWORK_CATEGORY,
@@ -55,4 +73,4 @@ export {
55
73
  CLI_FRAMEWORK_CATEGORY,
56
74
  FRAMEWORK_CATEGORY
57
75
  };
58
- //# sourceMappingURL=chunk-Q3YMO5YG.js.map
76
+ //# sourceMappingURL=chunk-TNSVPZHP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/lib/__tests__/mock-data/mock-categories.ts"],"sourcesContent":["// Shared category definitions with domain overrides for test files.\n// Spreads from TEST_CATEGORIES in test-fixtures.ts.\n\nimport { TEST_CATEGORIES } from \"../test-fixtures.js\";\nimport type { Category, CategoryDefinition } from \"../../../types\";\n\n// ---------------------------------------------------------------------------\n// Categories from step-build.test.tsx (with domain overrides)\n// ---------------------------------------------------------------------------\n\nexport const WEB_FRAMEWORK_CATEGORY = {\n ...TEST_CATEGORIES.framework,\n required: true,\n};\n\nexport const WEB_STYLING_CATEGORY = {\n ...TEST_CATEGORIES.styling,\n required: true,\n order: 1,\n};\n\nexport const WEB_STATE_CATEGORY = {\n ...TEST_CATEGORIES.clientState,\n order: 2,\n};\n\nexport const API_FRAMEWORK_CATEGORY = {\n ...TEST_CATEGORIES.api,\n displayName: \"API Framework\",\n // Boundary cast: narrows string to Domain union\n domain: \"api\" as const,\n required: true,\n order: 0,\n};\n\nexport const API_DATABASE_CATEGORY = {\n ...TEST_CATEGORIES.database,\n // Boundary cast: narrows string to Domain union\n domain: \"api\" as const,\n order: 1,\n};\n\n// ---------------------------------------------------------------------------\n// Categories from matrix-loader.test.ts (basic, no domain override)\n// ---------------------------------------------------------------------------\n\nexport const CLI_FRAMEWORK_CATEGORY = {\n ...TEST_CATEGORIES.cliFramework,\n domain: \"cli\" as const,\n exclusive: false,\n};\n\nexport const FRAMEWORK_CATEGORY = {\n ...TEST_CATEGORIES.framework,\n description: \"Web frameworks\",\n order: 1,\n};\n\n// ---------------------------------------------------------------------------\n// Categories from skill-resolution.integration.test.ts (multi-source)\n// ---------------------------------------------------------------------------\n\nexport const MULTI_SOURCE_CATEGORIES = {\n \"web-framework\": { ...TEST_CATEGORIES.framework, exclusive: true, required: true },\n \"web-client-state\": {\n ...TEST_CATEGORIES.clientState,\n displayName: \"State\",\n description: \"State category\",\n order: 1,\n },\n \"web-styling\": { ...TEST_CATEGORIES.styling, order: 2 },\n \"web-testing\": { ...TEST_CATEGORIES.testing, exclusive: false, order: 3 },\n \"api-api\": { ...TEST_CATEGORIES.api, exclusive: true, order: 4 },\n \"api-database\": { ...TEST_CATEGORIES.database, order: 5 },\n \"shared-security\": { ...TEST_CATEGORIES.security, order: 6 },\n \"web-animation\": { ...TEST_CATEGORIES.animation, order: 7 },\n \"shared-methodology\": { ...TEST_CATEGORIES.methodology, order: 8 },\n \"web-accessibility\": { ...TEST_CATEGORIES.accessibility, order: 9 },\n \"api-observability\": { ...TEST_CATEGORIES.observability, order: 10 },\n} as Partial<Record<Category, CategoryDefinition>> as Record<Category, CategoryDefinition>;\n"],"mappings":";;;;;;;;;AAAA;AAUO,IAAM,yBAAyB;AAAA,EACpC,GAAG,gBAAgB;AAAA,EACnB,UAAU;AACZ;AAEO,IAAM,uBAAuB;AAAA,EAClC,GAAG,gBAAgB;AAAA,EACnB,UAAU;AAAA,EACV,OAAO;AACT;AAEO,IAAM,qBAAqB;AAAA,EAChC,GAAG,gBAAgB;AAAA,EACnB,OAAO;AACT;AAEO,IAAM,yBAAyB;AAAA,EACpC,GAAG,gBAAgB;AAAA,EACnB,aAAa;AAAA;AAAA,EAEb,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AACT;AAEO,IAAM,wBAAwB;AAAA,EACnC,GAAG,gBAAgB;AAAA;AAAA,EAEnB,QAAQ;AAAA,EACR,OAAO;AACT;AAMO,IAAM,yBAAyB;AAAA,EACpC,GAAG,gBAAgB;AAAA,EACnB,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,IAAM,qBAAqB;AAAA,EAChC,GAAG,gBAAgB;AAAA,EACnB,aAAa;AAAA,EACb,OAAO;AACT;AAMO,IAAM,0BAA0B;AAAA,EACrC,iBAAiB,EAAE,GAAG,gBAAgB,WAAW,WAAW,MAAM,UAAU,KAAK;AAAA,EACjF,oBAAoB;AAAA,IAClB,GAAG,gBAAgB;AAAA,IACnB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,eAAe,EAAE,GAAG,gBAAgB,SAAS,OAAO,EAAE;AAAA,EACtD,eAAe,EAAE,GAAG,gBAAgB,SAAS,WAAW,OAAO,OAAO,EAAE;AAAA,EACxE,WAAW,EAAE,GAAG,gBAAgB,KAAK,WAAW,MAAM,OAAO,EAAE;AAAA,EAC/D,gBAAgB,EAAE,GAAG,gBAAgB,UAAU,OAAO,EAAE;AAAA,EACxD,mBAAmB,EAAE,GAAG,gBAAgB,UAAU,OAAO,EAAE;AAAA,EAC3D,iBAAiB,EAAE,GAAG,gBAAgB,WAAW,OAAO,EAAE;AAAA,EAC1D,sBAAsB,EAAE,GAAG,gBAAgB,aAAa,OAAO,EAAE;AAAA,EACjE,qBAAqB,EAAE,GAAG,gBAAgB,eAAe,OAAO,EAAE;AAAA,EAClE,qBAAqB,EAAE,GAAG,gBAAgB,eAAe,OAAO,GAAG;AACrE;","names":[]}
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  WizardLayout
4
- } from "./chunk-G3LNIYZG.js";
4
+ } from "./chunk-J5T7M2CS.js";
5
5
  import {
6
6
  StepSettings
7
- } from "./chunk-LM5YQUBR.js";
7
+ } from "./chunk-WQRFVEAA.js";
8
8
  import {
9
9
  StepSources
10
- } from "./chunk-OODTDGEM.js";
10
+ } from "./chunk-KTF5RKKP.js";
11
11
  import {
12
12
  StepStack
13
- } from "./chunk-RJOLQ7EK.js";
13
+ } from "./chunk-JWZLVWTX.js";
14
14
  import {
15
15
  StepAgents
16
- } from "./chunk-LBTW5HSY.js";
16
+ } from "./chunk-XP7BXHFG.js";
17
17
  import {
18
18
  StepBuild
19
- } from "./chunk-3SLO2QPW.js";
19
+ } from "./chunk-ZO7C5WMJ.js";
20
20
  import {
21
21
  StepConfirm
22
- } from "./chunk-52THXN5G.js";
22
+ } from "./chunk-NUJHWYCR.js";
23
23
  import {
24
24
  getStackName
25
- } from "./chunk-ZYUASJUN.js";
25
+ } from "./chunk-BH4LN7XV.js";
26
26
  import {
27
27
  useWizardStore
28
- } from "./chunk-URAXGHF2.js";
28
+ } from "./chunk-B7KVPY3Z.js";
29
29
  import {
30
30
  cliTheme
31
31
  } from "./chunk-T5DJCIUP.js";
@@ -39,13 +39,11 @@ import {
39
39
  import {
40
40
  resolveAlias,
41
41
  validateSelection
42
- } from "./chunk-HMJGSAKV.js";
42
+ } from "./chunk-ZLMKEYDF.js";
43
43
  import {
44
- getMatrix
45
- } from "./chunk-BKL3DF2Q.js";
46
- import {
47
- warn
48
- } from "./chunk-ZEJIEC2A.js";
44
+ findStack,
45
+ matrix
46
+ } from "./chunk-E74Q7GUE.js";
49
47
  import {
50
48
  CLI_COLORS
51
49
  } from "./chunk-EGMQ3SXN.js";
@@ -114,7 +112,7 @@ function useBuildStepProps({
114
112
  const onToggle = useCallback(
115
113
  (categoryId, techId) => {
116
114
  const domain = store.getCurrentDomain() || "web";
117
- const cat = getMatrix().categories[categoryId];
115
+ const cat = matrix.categories[categoryId];
118
116
  store.toggleTechnology(domain, categoryId, techId, cat?.exclusive ?? true);
119
117
  },
120
118
  [store]
@@ -232,11 +230,11 @@ var Wizard = ({
232
230
  const handleComplete = useCallback2(() => {
233
231
  let allSkills;
234
232
  if (store.selectedStackId && store.stackAction === "defaults") {
235
- const stack = getMatrix().suggestedStacks.find((s) => s.id === store.selectedStackId);
233
+ const stack = findStack(store.selectedStackId);
236
234
  if (!stack) {
237
- warn(`Stack not found in matrix: '${store.selectedStackId}'`);
235
+ throw new Error(`Stack not found: ${store.selectedStackId}`);
238
236
  }
239
- allSkills = [...stack?.allSkillIds || []];
237
+ allSkills = [...stack.allSkillIds];
240
238
  } else {
241
239
  const techNames = store.getAllSelectedTechnologies();
242
240
  allSkills = techNames.map((tech) => resolveAlias(tech));
@@ -341,4 +339,4 @@ var Wizard = ({
341
339
  export {
342
340
  Wizard
343
341
  };
344
- //# sourceMappingURL=chunk-UQTG4ZBA.js.map
342
+ //# sourceMappingURL=chunk-UFAP6GHD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard.tsx","../src/cli/components/hooks/use-wizard-initialization.ts","../src/cli/components/hooks/use-build-step-props.ts"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text, useApp, useInput, useStdout } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardLayout } from \"./wizard-layout.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { StepSources } from \"./step-sources.js\";\nimport { StepSettings } from \"./step-settings.js\";\nimport { StepAgents } from \"./step-agents.js\";\nimport { resolveAlias, validateSelection } from \"../../lib/matrix/index.js\";\nimport { matrix, findStack } from \"../../lib/matrix/matrix-provider.js\";\nimport {\n HOTKEY_ACCEPT_DEFAULTS,\n HOTKEY_HELP,\n HOTKEY_SCOPE,\n HOTKEY_SETTINGS,\n isHotkey,\n} from \"./hotkeys.js\";\nimport type { AgentName, Domain, DomainSelections, SkillId } from \"../../types/index.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../../types/config.js\";\nimport { getStackName } from \"./utils.js\";\nimport type { StartupMessage } from \"../../utils/logger.js\";\nimport { useWizardInitialization } from \"../hooks/use-wizard-initialization.js\";\nimport { useBuildStepProps } from \"../hooks/use-build-step-props.js\";\n\nexport type WizardResultV2 = {\n skills: SkillConfig[];\n selectedAgents: AgentName[];\n agentConfigs: AgentScopeConfig[];\n selectedStackId: string | null;\n domainSelections: DomainSelections;\n selectedDomains: Domain[];\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n};\n\ntype WizardProps = {\n onComplete: (result: WizardResultV2) => void;\n onCancel: () => void;\n version?: string;\n marketplaceLabel?: string;\n logo?: string;\n initialStep?: WizardStep;\n initialDomains?: Domain[];\n initialAgents?: AgentName[];\n installedSkillIds?: SkillId[];\n installedSkillConfigs?: SkillConfig[];\n installedAgentConfigs?: AgentScopeConfig[];\n lockedSkillIds?: SkillId[];\n lockedAgentNames?: AgentName[];\n projectDir?: string;\n startupMessages?: StartupMessage[];\n};\n\nconst MIN_TERMINAL_WIDTH = 80;\nconst MIN_TERMINAL_HEIGHT = 15;\n\nexport const Wizard: React.FC<WizardProps> = ({\n onComplete,\n onCancel,\n version,\n marketplaceLabel,\n logo,\n initialStep,\n initialDomains,\n initialAgents,\n installedSkillIds,\n installedSkillConfigs,\n installedAgentConfigs,\n lockedSkillIds,\n lockedAgentNames,\n projectDir,\n startupMessages,\n}) => {\n const store = useWizardStore();\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;\n const terminalHeight = stdout.rows || MIN_TERMINAL_HEIGHT;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n const isShortTerminal = terminalHeight < MIN_TERMINAL_HEIGHT;\n\n useWizardInitialization({\n initialStep,\n initialDomains,\n initialAgents,\n installedSkillIds,\n installedSkillConfigs,\n installedAgentConfigs,\n lockedSkillIds,\n lockedAgentNames,\n });\n\n const buildStepProps = useBuildStepProps({ store, installedSkillIds });\n\n useInput((input, key) => {\n // ESC is handled by step-settings.tsx's own useKeyboardNavigation hook\n if (store.showSettings) {\n if (isHotkey(input, HOTKEY_SETTINGS)) {\n store.toggleSettings();\n }\n return;\n }\n\n if (store.showHelp) {\n if (key.escape || isHotkey(input, HOTKEY_HELP)) {\n store.toggleHelp();\n }\n return;\n }\n\n if (isHotkey(input, HOTKEY_HELP)) {\n store.toggleHelp();\n return;\n }\n\n if (key.escape) {\n // At the initial stack/scratch selection (approach not yet set), ESC cancels the wizard.\n // StackSelection handles its own ESC via the onCancel prop.\n // Other steps that don't have their own escape handler use goBack.\n if (\n store.step !== \"build\" &&\n store.step !== \"confirm\" &&\n store.step !== \"sources\" &&\n store.step !== \"agents\" &&\n store.step !== \"stack\"\n ) {\n store.goBack();\n }\n return;\n }\n\n if (\n isHotkey(input, HOTKEY_ACCEPT_DEFAULTS) &&\n store.step === \"build\" &&\n store.selectedStackId\n ) {\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n return;\n }\n\n if (isHotkey(input, HOTKEY_SCOPE) && store.step === \"build\") {\n const focused = store.focusedSkillId;\n if (focused) {\n store.toggleSkillScope(focused);\n }\n return;\n }\n\n if (isHotkey(input, HOTKEY_SCOPE) && store.step === \"agents\") {\n const focused = store.focusedAgentId;\n if (focused) {\n store.toggleAgentScope(focused);\n }\n return;\n }\n\n if (isHotkey(input, HOTKEY_SETTINGS) && store.step === \"sources\") {\n store.toggleSettings();\n return;\n }\n });\n\n const handleComplete = useCallback(() => {\n let allSkills: SkillId[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n const stack = findStack(store.selectedStackId);\n if (!stack) {\n throw new Error(`Stack not found: ${store.selectedStackId}`);\n }\n allSkills = [...stack.allSkillIds];\n } else {\n const techNames = store.getAllSelectedTechnologies();\n allSkills = techNames.map((tech) => resolveAlias(tech));\n }\n\n const skillConfigs: SkillConfig[] = allSkills.map((id) => {\n const existing = store.skillConfigs.find((sc) => sc.id === id);\n return existing ?? { id, scope: \"global\" as const, source: \"local\" };\n });\n\n const validation = validateSelection(allSkills);\n\n const result: WizardResultV2 = {\n skills: skillConfigs,\n selectedAgents: store.selectedAgents,\n agentConfigs: store.agentConfigs,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n selectedDomains: store.selectedDomains,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, onComplete, exit]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n exit();\n }, [onCancel, exit]);\n\n const renderStep = () => {\n switch (store.step) {\n case \"stack\":\n return <StepStack onCancel={handleCancel} />;\n\n case \"build\":\n return <StepBuild {...buildStepProps} />;\n\n case \"sources\": {\n if (store.showSettings) {\n return (\n <StepSettings\n projectDir={projectDir || process.cwd()}\n onClose={() => store.toggleSettings()}\n />\n );\n }\n return (\n <StepSources\n projectDir={projectDir}\n onContinue={() => {\n if (!initialAgents?.length) {\n store.preselectAgentsFromDomains();\n }\n store.setStep(\"agents\");\n }}\n onBack={store.goBack}\n />\n );\n }\n\n case \"agents\":\n return <StepAgents />;\n\n case \"confirm\": {\n const stackName = getStackName(store.selectedStackId);\n const selectedSkills = store.getAllSelectedTechnologies();\n return (\n <StepConfirm\n onComplete={handleComplete}\n stackName={stackName}\n selectedDomains={store.selectedDomains}\n domainSelections={store.domainSelections}\n technologyCount={selectedSkills.length}\n skillCount={selectedSkills.length}\n agentCount={store.selectedAgents.length}\n skillConfigs={store.skillConfigs}\n agentConfigs={store.agentConfigs}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n if (isNarrowTerminal || isShortTerminal) {\n const issue = isNarrowTerminal\n ? `too narrow (${terminalWidth} columns, need ${MIN_TERMINAL_WIDTH})`\n : `too short (${terminalHeight} rows, need ${MIN_TERMINAL_HEIGHT})`;\n\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color={CLI_COLORS.WARNING}>Terminal {issue}. Please resize your terminal.</Text>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout\n version={version}\n marketplaceLabel={marketplaceLabel}\n logo={logo}\n startupMessages={startupMessages}\n >\n {renderStep()}\n </WizardLayout>\n </ThemeProvider>\n );\n};\n","import { useRef } from \"react\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../../types/config.js\";\nimport type { AgentName, Domain, SkillId } from \"../../types/index.js\";\n\ntype UseWizardInitializationOptions = {\n initialStep?: WizardStep;\n initialDomains?: Domain[];\n initialAgents?: AgentName[];\n installedSkillIds?: SkillId[];\n installedSkillConfigs?: SkillConfig[];\n installedAgentConfigs?: AgentScopeConfig[];\n lockedSkillIds?: SkillId[];\n lockedAgentNames?: AgentName[];\n};\n\n/**\n * Runs one-time wizard store initialization before the first render.\n * Populates step, approach, and skill selections from props.\n */\nexport function useWizardInitialization({\n initialStep,\n initialDomains,\n initialAgents,\n installedSkillIds,\n installedSkillConfigs,\n installedAgentConfigs,\n lockedSkillIds,\n lockedAgentNames,\n}: UseWizardInitializationOptions): void {\n const initialized = useRef(false);\n\n if (!initialized.current) {\n initialized.current = true;\n\n if (initialStep) {\n if (installedSkillIds?.length) {\n useWizardStore.getState().populateFromSkillIds(installedSkillIds, installedSkillConfigs);\n }\n useWizardStore.setState({ step: initialStep, approach: \"scratch\" });\n }\n // Restore saved domains from config, overriding the domains\n // derived by populateFromSkillIds\n if (initialDomains?.length) {\n useWizardStore.setState({ selectedDomains: initialDomains });\n }\n // Restore saved agents from config, overriding the default empty array\n if (initialAgents?.length) {\n useWizardStore.setState({ selectedAgents: initialAgents });\n }\n // Restore saved agent scope configs (project vs global)\n if (initialAgents?.length && installedAgentConfigs?.length) {\n useWizardStore.setState({ agentConfigs: installedAgentConfigs });\n }\n // Set locked IDs (D9: global items read-only in project context)\n if (lockedSkillIds?.length || lockedAgentNames?.length) {\n useWizardStore.setState({\n ...(lockedSkillIds?.length && { lockedSkillIds }),\n ...(lockedAgentNames?.length && { lockedAgentNames }),\n });\n }\n }\n}\n","import { useCallback } from \"react\";\nimport type { Domain, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport type { StepBuildProps } from \"../wizard/step-build.js\";\n\ntype UseBuildStepPropsOptions = {\n store: WizardState;\n installedSkillIds?: SkillId[];\n};\n\nexport function useBuildStepProps({\n store,\n installedSkillIds,\n}: UseBuildStepPropsOptions): StepBuildProps {\n const currentDomain = store.getCurrentDomain();\n const defaultDomains: Domain[] = [\"web\"];\n const effectiveDomains =\n store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;\n\n const allSelections = store.getAllSelectedTechnologies();\n\n const activeDomain: Domain = currentDomain || effectiveDomains[0] || \"web\";\n\n const onToggle = useCallback(\n (categoryId: Parameters<StepBuildProps[\"onToggle\"]>[0], techId: SkillId) => {\n const domain: Domain = store.getCurrentDomain() || \"web\";\n const cat = matrix.categories[categoryId];\n store.toggleTechnology(domain, categoryId, techId, cat?.exclusive ?? true);\n },\n [store],\n );\n\n const onContinue = useCallback(() => {\n if (!store.nextDomain()) {\n store.setStep(\"sources\");\n }\n }, [store]);\n\n const onBack = useCallback(() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }, [store]);\n\n return {\n domain: activeDomain,\n selectedDomains: effectiveDomains,\n selections: store.domainSelections[activeDomain] || {},\n allSelections,\n showLabels: store.showLabels,\n installedSkillIds,\n onToggle,\n onToggleLabels: store.toggleShowLabels,\n onContinue,\n onBack,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,eAAAA,oBAAmB;AACnC,SAAS,KAAK,MAAM,QAAQ,UAAU,iBAAiB;AACvD,SAAS,qBAAqB;;;ACF9B;AAAA,SAAS,cAAc;AAoBhB,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyC;AACvC,QAAM,cAAc,OAAO,KAAK;AAEhC,MAAI,CAAC,YAAY,SAAS;AACxB,gBAAY,UAAU;AAEtB,QAAI,aAAa;AACf,UAAI,mBAAmB,QAAQ;AAC7B,uBAAe,SAAS,EAAE,qBAAqB,mBAAmB,qBAAqB;AAAA,MACzF;AACA,qBAAe,SAAS,EAAE,MAAM,aAAa,UAAU,UAAU,CAAC;AAAA,IACpE;AAGA,QAAI,gBAAgB,QAAQ;AAC1B,qBAAe,SAAS,EAAE,iBAAiB,eAAe,CAAC;AAAA,IAC7D;AAEA,QAAI,eAAe,QAAQ;AACzB,qBAAe,SAAS,EAAE,gBAAgB,cAAc,CAAC;AAAA,IAC3D;AAEA,QAAI,eAAe,UAAU,uBAAuB,QAAQ;AAC1D,qBAAe,SAAS,EAAE,cAAc,sBAAsB,CAAC;AAAA,IACjE;AAEA,QAAI,gBAAgB,UAAU,kBAAkB,QAAQ;AACtD,qBAAe,SAAS;AAAA,QACtB,GAAI,gBAAgB,UAAU,EAAE,eAAe;AAAA,QAC/C,GAAI,kBAAkB,UAAU,EAAE,iBAAiB;AAAA,MACrD,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AC9DA;AAAA,SAAS,mBAAmB;AAWrB,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAA6C;AAC3C,QAAM,gBAAgB,MAAM,iBAAiB;AAC7C,QAAM,iBAA2B,CAAC,KAAK;AACvC,QAAM,mBACJ,MAAM,gBAAgB,SAAS,IAAI,MAAM,kBAAkB;AAE7D,QAAM,gBAAgB,MAAM,2BAA2B;AAEvD,QAAM,eAAuB,iBAAiB,iBAAiB,CAAC,KAAK;AAErE,QAAM,WAAW;AAAA,IACf,CAAC,YAAuD,WAAoB;AAC1E,YAAM,SAAiB,MAAM,iBAAiB,KAAK;AACnD,YAAM,MAAM,OAAO,WAAW,UAAU;AACxC,YAAM,iBAAiB,QAAQ,YAAY,QAAQ,KAAK,aAAa,IAAI;AAAA,IAC3E;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,aAAa,YAAY,MAAM;AACnC,QAAI,CAAC,MAAM,WAAW,GAAG;AACvB,YAAM,QAAQ,SAAS;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,CAAC,MAAM,WAAW,GAAG;AACvB,YAAM,OAAO;AAAA,IACf;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,YAAY,MAAM,iBAAiB,YAAY,KAAK,CAAC;AAAA,IACrD;AAAA,IACA,YAAY,MAAM;AAAA,IAClB;AAAA,IACA;AAAA,IACA,gBAAgB,MAAM;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AACF;;;AFgKe,cA+DL,YA/DK;AA3Jf,IAAM,qBAAqB;AAC3B,IAAM,sBAAsB;AAErB,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,eAAe;AAC7B,QAAM,EAAE,KAAK,IAAI,OAAO;AACxB,QAAM,EAAE,OAAO,IAAI,UAAU;AAE7B,QAAM,gBAAgB,OAAO,WAAW;AACxC,QAAM,iBAAiB,OAAO,QAAQ;AACtC,QAAM,mBAAmB,gBAAgB;AACzC,QAAM,kBAAkB,iBAAiB;AAEzC,0BAAwB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;AAErE,WAAS,CAAC,OAAO,QAAQ;AAEvB,QAAI,MAAM,cAAc;AACtB,UAAI,SAAS,OAAO,eAAe,GAAG;AACpC,cAAM,eAAe;AAAA,MACvB;AACA;AAAA,IACF;AAEA,QAAI,MAAM,UAAU;AAClB,UAAI,IAAI,UAAU,SAAS,OAAO,WAAW,GAAG;AAC9C,cAAM,WAAW;AAAA,MACnB;AACA;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,WAAW,GAAG;AAChC,YAAM,WAAW;AACjB;AAAA,IACF;AAEA,QAAI,IAAI,QAAQ;AAId,UACE,MAAM,SAAS,WACf,MAAM,SAAS,aACf,MAAM,SAAS,aACf,MAAM,SAAS,YACf,MAAM,SAAS,SACf;AACA,cAAM,OAAO;AAAA,MACf;AACA;AAAA,IACF;AAEA,QACE,SAAS,OAAO,sBAAsB,KACtC,MAAM,SAAS,WACf,MAAM,iBACN;AACA,YAAM,eAAe,UAAU;AAC/B,YAAM,QAAQ,SAAS;AACvB;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,YAAY,KAAK,MAAM,SAAS,SAAS;AAC3D,YAAM,UAAU,MAAM;AACtB,UAAI,SAAS;AACX,cAAM,iBAAiB,OAAO;AAAA,MAChC;AACA;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,YAAY,KAAK,MAAM,SAAS,UAAU;AAC5D,YAAM,UAAU,MAAM;AACtB,UAAI,SAAS;AACX,cAAM,iBAAiB,OAAO;AAAA,MAChC;AACA;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,eAAe,KAAK,MAAM,SAAS,WAAW;AAChE,YAAM,eAAe;AACrB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,iBAAiBC,aAAY,MAAM;AACvC,QAAI;AAEJ,QAAI,MAAM,mBAAmB,MAAM,gBAAgB,YAAY;AAC7D,YAAM,QAAQ,UAAU,MAAM,eAAe;AAC7C,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,oBAAoB,MAAM,eAAe,EAAE;AAAA,MAC7D;AACA,kBAAY,CAAC,GAAG,MAAM,WAAW;AAAA,IACnC,OAAO;AACL,YAAM,YAAY,MAAM,2BAA2B;AACnD,kBAAY,UAAU,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC;AAAA,IACxD;AAEA,UAAM,eAA8B,UAAU,IAAI,CAAC,OAAO;AACxD,YAAM,WAAW,MAAM,aAAa,KAAK,CAAC,OAAO,GAAG,OAAO,EAAE;AAC7D,aAAO,YAAY,EAAE,IAAI,OAAO,UAAmB,QAAQ,QAAQ;AAAA,IACrE,CAAC;AAED,UAAM,aAAa,kBAAkB,SAAS;AAE9C,UAAM,SAAyB;AAAA,MAC7B,QAAQ;AAAA,MACR,gBAAgB,MAAM;AAAA,MACtB,cAAc,MAAM;AAAA,MACpB,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,MAAM;AAAA,MACvB,WAAW;AAAA,MACX;AAAA,IACF;AAEA,eAAW,MAAM;AACjB,SAAK;AAAA,EACP,GAAG,CAAC,OAAO,YAAY,IAAI,CAAC;AAE5B,QAAM,eAAeA,aAAY,MAAM;AACrC,aAAS;AACT,SAAK;AAAA,EACP,GAAG,CAAC,UAAU,IAAI,CAAC;AAEnB,QAAM,aAAa,MAAM;AACvB,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AACH,eAAO,oBAAC,aAAU,UAAU,cAAc;AAAA,MAE5C,KAAK;AACH,eAAO,oBAAC,aAAW,GAAG,gBAAgB;AAAA,MAExC,KAAK,WAAW;AACd,YAAI,MAAM,cAAc;AACtB,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,YAAY,cAAc,QAAQ,IAAI;AAAA,cACtC,SAAS,MAAM,MAAM,eAAe;AAAA;AAAA,UACtC;AAAA,QAEJ;AACA,eACE;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,YAAY,MAAM;AAChB,kBAAI,CAAC,eAAe,QAAQ;AAC1B,sBAAM,2BAA2B;AAAA,cACnC;AACA,oBAAM,QAAQ,QAAQ;AAAA,YACxB;AAAA,YACA,QAAQ,MAAM;AAAA;AAAA,QAChB;AAAA,MAEJ;AAAA,MAEA,KAAK;AACH,eAAO,oBAAC,cAAW;AAAA,MAErB,KAAK,WAAW;AACd,cAAM,YAAY,aAAa,MAAM,eAAe;AACpD,cAAM,iBAAiB,MAAM,2BAA2B;AACxD,eACE;AAAA,UAAC;AAAA;AAAA,YACC,YAAY;AAAA,YACZ;AAAA,YACA,iBAAiB,MAAM;AAAA,YACvB,kBAAkB,MAAM;AAAA,YACxB,iBAAiB,eAAe;AAAA,YAChC,YAAY,eAAe;AAAA,YAC3B,YAAY,MAAM,eAAe;AAAA,YACjC,cAAc,MAAM;AAAA,YACpB,cAAc,MAAM;AAAA,YACpB,QAAQ,MAAM;AAAA;AAAA,QAChB;AAAA,MAEJ;AAAA,MAEA;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,MAAI,oBAAoB,iBAAiB;AACvC,UAAM,QAAQ,mBACV,eAAe,aAAa,kBAAkB,kBAAkB,MAChE,cAAc,cAAc,eAAe,mBAAmB;AAElE,WACE,oBAAC,iBAAc,OAAO,UACpB,8BAAC,OAAI,eAAc,UAAS,SAAS,GACnC,+BAAC,QAAK,OAAO,WAAW,SAAS;AAAA;AAAA,MAAU;AAAA,MAAM;AAAA,OAA8B,GACjF,GACF;AAAA,EAEJ;AAEA,SACE,oBAAC,iBAAc,OAAO,UACpB;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC,qBAAW;AAAA;AAAA,EACd,GACF;AAEJ;","names":["useCallback","useCallback"]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  typedEntries
4
- } from "./chunk-T4EXUIBY.js";
4
+ } from "./chunk-EMX7PA2I.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -16,13 +16,30 @@ import { fileURLToPath } from "url";
16
16
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
17
17
  import { run } from "@oclif/core";
18
18
  import { createJiti } from "jiti";
19
- var __filename = fileURLToPath(import.meta.url);
20
- var __dirname = path.dirname(__filename);
21
- var CLI_ROOT = path.resolve(__dirname, "../../../..");
22
- var CONFIG_EXPORTS_PATH = path.resolve(__dirname, "../../config-exports.ts");
19
+
20
+ // src/cli/lib/__tests__/content-generators.ts
21
+ init_esm_shims();
22
+ function renderSkillMd(id, description, body) {
23
+ const desc = description ?? `${id} skill`;
24
+ const content = body ?? `# ${id}
25
+
26
+ ${desc}`;
27
+ return `---
28
+ name: ${id}
29
+ description: ${desc}
30
+ ---
31
+
32
+ ${content}
33
+ `;
34
+ }
35
+
36
+ // src/cli/lib/__tests__/helpers.ts
37
+ var __filename2 = fileURLToPath(import.meta.url);
38
+ var __dirname2 = path.dirname(__filename2);
39
+ var CLI_ROOT = path.resolve(__dirname2, "../../../..");
40
+ var CONFIG_EXPORTS_PATH = path.resolve(__dirname2, "../../config-exports.ts");
23
41
  function buildSkillConfigs(skillIds, overrides) {
24
42
  return skillIds.map((id) => ({
25
- // Boundary cast: test factory accepts arbitrary skill IDs for test isolation
26
43
  id,
27
44
  scope: overrides?.scope ?? "project",
28
45
  source: overrides?.source ?? "local"
@@ -106,9 +123,33 @@ function getCanonicalSkillCategories() {
106
123
  }
107
124
  return _canonicalSkillCategories;
108
125
  }
126
+ var DOMAIN_PREFIX_MAP = {
127
+ meta: "shared",
128
+ infra: "shared",
129
+ security: "shared"
130
+ };
131
+ function createTestSkill(id, description, overrides) {
132
+ const segments = id.split("-");
133
+ const rawPrefix = segments[0] ?? "web";
134
+ const domain = DOMAIN_PREFIX_MAP[rawPrefix] ?? rawPrefix;
135
+ const canonicalCategories = getCanonicalSkillCategories();
136
+ const category = canonicalCategories[id] ?? `${segments[0]}-${segments[1]}`;
137
+ const slug = segments.length >= 3 ? segments.slice(2).join("-") : id;
138
+ const displayName = slug.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
139
+ return {
140
+ id,
141
+ slug,
142
+ displayName,
143
+ description,
144
+ category,
145
+ author: "@test",
146
+ domain,
147
+ tags: [],
148
+ ...overrides
149
+ };
150
+ }
109
151
  function createMockSkill(id, overrides) {
110
- const skillId = id;
111
- const category = overrides?.category ?? getCanonicalSkillCategories()[skillId];
152
+ const category = overrides?.category ?? getCanonicalSkillCategories()[id];
112
153
  if (!category) {
113
154
  throw new Error(
114
155
  `createMockSkill: "${id}" not in canonical registry \u2014 provide { category } in overrides`
@@ -118,7 +159,7 @@ function createMockSkill(id, overrides) {
118
159
  const defaultSlug = segments.length >= 3 ? segments.slice(2).join("-") : id;
119
160
  const defaultDisplayName = defaultSlug.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
120
161
  return {
121
- id: skillId,
162
+ id,
122
163
  slug: defaultSlug,
123
164
  displayName: defaultDisplayName,
124
165
  description: `${id} skill`,
@@ -131,12 +172,30 @@ function createMockSkill(id, overrides) {
131
172
  alternatives: [],
132
173
  discourages: [],
133
174
  compatibleWith: [],
134
- requiresSetup: [],
135
- providesSetupFor: [],
136
175
  path: `skills/${category}/${id}/`,
137
176
  ...overrides
138
177
  };
139
178
  }
179
+ function createMockExtractedSkill(id, overrides) {
180
+ const segments = id.split("-");
181
+ const domain = segments[0] ?? "web";
182
+ const category = segments[1] ?? "framework";
183
+ const name = segments.slice(2).join("-") || "skill";
184
+ const directoryPath = `${domain}/${category}/${name}`;
185
+ return {
186
+ id,
187
+ directoryPath,
188
+ description: `${id} skill`,
189
+ category: `${domain}-${category}`,
190
+ author: "@test",
191
+ tags: [],
192
+ path: `skills/${directoryPath}/`,
193
+ domain,
194
+ displayName: name,
195
+ slug: name,
196
+ ...overrides
197
+ };
198
+ }
140
199
  function createMockMatrix(skillsOrFirstSkill, ...rest) {
141
200
  let skillsRecord;
142
201
  let overrides;
@@ -181,6 +240,16 @@ function createMockMatrix(skillsOrFirstSkill, ...rest) {
181
240
  ...overrides
182
241
  };
183
242
  }
243
+ function createMockSkillEntry(id, preloaded = false, overrides) {
244
+ return {
245
+ id,
246
+ path: `skills/${id}/`,
247
+ description: `${id} skill`,
248
+ usage: `when working with ${id}`,
249
+ preloaded,
250
+ ...overrides
251
+ };
252
+ }
184
253
  function createMockCategory(id, displayName, overrides) {
185
254
  return {
186
255
  id,
@@ -225,6 +294,13 @@ function createMockCompileConfig(agents, overrides) {
225
294
  ...overrides
226
295
  };
227
296
  }
297
+ function testSkillToResolvedSkill(skill, overrides) {
298
+ return createMockSkill(skill.id, {
299
+ description: skill.description,
300
+ ...skill.tags?.length ? { tags: skill.tags } : {},
301
+ ...overrides
302
+ });
303
+ }
228
304
 
229
305
  // src/cli/lib/__tests__/test-fixtures.ts
230
306
  var SKILLS = {
@@ -272,14 +348,19 @@ var TEST_CATEGORIES = {
272
348
  };
273
349
 
274
350
  export {
351
+ renderSkillMd,
275
352
  SKILLS,
276
353
  TEST_CATEGORIES,
277
354
  buildSkillConfigs,
355
+ createTestSkill,
278
356
  createMockSkill,
357
+ createMockExtractedSkill,
279
358
  createMockMatrix,
359
+ createMockSkillEntry,
280
360
  createMockCategory,
281
361
  createMockResolvedStack,
282
362
  createMockMatrixConfig,
283
- createMockCompileConfig
363
+ createMockCompileConfig,
364
+ testSkillToResolvedSkill
284
365
  };
285
- //# sourceMappingURL=chunk-WWHDP5CP.js.map
366
+ //# sourceMappingURL=chunk-V5HR77EY.js.map