@agents-inc/cli 0.71.0 → 0.73.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 (181) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +172 -23
  3. package/dist/{chunk-V5L532ZH.js → chunk-3K6FSET7.js} +6 -6
  4. package/dist/{chunk-HWVRHPXR.js → chunk-3REVX6S5.js} +11 -11
  5. package/dist/chunk-3REVX6S5.js.map +1 -0
  6. package/dist/{chunk-CADG5WWP.js → chunk-3VNQPCOE.js} +2511 -2688
  7. package/dist/chunk-3VNQPCOE.js.map +1 -0
  8. package/dist/{chunk-KANNRFY7.js → chunk-4KLUOFP6.js} +6 -7
  9. package/dist/chunk-4KLUOFP6.js.map +1 -0
  10. package/dist/{chunk-FCF4WQEI.js → chunk-6JRQPSKV.js} +2 -2
  11. package/dist/chunk-6JRQPSKV.js.map +1 -0
  12. package/dist/{chunk-ZYUASJUN.js → chunk-BH4LN7XV.js} +8 -6
  13. package/dist/chunk-BH4LN7XV.js.map +1 -0
  14. package/dist/{chunk-6YMW4HMX.js → chunk-DNPJ5GUK.js} +6 -6
  15. package/dist/chunk-DNPJ5GUK.js.map +1 -0
  16. package/dist/chunk-E74Q7GUE.js +5132 -0
  17. package/dist/chunk-E74Q7GUE.js.map +1 -0
  18. package/dist/{chunk-XYRVAEI6.js → chunk-EMWP363L.js} +8 -10
  19. package/dist/chunk-EMWP363L.js.map +1 -0
  20. package/dist/chunk-EMX7PA2I.js +39 -0
  21. package/dist/chunk-EMX7PA2I.js.map +1 -0
  22. package/dist/{chunk-KSAGOKWT.js → chunk-G23HPF6K.js} +3 -3
  23. package/dist/chunk-GDUOOT3J.js +689 -0
  24. package/dist/chunk-GDUOOT3J.js.map +1 -0
  25. package/dist/{chunk-X4RIMJNY.js → chunk-GSFZDUV2.js} +4 -4
  26. package/dist/chunk-GSFZDUV2.js.map +1 -0
  27. package/dist/{chunk-XB3TYSPL.js → chunk-H4ETXZVL.js} +6 -6
  28. package/dist/{chunk-XMZNHLV3.js → chunk-JHMECCBN.js} +4 -5
  29. package/dist/chunk-JHMECCBN.js.map +1 -0
  30. package/dist/{chunk-UDAHHJIM.js → chunk-K7WYMQQB.js} +18 -20
  31. package/dist/chunk-K7WYMQQB.js.map +1 -0
  32. package/dist/{chunk-AX6MMYAZ.js → chunk-KE2EAVFQ.js} +4 -4
  33. package/dist/{chunk-CKPJTMNC.js → chunk-KSMT5FVM.js} +4 -4
  34. package/dist/chunk-KSMT5FVM.js.map +1 -0
  35. package/dist/{chunk-KWB3B2HS.js → chunk-NKKYTCBH.js} +109 -86
  36. package/dist/chunk-NKKYTCBH.js.map +1 -0
  37. package/dist/{chunk-52THXN5G.js → chunk-NUJHWYCR.js} +2 -2
  38. package/dist/{chunk-QOJAZI72.js → chunk-OLWGGD4G.js} +20 -15
  39. package/dist/chunk-OLWGGD4G.js.map +1 -0
  40. package/dist/{chunk-UQM5YPPJ.js → chunk-PNZCVOCE.js} +5 -5
  41. package/dist/chunk-PNZCVOCE.js.map +1 -0
  42. package/dist/chunk-SRIH4U5Y.js +159 -0
  43. package/dist/chunk-SRIH4U5Y.js.map +1 -0
  44. package/dist/{chunk-6BXKF5GP.js → chunk-T7QY777F.js} +2 -2
  45. package/dist/{chunk-DHBRWGRZ.js → chunk-TNSVPZHP.js} +20 -2
  46. package/dist/chunk-TNSVPZHP.js.map +1 -0
  47. package/dist/{chunk-J2D6OBIX.js → chunk-V5HR77EY.js} +117 -13
  48. package/dist/chunk-V5HR77EY.js.map +1 -0
  49. package/dist/{chunk-R3AR4VLZ.js → chunk-WJL4KU5V.js} +70 -240
  50. package/dist/chunk-WJL4KU5V.js.map +1 -0
  51. package/dist/{chunk-VUUGWE6G.js → chunk-Y47CLMWE.js} +2 -2
  52. package/dist/{chunk-2VT2DMD7.js → chunk-Y4VUU5BT.js} +12 -14
  53. package/dist/chunk-Y4VUU5BT.js.map +1 -0
  54. package/dist/{chunk-L6MTIQ2U.js → chunk-ZBLSWJFM.js} +2 -2
  55. package/dist/chunk-ZBLSWJFM.js.map +1 -0
  56. package/dist/commands/build/marketplace.js +4 -3
  57. package/dist/commands/build/marketplace.js.map +1 -1
  58. package/dist/commands/build/plugins.js +9 -8
  59. package/dist/commands/build/plugins.js.map +1 -1
  60. package/dist/commands/build/stack.js +9 -8
  61. package/dist/commands/build/stack.js.map +1 -1
  62. package/dist/commands/compile.js +14 -10
  63. package/dist/commands/compile.js.map +1 -1
  64. package/dist/commands/config/index.js +9 -8
  65. package/dist/commands/config/index.js.map +1 -1
  66. package/dist/commands/config/path.js +8 -7
  67. package/dist/commands/config/path.js.map +1 -1
  68. package/dist/commands/config/show.js +9 -8
  69. package/dist/commands/diff.js +8 -7
  70. package/dist/commands/diff.js.map +1 -1
  71. package/dist/commands/doctor.js +13 -14
  72. package/dist/commands/doctor.js.map +1 -1
  73. package/dist/commands/edit.js +33 -35
  74. package/dist/commands/edit.js.map +1 -1
  75. package/dist/commands/eject.js +15 -13
  76. package/dist/commands/eject.js.map +1 -1
  77. package/dist/commands/import/skill.js +8 -7
  78. package/dist/commands/import/skill.js.map +1 -1
  79. package/dist/commands/info.js +12 -11
  80. package/dist/commands/info.js.map +1 -1
  81. package/dist/commands/init.js +28 -27
  82. package/dist/commands/list.js +8 -7
  83. package/dist/commands/list.js.map +1 -1
  84. package/dist/commands/new/agent.js +9 -8
  85. package/dist/commands/new/agent.js.map +1 -1
  86. package/dist/commands/new/marketplace.js +12 -15
  87. package/dist/commands/new/marketplace.js.map +1 -1
  88. package/dist/commands/new/skill.js +9 -8
  89. package/dist/commands/outdated.js +8 -7
  90. package/dist/commands/outdated.js.map +1 -1
  91. package/dist/commands/search.js +9 -10
  92. package/dist/commands/search.js.map +1 -1
  93. package/dist/commands/uninstall.js +8 -7
  94. package/dist/commands/uninstall.js.map +1 -1
  95. package/dist/commands/update.js +10 -10
  96. package/dist/commands/update.js.map +1 -1
  97. package/dist/commands/validate.js +16 -18
  98. package/dist/commands/validate.js.map +1 -1
  99. package/dist/components/wizard/category-grid.js +2 -2
  100. package/dist/components/wizard/category-grid.test.js +17 -66
  101. package/dist/components/wizard/category-grid.test.js.map +1 -1
  102. package/dist/components/wizard/domain-selection.js +10 -9
  103. package/dist/components/wizard/search-modal.test.js.map +1 -1
  104. package/dist/components/wizard/source-grid.js +4 -4
  105. package/dist/components/wizard/source-grid.test.js +22 -20
  106. package/dist/components/wizard/source-grid.test.js.map +1 -1
  107. package/dist/components/wizard/stack-selection.js +9 -8
  108. package/dist/components/wizard/step-agents.js +10 -9
  109. package/dist/components/wizard/step-agents.test.js +15 -14
  110. package/dist/components/wizard/step-agents.test.js.map +1 -1
  111. package/dist/components/wizard/step-build.js +11 -10
  112. package/dist/components/wizard/step-build.test.js +17 -16
  113. package/dist/components/wizard/step-build.test.js.map +1 -1
  114. package/dist/components/wizard/step-confirm.js +5 -4
  115. package/dist/components/wizard/step-confirm.test.js +11 -10
  116. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  117. package/dist/components/wizard/step-settings.js +9 -8
  118. package/dist/components/wizard/step-settings.test.js +12 -11
  119. package/dist/components/wizard/step-settings.test.js.map +1 -1
  120. package/dist/components/wizard/step-sources.js +14 -13
  121. package/dist/components/wizard/step-sources.test.js +19 -18
  122. package/dist/components/wizard/step-sources.test.js.map +1 -1
  123. package/dist/components/wizard/step-stack.js +12 -11
  124. package/dist/components/wizard/step-stack.test.js +16 -15
  125. package/dist/components/wizard/step-stack.test.js.map +1 -1
  126. package/dist/components/wizard/wizard-layout.js +9 -8
  127. package/dist/components/wizard/wizard.js +26 -25
  128. package/dist/config-exports.js +1 -1
  129. package/dist/hooks/init.js +28 -27
  130. package/dist/hooks/init.js.map +1 -1
  131. package/dist/{loader-CMSC3RAO.js → loader-XQ3WBTVP.js} +4 -3
  132. package/dist/source-loader-F4PGP6LH.js +18 -0
  133. package/dist/source-manager-QCIO4XZK.js +20 -0
  134. package/dist/stores/wizard-store.js +8 -7
  135. package/dist/stores/wizard-store.test.js +34 -33
  136. package/dist/stores/wizard-store.test.js.map +1 -1
  137. package/package.json +2 -1
  138. package/src/schemas/custom-metadata.schema.json +81 -0
  139. package/src/schemas/metadata.schema.json +127 -41
  140. package/src/schemas/stacks.schema.json +3 -45
  141. package/dist/chunk-2VT2DMD7.js.map +0 -1
  142. package/dist/chunk-6YMW4HMX.js.map +0 -1
  143. package/dist/chunk-BKL3DF2Q.js +0 -45
  144. package/dist/chunk-BKL3DF2Q.js.map +0 -1
  145. package/dist/chunk-CADG5WWP.js.map +0 -1
  146. package/dist/chunk-CKPJTMNC.js.map +0 -1
  147. package/dist/chunk-DA3WIZ4C.js +0 -253
  148. package/dist/chunk-DA3WIZ4C.js.map +0 -1
  149. package/dist/chunk-DHBRWGRZ.js.map +0 -1
  150. package/dist/chunk-FCF4WQEI.js.map +0 -1
  151. package/dist/chunk-HWVRHPXR.js.map +0 -1
  152. package/dist/chunk-J2D6OBIX.js.map +0 -1
  153. package/dist/chunk-KANNRFY7.js.map +0 -1
  154. package/dist/chunk-KWB3B2HS.js.map +0 -1
  155. package/dist/chunk-L6MTIQ2U.js.map +0 -1
  156. package/dist/chunk-QOJAZI72.js.map +0 -1
  157. package/dist/chunk-R3AR4VLZ.js.map +0 -1
  158. package/dist/chunk-T4EXUIBY.js +0 -19
  159. package/dist/chunk-T4EXUIBY.js.map +0 -1
  160. package/dist/chunk-UDAHHJIM.js.map +0 -1
  161. package/dist/chunk-UQM5YPPJ.js.map +0 -1
  162. package/dist/chunk-X4RIMJNY.js.map +0 -1
  163. package/dist/chunk-XMZNHLV3.js.map +0 -1
  164. package/dist/chunk-XYRVAEI6.js.map +0 -1
  165. package/dist/chunk-ZYUASJUN.js.map +0 -1
  166. package/dist/source-loader-3MZ2MBOF.js +0 -17
  167. package/dist/source-manager-NEH6QXE5.js +0 -19
  168. package/dist/stores/matrix-store.js +0 -15
  169. package/dist/stores/matrix-store.js.map +0 -1
  170. package/dist/stores/matrix-store.test.js +0 -127
  171. package/dist/stores/matrix-store.test.js.map +0 -1
  172. /package/dist/{chunk-V5L532ZH.js.map → chunk-3K6FSET7.js.map} +0 -0
  173. /package/dist/{chunk-KSAGOKWT.js.map → chunk-G23HPF6K.js.map} +0 -0
  174. /package/dist/{chunk-XB3TYSPL.js.map → chunk-H4ETXZVL.js.map} +0 -0
  175. /package/dist/{chunk-AX6MMYAZ.js.map → chunk-KE2EAVFQ.js.map} +0 -0
  176. /package/dist/{chunk-52THXN5G.js.map → chunk-NUJHWYCR.js.map} +0 -0
  177. /package/dist/{chunk-6BXKF5GP.js.map → chunk-T7QY777F.js.map} +0 -0
  178. /package/dist/{chunk-VUUGWE6G.js.map → chunk-Y47CLMWE.js.map} +0 -0
  179. /package/dist/{loader-CMSC3RAO.js.map → loader-XQ3WBTVP.js.map} +0 -0
  180. /package/dist/{source-loader-3MZ2MBOF.js.map → source-loader-F4PGP6LH.js.map} +0 -0
  181. /package/dist/{source-manager-NEH6QXE5.js.map → source-manager-QCIO4XZK.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/lib/configuration/define-config.ts","../src/cli/lib/configuration/default-categories.ts","../src/cli/lib/configuration/default-rules.ts","../src/cli/lib/configuration/default-stacks.ts"],"sourcesContent":["import type { ProjectConfig } from \"../../types\";\n\n/**\n * Type-safe config helper for project configuration.\n * Uses const generics so literal types are preserved through the call.\n *\n * Config MUST be defined inline for full type inference --\n * extracting the object to a variable widens literal types.\n */\nexport function defineConfig<const T extends ProjectConfig>(config: T): T {\n return config;\n}\n","import type { CategoryMap } from \"../../types\";\n\n/**\n * Built-in category definitions, equivalent to config/skill-categories.ts.\n * Source repos may override or extend these via their own config files.\n */\nexport const defaultCategories: CategoryMap = {\n \"web-framework\": {\n id: \"web-framework\",\n displayName: \"Framework\",\n description: \"UI framework (React, Vue, Angular, SolidJS, Next.js, Remix, Nuxt)\",\n domain: \"web\",\n exclusive: true,\n required: true,\n order: 1,\n },\n \"web-styling\": {\n id: \"web-styling\",\n displayName: \"Styling\",\n description: \"CSS approach (SCSS Modules, Tailwind, CVA)\",\n domain: \"web\",\n exclusive: false,\n required: true,\n order: 3,\n },\n \"web-client-state\": {\n id: \"web-client-state\",\n displayName: \"Client State Management\",\n description: \"UI state, forms, local data (Zustand, Redux, MobX)\",\n domain: \"web\",\n exclusive: true,\n required: false,\n order: 4,\n },\n \"web-server-state\": {\n id: \"web-server-state\",\n displayName: \"Server State / Data Fetching\",\n description: \"API data caching (React Query, SWR)\",\n domain: \"web\",\n exclusive: true,\n required: false,\n order: 5,\n },\n \"web-forms\": {\n id: \"web-forms\",\n displayName: \"Forms & Validation\",\n description: \"Form handling and schema validation\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 6,\n },\n \"web-testing\": {\n id: \"web-testing\",\n displayName: \"Testing\",\n description: \"Unit, integration, and E2E testing\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 7,\n },\n \"web-ui-components\": {\n id: \"web-ui-components\",\n displayName: \"UI Component Library\",\n description: \"Pre-built component systems (Radix, shadcn)\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 8,\n },\n \"web-mocking\": {\n id: \"web-mocking\",\n displayName: \"API Mocking\",\n description: \"Mock Service Worker for development and testing\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 10,\n },\n \"web-error-handling\": {\n id: \"web-error-handling\",\n displayName: \"Error Handling\",\n description: \"Error boundaries, result types, and error patterns\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 11,\n },\n \"web-i18n\": {\n id: \"web-i18n\",\n displayName: \"Internationalization\",\n description: \"i18n libraries (next-intl, react-intl, vue-i18n)\",\n domain: \"web\",\n exclusive: true,\n required: false,\n order: 12,\n },\n \"web-file-upload\": {\n id: \"web-file-upload\",\n displayName: \"File Upload\",\n description: \"File upload patterns and handling\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 13,\n },\n \"web-files\": {\n id: \"web-files\",\n displayName: \"Files & Images\",\n description: \"Image handling and file processing\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 14,\n },\n \"web-utilities\": {\n id: \"web-utilities\",\n displayName: \"Utilities\",\n description: \"Utility libraries (date-fns, native JS patterns)\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 15,\n },\n \"web-realtime\": {\n id: \"web-realtime\",\n displayName: \"Realtime\",\n description: \"WebSockets, SSE, and real-time communication\",\n domain: \"web\",\n exclusive: true,\n required: false,\n order: 16,\n },\n \"web-animation\": {\n id: \"web-animation\",\n displayName: \"Animation\",\n description: \"Animation libraries and CSS animations\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 17,\n },\n \"web-pwa\": {\n id: \"web-pwa\",\n displayName: \"Progressive Web App\",\n description: \"Service workers, offline-first patterns, and PWA features\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 18,\n },\n \"web-accessibility\": {\n id: \"web-accessibility\",\n displayName: \"Accessibility\",\n description: \"WCAG compliance, ARIA, and keyboard navigation\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 19,\n },\n \"web-performance\": {\n id: \"web-performance\",\n displayName: \"Web Performance\",\n description: \"Bundle optimization, render performance, and code splitting\",\n domain: \"web\",\n exclusive: false,\n required: false,\n order: 20,\n },\n \"api-api\": {\n id: \"api-api\",\n displayName: \"API Framework\",\n description: \"Backend framework (Hono, Express, Fastify)\",\n domain: \"api\",\n exclusive: true,\n required: true,\n order: 1,\n },\n \"api-database\": {\n id: \"api-database\",\n displayName: \"Database ORM\",\n description: \"Database access layer (Drizzle, Prisma)\",\n domain: \"api\",\n exclusive: true,\n required: false,\n order: 2,\n },\n \"api-auth\": {\n id: \"api-auth\",\n displayName: \"Authentication\",\n description: \"Auth solution (Better Auth, Auth.js)\",\n domain: \"api\",\n exclusive: true,\n required: false,\n order: 3,\n },\n \"api-observability\": {\n id: \"api-observability\",\n displayName: \"Observability\",\n description: \"Logging, monitoring, error tracking\",\n domain: \"api\",\n exclusive: false,\n required: false,\n order: 4,\n },\n \"api-analytics\": {\n id: \"api-analytics\",\n displayName: \"Analytics\",\n description: \"Product analytics and tracking\",\n domain: \"api\",\n exclusive: false,\n required: false,\n order: 5,\n },\n \"api-email\": {\n id: \"api-email\",\n displayName: \"Email\",\n description: \"Transactional email (Resend, Sendgrid)\",\n domain: \"api\",\n exclusive: true,\n required: false,\n order: 6,\n },\n \"api-performance\": {\n id: \"api-performance\",\n displayName: \"Performance\",\n description: \"API performance patterns and optimization\",\n domain: \"api\",\n exclusive: false,\n required: false,\n order: 7,\n },\n \"mobile-framework\": {\n id: \"mobile-framework\",\n displayName: \"Mobile Framework\",\n description: \"Native mobile framework (React Native, Expo)\",\n domain: \"mobile\",\n exclusive: true,\n required: true,\n order: 1,\n },\n \"shared-monorepo\": {\n id: \"shared-monorepo\",\n displayName: \"Monorepo\",\n description: \"Monorepo tooling (Turborepo, Nx)\",\n domain: \"shared\",\n exclusive: true,\n required: false,\n order: 1,\n },\n \"shared-tooling\": {\n id: \"shared-tooling\",\n displayName: \"Build Tooling\",\n description: \"ESLint, Prettier, TypeScript, Vite\",\n domain: \"shared\",\n exclusive: false,\n required: false,\n order: 2,\n },\n \"shared-security\": {\n id: \"shared-security\",\n displayName: \"Security\",\n description: \"Authentication security patterns and best practices\",\n domain: \"shared\",\n exclusive: false,\n required: false,\n order: 3,\n },\n \"shared-methodology\": {\n id: \"shared-methodology\",\n displayName: \"Methodology\",\n description: \"Development methodology and engineering principles\",\n domain: \"shared\",\n exclusive: false,\n required: false,\n order: 4,\n },\n \"shared-research\": {\n id: \"shared-research\",\n displayName: \"Research\",\n description: \"Codebase investigation and research methodology\",\n domain: \"shared\",\n exclusive: false,\n required: false,\n order: 5,\n },\n \"shared-reviewing\": {\n id: \"shared-reviewing\",\n displayName: \"Code Review\",\n description: \"Code review patterns and guidance\",\n domain: \"shared\",\n exclusive: false,\n required: false,\n order: 6,\n },\n \"shared-ci-cd\": {\n id: \"shared-ci-cd\",\n displayName: \"CI/CD\",\n description: \"Continuous integration and deployment pipelines\",\n domain: \"shared\",\n exclusive: false,\n required: false,\n order: 7,\n },\n \"cli-framework\": {\n id: \"cli-framework\",\n displayName: \"CLI Framework\",\n description: \"CLI application framework (Commander, oclif)\",\n domain: \"cli\",\n exclusive: true,\n required: true,\n order: 1,\n },\n};\n","import type { SkillRulesConfig } from \"../../types\";\n\n/**\n * Built-in skill rules, equivalent to config/skill-rules.ts.\n * Source repos may override or extend these via their own config files.\n */\nexport const defaultRules: SkillRulesConfig = {\n version: \"1.0.0\",\n relationships: {\n conflicts: [\n {\n skills: [\n \"react\",\n \"vue-composition-api\",\n \"angular-standalone\",\n \"solidjs\",\n \"nextjs-app-router\",\n \"remix\",\n \"nuxt\",\n ],\n reason: \"Frameworks are mutually exclusive\",\n },\n {\n skills: [\"pinia\", \"zustand\", \"redux-toolkit\", \"mobx\"],\n reason: \"Pinia is Vue-only; zustand/redux-toolkit/mobx skills teach React patterns\",\n },\n {\n skills: [\"ngrx-signalstore\", \"zustand\", \"pinia\", \"redux-toolkit\", \"mobx\"],\n reason: \"NgRx SignalStore is Angular-only\",\n },\n {\n skills: [\"react-query\", \"swr\"],\n reason: \"Both solve server state caching\",\n },\n {\n skills: [\"graphql-apollo\", \"graphql-urql\"],\n reason: \"Both are GraphQL clients\",\n },\n {\n skills: [\"playwright-e2e\", \"cypress-e2e\"],\n reason: \"Both are E2E frameworks\",\n },\n {\n skills: [\"react-hook-form\", \"vee-validate\"],\n reason: \"react-hook-form is React-only, vee-validate is Vue-only\",\n },\n {\n skills: [\"react-testing-library\", \"vue-test-utils\"],\n reason: \"Framework-specific testing libraries\",\n },\n {\n skills: [\"hono\", \"express\", \"fastify\"],\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skills: [\"drizzle\", \"prisma\"],\n reason: \"Both are ORMs serving similar purposes\",\n },\n {\n skills: [\"cli-commander\", \"oclif-ink\"],\n reason: \"CLI frameworks are mutually exclusive\",\n },\n ],\n discourages: [\n {\n skills: [\"zustand\", \"redux-toolkit\", \"mobx\"],\n reason: \"Using multiple React state libraries adds complexity\",\n },\n {\n skills: [\"redux-toolkit\", \"zustand\"],\n reason: \"Redux Toolkit adds more boilerplate than Zustand\",\n },\n {\n skills: [\"swr\", \"react-query\"],\n reason: \"SWR is simpler but React Query has more features\",\n },\n {\n skills: [\"express\", \"hono\"],\n reason: \"Express is mature but Hono offers better performance and edge support\",\n },\n {\n skills: [\"express\", \"fastify\"],\n reason: \"Express is mature but Fastify offers better performance\",\n },\n {\n skills: [\"cypress-e2e\", \"playwright-e2e\"],\n reason:\n \"Cypress excels at interactive debugging; Playwright has better cross-browser support and CI performance\",\n },\n ],\n recommends: [\n { skill: \"zustand\", reason: \"Best-in-class React state management\" },\n { skill: \"react-query\", reason: \"Modern server state caching for React\" },\n { skill: \"vitest\", reason: \"Fast, modern test runner for all frameworks\" },\n { skill: \"react-hook-form\", reason: \"Best React form library\" },\n { skill: \"react-testing-library\", reason: \"Standard React component testing\" },\n { skill: \"shadcn-ui\", reason: \"Best-in-class React + Tailwind component library\" },\n { skill: \"zod-validation\", reason: \"Type-safe validation for forms and APIs\" },\n { skill: \"pinia\", reason: \"Vue community standard state management\" },\n { skill: \"vee-validate\", reason: \"Vue community standard form validation\" },\n { skill: \"vue-test-utils\", reason: \"Vue component testing library\" },\n { skill: \"ngrx-signalstore\", reason: \"Angular Signals-based state management\" },\n { skill: \"tailwind\", reason: \"Utility-first CSS framework\" },\n { skill: \"drizzle\", reason: \"Modern TypeScript-first ORM\" },\n { skill: \"better-auth-drizzle-hono\", reason: \"Full-featured auth solution\" },\n { skill: \"radix-ui\", reason: \"Accessible unstyled component primitives\" },\n { skill: \"cva\", reason: \"Type-safe variant management for Tailwind\" },\n { skill: \"msw\", reason: \"Network-level API mocking for tests\" },\n { skill: \"playwright-e2e\", reason: \"Cross-browser E2E testing\" },\n { skill: \"posthog-analytics\", reason: \"Product analytics and feature flags\" },\n { skill: \"prisma\", reason: \"Mature database ORM with great DX\" },\n ],\n requires: [\n {\n skill: \"zustand\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\", \"react-native\"],\n needsAny: true,\n reason: \"Our Zustand skill covers React/React Native patterns\",\n },\n {\n skill: \"redux-toolkit\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\", \"react-native\"],\n needsAny: true,\n reason: \"Our Redux Toolkit skill covers React/React Native patterns\",\n },\n {\n skill: \"mobx\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\"],\n needsAny: true,\n reason: \"Our MobX skill teaches React patterns\",\n },\n {\n skill: \"react-query\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\", \"react-native\"],\n needsAny: true,\n reason: \"TanStack Query's React adapter\",\n },\n {\n skill: \"swr\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\", \"react-native\"],\n needsAny: true,\n reason: \"SWR is a React Hooks library\",\n },\n {\n skill: \"react-hook-form\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\", \"react-native\"],\n needsAny: true,\n reason: \"React Hook Form is React only\",\n },\n {\n skill: \"react-testing-library\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\"],\n needsAny: true,\n reason: \"React Testing Library is React only\",\n },\n {\n skill: \"pinia\",\n needs: [\"vue-composition-api\", \"nuxt\"],\n needsAny: true,\n reason: \"Pinia is Vue only\",\n },\n {\n skill: \"vee-validate\",\n needs: [\"vue-composition-api\", \"nuxt\"],\n needsAny: true,\n reason: \"VeeValidate is Vue only\",\n },\n {\n skill: \"vue-test-utils\",\n needs: [\"vue-composition-api\", \"nuxt\"],\n needsAny: true,\n reason: \"Vue Test Utils is Vue only\",\n },\n {\n skill: \"ngrx-signalstore\",\n needs: [\"angular-standalone\"],\n reason: \"NgRx SignalStore is Angular only\",\n },\n {\n skill: \"better-auth-drizzle-hono\",\n needs: [\"drizzle\", \"prisma\"],\n needsAny: true,\n reason: \"Better Auth requires a database adapter\",\n },\n {\n skill: \"shadcn-ui\",\n needs: [\"react\", \"nextjs-app-router\", \"remix\"],\n needsAny: true,\n reason: \"shadcn/ui requires a React-based framework\",\n },\n {\n skill: \"shadcn-ui\",\n needs: [\"tailwind\"],\n reason: \"shadcn/ui requires Tailwind CSS\",\n },\n {\n skill: \"graphql-apollo\",\n needs: [\n \"react\",\n \"vue-composition-api\",\n \"angular-standalone\",\n \"nextjs-app-router\",\n \"remix\",\n \"nuxt\",\n ],\n needsAny: true,\n reason: \"Apollo Client requires a UI framework\",\n },\n {\n skill: \"graphql-urql\",\n needs: [\"react\", \"vue-composition-api\", \"solidjs\", \"nextjs-app-router\", \"remix\", \"nuxt\"],\n needsAny: true,\n reason: \"URQL supports React, Vue, and Solid\",\n },\n ],\n alternatives: [\n {\n purpose: \"Frontend Framework\",\n skills: [\n \"react\",\n \"vue-composition-api\",\n \"angular-standalone\",\n \"solidjs\",\n \"nextjs-app-router\",\n \"remix\",\n \"nuxt\",\n ],\n },\n {\n purpose: \"Styling\",\n skills: [\"scss-modules\", \"tailwind\", \"cva\"],\n },\n {\n purpose: \"Client State (React)\",\n skills: [\"zustand\", \"redux-toolkit\", \"mobx\", \"jotai\"],\n },\n { purpose: \"Client State (Vue)\", skills: [\"pinia\"] },\n { purpose: \"Client State (Angular)\", skills: [\"ngrx-signalstore\"] },\n {\n purpose: \"Server State / Data Fetching\",\n skills: [\"react-query\", \"swr\"],\n },\n {\n purpose: \"GraphQL Client\",\n skills: [\"graphql-apollo\", \"graphql-urql\"],\n },\n {\n purpose: \"API Framework\",\n skills: [\"hono\", \"express\", \"fastify\"],\n },\n { purpose: \"Database ORM\", skills: [\"drizzle\", \"prisma\"] },\n { purpose: \"Forms (React)\", skills: [\"react-hook-form\"] },\n { purpose: \"Forms (Vue)\", skills: [\"vee-validate\"] },\n { purpose: \"Validation\", skills: [\"zod-validation\"] },\n { purpose: \"Unit Testing\", skills: [\"vitest\"] },\n { purpose: \"Component Testing (React)\", skills: [\"react-testing-library\"] },\n { purpose: \"Component Testing (Vue)\", skills: [\"vue-test-utils\"] },\n {\n purpose: \"E2E Testing\",\n skills: [\"playwright-e2e\", \"cypress-e2e\"],\n },\n { purpose: \"API Mocking\", skills: [\"msw\"] },\n { purpose: \"UI Components (React + Tailwind)\", skills: [\"shadcn-ui\"] },\n { purpose: \"Mobile\", skills: [\"react-native\"] },\n {\n purpose: \"CLI Framework\",\n skills: [\"cli-commander\", \"oclif-ink\"],\n },\n ],\n },\n};\n","import type { SkillAssignment, Stack } from \"../../types\";\n\n/**\n * Built-in stack definitions, equivalent to config/stacks.ts.\n * Source repos may override or extend these via their own stacks files.\n *\n * All values are already in normalized form (SkillAssignment[] with { id, preloaded }).\n */\n\nconst SHARED_METHODOLOGY: SkillAssignment[] = [\n { id: \"meta-methodology-investigation-requirements\", preloaded: true },\n { id: \"meta-methodology-anti-over-engineering\", preloaded: true },\n { id: \"meta-methodology-success-criteria\", preloaded: true },\n { id: \"meta-methodology-write-verification\", preloaded: true },\n { id: \"meta-methodology-improvement-protocol\", preloaded: true },\n { id: \"meta-methodology-context-management\", preloaded: true },\n];\n\nexport const defaultStacks: Stack[] = [\n {\n id: \"nextjs-fullstack\",\n name: \"Next.js Fullstack\",\n description: \"React + Hono full-stack\",\n philosophy: \"Ship fast, iterate faster\",\n agents: {\n \"web-developer\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: true }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-developer\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: true }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: true }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"cli-developer\": {\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: true }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"cli-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-cli-reviewing\", preloaded: true }],\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-tester\": {\n \"web-testing\": [\n { id: \"web-testing-playwright-e2e\", preloaded: false },\n { id: \"web-testing-vitest\", preloaded: false },\n ],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pm\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-architecture\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-researcher\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-researcher\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"pattern-scout\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pattern-critique\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"agent-summoner\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"skill-summoner\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n documentor: {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: false }],\n \"web-styling\": [{ id: \"web-styling-scss-modules\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-zustand\", preloaded: false }],\n \"web-server-state\": [{ id: \"web-server-state-react-query\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"web-mocking\": [{ id: \"web-mocks-msw\", preloaded: false }],\n \"web-accessibility\": [{ id: \"web-accessibility-web-accessibility\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"api-analytics\": [{ id: \"api-analytics-posthog-analytics\", preloaded: false }],\n \"api-email\": [{ id: \"api-email-resend-react-email\", preloaded: false }],\n \"shared-ci-cd\": [{ id: \"api-ci-cd-github-actions\", preloaded: false }],\n \"cli-framework\": [{ id: \"cli-framework-cli-commander\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"cli-tester\": {},\n },\n },\n {\n id: \"angular-stack\",\n name: \"Modern Angular Stack\",\n description: \"Angular + Signals stack\",\n philosophy: \"Enterprise-grade and type-safe\",\n agents: {\n \"web-developer\": {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: true }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-developer\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: true }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: true }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pm\": {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-architecture\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-researcher\": {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-researcher\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"pattern-scout\": {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pattern-critique\": {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"agent-summoner\": {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"skill-summoner\": {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n documentor: {\n \"web-framework\": [{ id: \"web-framework-angular-standalone\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-ngrx-signalstore\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-tester\": {\n \"web-testing\": [\n { id: \"web-testing-playwright-e2e\", preloaded: false },\n { id: \"web-testing-vitest\", preloaded: false },\n ],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n },\n },\n {\n id: \"nuxt-stack\",\n name: \"Nuxt Full-Stack\",\n description: \"Vue + Nuxt full-stack\",\n philosophy: \"Progressive Vue with Nuxt power\",\n agents: {\n \"web-developer\": {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: true },\n { id: \"web-framework-vue-composition-api\", preloaded: true },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-developer\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: true }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: true }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pm\": {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-architecture\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-researcher\": {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-researcher\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"pattern-scout\": {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pattern-critique\": {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"agent-summoner\": {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"skill-summoner\": {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n documentor: {\n \"web-framework\": [\n { id: \"web-framework-nuxt\", preloaded: false },\n { id: \"web-framework-vue-composition-api\", preloaded: false },\n ],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-tester\": {\n \"web-testing\": [\n { id: \"web-testing-playwright-e2e\", preloaded: false },\n { id: \"web-testing-vitest\", preloaded: false },\n ],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n },\n },\n {\n id: \"remix-stack\",\n name: \"Remix Full-Stack\",\n description: \"Remix + form-centric DX\",\n philosophy: \"Web standards and excellent forms handling\",\n agents: {\n \"web-developer\": {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: true },\n { id: \"web-framework-react\", preloaded: true },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-developer\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: true }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: true }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pm\": {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-architecture\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-researcher\": {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-researcher\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"pattern-scout\": {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pattern-critique\": {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"agent-summoner\": {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"skill-summoner\": {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n documentor: {\n \"web-framework\": [\n { id: \"web-framework-remix\", preloaded: false },\n { id: \"web-framework-react\", preloaded: false },\n ],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-tester\": {\n \"web-testing\": [\n { id: \"web-testing-playwright-e2e\", preloaded: false },\n { id: \"web-testing-vitest\", preloaded: false },\n ],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n },\n },\n {\n id: \"vue-stack\",\n name: \"Modern Vue Stack\",\n description: \"Vue + Pinia + Tailwind\",\n philosophy: \"Progressive and approachable\",\n agents: {\n \"web-developer\": {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: true }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-developer\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: true }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: true }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pm\": {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-architecture\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-researcher\": {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-researcher\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"pattern-scout\": {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pattern-critique\": {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"agent-summoner\": {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"skill-summoner\": {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n documentor: {\n \"web-framework\": [{ id: \"web-framework-vue-composition-api\", preloaded: false }],\n \"web-client-state\": [{ id: \"web-state-pinia\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-tester\": {\n \"web-testing\": [\n { id: \"web-testing-playwright-e2e\", preloaded: false },\n { id: \"web-testing-vitest\", preloaded: false },\n ],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n },\n },\n {\n id: \"solidjs-stack\",\n name: \"SolidJS Stack\",\n description: \"SolidJS + Hono full-stack\",\n philosophy: \"Maximum performance with minimal overhead\",\n agents: {\n \"web-developer\": {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: true }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-developer\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: true }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: true }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-reviewer\": {\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pm\": {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-architecture\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-researcher\": {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"api-researcher\": {\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"pattern-scout\": {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-pattern-critique\": {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: true }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"agent-summoner\": {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"skill-summoner\": {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n documentor: {\n \"web-framework\": [{ id: \"web-framework-solidjs\", preloaded: false }],\n \"web-testing\": [{ id: \"web-testing-vitest\", preloaded: false }],\n \"api-api\": [{ id: \"api-framework-hono\", preloaded: false }],\n \"api-database\": [{ id: \"api-database-drizzle\", preloaded: false }],\n \"api-auth\": [{ id: \"api-auth-better-auth-drizzle-hono\", preloaded: false }],\n \"api-observability\": [{ id: \"api-observability-axiom-pino-sentry\", preloaded: false }],\n \"shared-reviewing\": [{ id: \"meta-reviewing-reviewing\", preloaded: false }],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n \"web-tester\": {\n \"web-testing\": [\n { id: \"web-testing-playwright-e2e\", preloaded: false },\n { id: \"web-testing-vitest\", preloaded: false },\n ],\n \"shared-methodology\": SHARED_METHODOLOGY,\n },\n },\n },\n];\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getDomainDisplayName
4
- } from "./chunk-ZYUASJUN.js";
4
+ } from "./chunk-BH4LN7XV.js";
5
5
  import {
6
6
  ViewTitle
7
7
  } from "./chunk-AQYAVLZK.js";
@@ -123,4 +123,4 @@ var StepConfirm = ({
123
123
  export {
124
124
  StepConfirm
125
125
  };
126
- //# sourceMappingURL=chunk-52THXN5G.js.map
126
+ //# sourceMappingURL=chunk-NUJHWYCR.js.map
@@ -2,18 +2,19 @@
2
2
  import {
3
3
  deriveInstallMode,
4
4
  resolveAlias
5
- } from "./chunk-CADG5WWP.js";
5
+ } from "./chunk-3VNQPCOE.js";
6
6
  import {
7
+ isCategory,
7
8
  typedEntries,
8
9
  typedKeys
9
- } from "./chunk-T4EXUIBY.js";
10
+ } from "./chunk-EMX7PA2I.js";
10
11
  import {
11
- findSkill,
12
- getMatrix
13
- } from "./chunk-BKL3DF2Q.js";
12
+ getSkillById,
13
+ matrix
14
+ } from "./chunk-E74Q7GUE.js";
14
15
  import {
15
16
  warn
16
- } from "./chunk-R3AR4VLZ.js";
17
+ } from "./chunk-WJL4KU5V.js";
17
18
  import {
18
19
  BUILT_IN_DOMAIN_ORDER,
19
20
  DEFAULT_PUBLIC_SOURCE_NAME
@@ -66,7 +67,7 @@ function getSourceSortTier(source) {
66
67
  return SOURCE_SORT_TIER_THIRD_PARTY;
67
68
  }
68
69
  function resolveSkillForPopulation(skillId) {
69
- const { skills, categories } = getMatrix();
70
+ const { skills, categories } = matrix;
70
71
  const skill = skills[skillId];
71
72
  if (!skill?.category) {
72
73
  warn(
@@ -74,6 +75,10 @@ function resolveSkillForPopulation(skillId) {
74
75
  );
75
76
  return null;
76
77
  }
78
+ if (!isCategory(skill.category)) {
79
+ warn(`Installed skill '${skillId}' has non-standard category '${skill.category}' \u2014 skipping`);
80
+ return null;
81
+ }
77
82
  const subcat = skill.category;
78
83
  const domain = categories[subcat]?.domain;
79
84
  if (!domain) {
@@ -124,7 +129,7 @@ var useWizardStore = create((set, get) => ({
124
129
  selectStack: (stackId) => set({ selectedStackId: stackId }),
125
130
  setStackAction: (action) => set({ stackAction: action }),
126
131
  populateFromStack: (stack) => set(() => {
127
- const { categories } = getMatrix();
132
+ const { categories } = matrix;
128
133
  const domainSelections = {};
129
134
  const domains = /* @__PURE__ */ new Set();
130
135
  const allSkillIds = /* @__PURE__ */ new Set();
@@ -462,8 +467,8 @@ var useWizardStore = create((set, get) => ({
462
467
  setAllSourcesPlugin: () => {
463
468
  set((state) => ({
464
469
  skillConfigs: state.skillConfigs.map((sc) => {
465
- const skill = findSkill(sc.id);
466
- if (skill?.availableSources) {
470
+ const skill = getSkillById(sc.id);
471
+ if (skill.availableSources) {
467
472
  const marketplaceSource = skill.availableSources.find((s) => s.type !== "local");
468
473
  if (marketplaceSource) {
469
474
  return { ...sc, source: marketplaceSource.name };
@@ -479,11 +484,11 @@ var useWizardStore = create((set, get) => ({
479
484
  const { skillConfigs, boundSkills } = state;
480
485
  return selectedTechnologies.map((tech) => {
481
486
  const skillId = resolveAlias(tech);
482
- const skill = findSkill(skillId);
487
+ const skill = getSkillById(skillId);
483
488
  const configEntry = skillConfigs.find((sc) => sc.id === skillId);
484
- const selectedSource = configEntry?.source || skill?.activeSource?.name || DEFAULT_PUBLIC_SOURCE_NAME;
485
- const slug = skill?.slug ?? "";
486
- const sortedSources = [...skill?.availableSources || []].sort(
489
+ const selectedSource = configEntry?.source || skill.activeSource?.name || DEFAULT_PUBLIC_SOURCE_NAME;
490
+ const slug = skill.slug;
491
+ const sortedSources = [...skill.availableSources || []].sort(
487
492
  (a, b) => getSourceSortTier(a) - getSourceSortTier(b)
488
493
  );
489
494
  const options = sortedSources.length > 0 ? sortedSources.map((source) => ({
@@ -513,4 +518,4 @@ var useWizardStore = create((set, get) => ({
513
518
  export {
514
519
  useWizardStore
515
520
  };
516
- //# sourceMappingURL=chunk-QOJAZI72.js.map
521
+ //# sourceMappingURL=chunk-OLWGGD4G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/stores/wizard-store.ts"],"sourcesContent":["import { unique } from \"remeda\";\nimport { create } from \"zustand\";\nimport { BUILT_IN_DOMAIN_ORDER, DEFAULT_PUBLIC_SOURCE_NAME } from \"../consts.js\";\nimport type { InstallMode } from \"../lib/installation/index.js\";\nimport { deriveInstallMode as sharedDeriveInstallMode } from \"../lib/installation/installation.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../types/config.js\";\nimport { resolveAlias } from \"../lib/matrix/index.js\";\nimport { matrix, getSkillById } from \"../lib/matrix/matrix-provider.js\";\nimport type {\n AgentName,\n BoundSkill,\n Domain,\n DomainSelections,\n ResolvedSkill,\n SkillAlias,\n SkillAssignment,\n SkillId,\n SkillSource,\n Category,\n CategoryDomainMap,\n} from \"../types/index.js\";\nimport type { SourceOption } from \"../components/wizard/source-grid.js\";\nimport { warn } from \"../utils/logger.js\";\nimport { typedEntries, typedKeys } from \"../utils/typed-object.js\";\nimport { isCategory } from \"../utils/type-guards.js\";\n\nconst BUILT_IN_DOMAINS: Domain[] = [\"web\", \"api\", \"cli\", \"mobile\", \"shared\"];\n\nfunction createDefaultSkillConfig(id: SkillId): SkillConfig {\n return { id, scope: \"global\", source: DEFAULT_PUBLIC_SOURCE_NAME };\n}\n\n/** Derive all unique domains from a categories map, preserving built-in order then appending custom. */\nfunction getAllDomainsFromCategories(categories: CategoryDomainMap): Domain[] {\n const allDomains = unique(\n Object.values(categories)\n .map((cat) => cat?.domain)\n .filter((d): d is Domain => d != null),\n );\n return [...BUILT_IN_DOMAINS, ...allDomains.filter((d) => !BUILT_IN_DOMAINS.includes(d))];\n}\n\n/** Sort domains into canonical order: custom domains first (alphabetically), then built-in domains per BUILT_IN_DOMAIN_ORDER. */\nfunction sortDomainsCanonically(domains: Domain[]): Domain[] {\n const builtInSet = new Set<Domain>(BUILT_IN_DOMAIN_ORDER);\n return [\n ...domains.filter((d) => !builtInSet.has(d)).sort(),\n ...BUILT_IN_DOMAIN_ORDER.filter((d) => domains.includes(d)),\n ];\n}\n\n/** Built-in agent names grouped by domain prefix. Custom domains return no preselected agents. */\nconst DOMAIN_AGENTS: Partial<Record<string, AgentName[]>> = {\n web: [\n \"web-developer\",\n \"web-reviewer\",\n \"web-researcher\",\n \"web-tester\",\n \"web-pm\",\n \"web-architecture\",\n ],\n api: [\"api-developer\", \"api-reviewer\", \"api-researcher\"],\n cli: [\"cli-developer\", \"cli-tester\", \"cli-reviewer\"],\n};\n\n/**\n * Fixed source sort tiers (lower = higher priority):\n * 1 = local/global (installed on disk -- type \"local\" or installed via plugin)\n * 2 = scoped marketplace (primary source from --source flag)\n * 3 = default public marketplace (Agents Inc)\n * 4 = third-party marketplaces (extra configured sources)\n */\nconst SOURCE_SORT_TIER_LOCAL = 1;\nconst SOURCE_SORT_TIER_SCOPED = 2;\nconst SOURCE_SORT_TIER_PUBLIC = 3;\nconst SOURCE_SORT_TIER_THIRD_PARTY = 4;\n\nfunction getSourceSortTier(source: SkillSource): number {\n if (source.type === \"local\") return SOURCE_SORT_TIER_LOCAL;\n if (source.primary) return SOURCE_SORT_TIER_SCOPED;\n if (source.type === \"public\") return SOURCE_SORT_TIER_PUBLIC;\n return SOURCE_SORT_TIER_THIRD_PARTY;\n}\n\nexport type SkillLookupEntry = Pick<ResolvedSkill, \"category\" | \"displayName\">;\n\nfunction resolveSkillForPopulation(\n skillId: SkillId,\n): { domain: Domain; subcat: Category; techId: SkillId } | null {\n const { skills, categories } = matrix;\n const skill = skills[skillId];\n if (!skill?.category) {\n warn(\n `Installed skill '${skillId}' is missing from the marketplace — it may have been removed or renamed`,\n );\n return null;\n }\n\n if (!isCategory(skill.category)) {\n warn(`Installed skill '${skillId}' has non-standard category '${skill.category}' — skipping`);\n return null;\n }\n\n const subcat = skill.category;\n const domain = categories[subcat]?.domain;\n if (!domain) {\n warn(`Installed skill '${skillId}' has unknown category '${skill.category}' — skipping`);\n return null;\n }\n\n return { domain, subcat, techId: skillId };\n}\n\nfunction buildBoundSkillOptions(\n boundSkills: BoundSkill[],\n alias: SkillAlias,\n selectedSource: string,\n): SourceOption[] {\n return boundSkills\n .filter((b) => b.boundTo === alias)\n .map((bound) => ({\n id: bound.sourceName,\n selected: selectedSource === bound.sourceName,\n installed: false,\n }));\n}\n\n/**\n * Wizard step identifiers for the multi-step init/edit flow.\n *\n * Progression: stack -> build -> sources -> agents -> confirm\n * The \"stack\" step shows all stacks + \"Start from scratch\" in a unified list.\n * Navigation is tracked via the `history` stack for goBack() support.\n */\nexport type WizardStep =\n | \"stack\" // Unified first step: select stack or \"Start from scratch\", then domain selection\n | \"build\" // CategoryGrid for technology selection\n | \"sources\" // Choose skill sources (recommended vs custom)\n | \"agents\" // Select which agents to compile\n | \"confirm\"; // Final confirmation\n\n/**\n * Wizard store state and actions.\n *\n * The store uses a composition pattern: small, focused actions that each mutate\n * one or two state fields. Wizard step components compose these actions to build\n * up the full selection state incrementally (domains -> categories -> skills -> sources).\n *\n * State flow: unified stack/scratch selection -> domain selection -> per-domain skill\n * selection (build step) -> source customization -> confirmation.\n */\nexport type WizardState = {\n step: WizardStep;\n\n approach: \"stack\" | \"scratch\" | null;\n selectedStackId: string | null;\n stackAction: \"defaults\" | \"customize\" | null;\n\n selectedDomains: Domain[];\n\n currentDomainIndex: number;\n domainSelections: DomainSelections;\n /** Snapshot of stack-provided domain selections for restoration on domain re-toggle */\n _stackDomainSelections: DomainSelections | null;\n\n showLabels: boolean;\n\n skillConfigs: SkillConfig[];\n focusedSkillId: SkillId | null;\n\n customizeSources: boolean;\n\n showSettings: boolean;\n showHelp: boolean;\n enabledSources: Record<string, boolean>;\n\n selectedAgents: AgentName[];\n agentConfigs: AgentScopeConfig[];\n focusedAgentId: AgentName | null;\n\n boundSkills: BoundSkill[];\n\n /** Skill IDs that cannot be toggled or removed (D9: existing global items in project context) */\n lockedSkillIds: SkillId[];\n /** Agent names that cannot be toggled or removed (D9: existing global agents in project context) */\n lockedAgentNames: AgentName[];\n\n history: WizardStep[];\n\n /**\n * Navigate to a wizard step, pushing the current step onto history.\n * @param step - Target step to navigate to\n *\n * Side effects: sets `step`, appends previous step to `history`\n */\n setStep: (step: WizardStep) => void;\n /**\n * Set the wizard approach (stack-based or build-from-scratch).\n * @param approach - \"stack\" to use a pre-built template, \"scratch\" to select skills manually, null to reset\n *\n * Side effects: sets `approach`\n */\n setApproach: (approach: \"stack\" | \"scratch\" | null) => void;\n /**\n * Select a stack by ID, or null to deselect.\n * @param stackId - Stack identifier from suggestedStacks, or null to clear\n *\n * Side effects: sets `selectedStackId`\n */\n selectStack: (stackId: string | null) => void;\n /**\n * Set how to apply the selected stack.\n * @param action - \"defaults\" to use stack as-is, \"customize\" to enter the build step\n *\n * Side effects: sets `stackAction`\n */\n setStackAction: (action: \"defaults\" | \"customize\") => void;\n /**\n * Pre-populate domainSelections from a stack's agent-to-skill mappings.\n *\n * Iterates all agents in the stack, resolving each category's skill assignments\n * to the appropriate domain. Enables all domains and deduplicates skill IDs.\n *\n * @param stack - Stack definition with agent-level skill assignments\n * @param stack.agents - Record of agent name to `{ category: SkillAssignment[] }` mappings\n * @param categories - Category definitions used to resolve category -> domain mapping\n *\n * Side effects: sets `domainSelections`, sets `selectedDomains` to ALL_DOMAINS\n */\n populateFromStack: (stack: {\n agents: Record<string, Partial<Record<Category, SkillAssignment[]>>>;\n }) => void;\n /**\n * Pre-populate domainSelections from a flat list of installed skill IDs.\n *\n * Used by `agentsinc edit` to restore wizard state from existing project config.\n * Looks up each skill's category and domain, warns for unresolvable skills.\n *\n * @param skillIds - Flat array of currently installed skill IDs\n * @param skills - Skill lookup providing category and displayName per skill ID\n * @param categories - Category definitions used to resolve category -> domain mapping\n *\n * Side effects: sets `domainSelections`, sets `selectedDomains` to domains found in the provided skill IDs\n */\n populateFromSkillIds: (skillIds: SkillId[], savedConfigs?: SkillConfig[]) => void;\n /**\n * Toggle a domain on or off in the selectedDomains list.\n * @param domain - Domain to toggle\n *\n * Side effects: adds or removes from `selectedDomains`\n */\n toggleDomain: (domain: Domain) => void;\n /**\n * Toggle a skill selection within a domain's category.\n *\n * When exclusive is true (radio behavior), selecting a new skill replaces any\n * existing selection in that category. When false (checkbox behavior),\n * the skill is added to or removed from the selection array.\n *\n * @param domain - Domain containing the category\n * @param category - Category within the domain\n * @param technology - Skill ID to toggle\n * @param exclusive - If true, only one skill can be selected per category (radio)\n *\n * Side effects: updates `domainSelections[domain][category]`\n */\n toggleTechnology: (\n domain: Domain,\n category: Category,\n technology: SkillId,\n exclusive: boolean,\n ) => void;\n /**\n * Advance to the next domain in the build step.\n * @returns true if advanced, false if already at the last domain\n *\n * Side effects: increments `currentDomainIndex`\n */\n nextDomain: () => boolean;\n /**\n * Go back to the previous domain in the build step.\n * @returns true if moved back, false if already at the first domain\n *\n * Side effects: decrements `currentDomainIndex`\n */\n prevDomain: () => boolean;\n /** Toggle compatibility label visibility on skill tags in the build step grid. */\n toggleShowLabels: () => void;\n /**\n * Derive the install mode from skillConfigs source values.\n * If all skills use \"local\" source, returns \"local\". If all use non-local, returns \"plugin\".\n * If mixed, returns \"mixed\". Returns \"local\" when no skills are configured.\n */\n deriveInstallMode: () => InstallMode;\n /**\n * Toggle the scope of a specific skill between \"project\" and \"global\".\n * @param skillId - Skill to toggle scope for\n *\n * Side effects: updates `skillConfigs` entry for the skill\n */\n toggleSkillScope: (skillId: SkillId) => void;\n /**\n * Update the source for a specific skill in skillConfigs.\n * @param skillId - Skill to update\n * @param source - Source identifier (e.g., \"local\", marketplace name)\n *\n * Side effects: updates `skillConfigs` entry for the skill\n */\n setSkillSource: (skillId: SkillId, source: string) => void;\n /**\n * Set the currently focused skill ID in the build step (for S hotkey).\n * @param id - Skill ID to focus, or null to clear\n *\n * Side effects: sets `focusedSkillId`\n */\n setFocusedSkillId: (id: SkillId | null) => void;\n /**\n * Set which source provides a specific skill.\n * @param skillId - Skill to configure the source for\n * @param sourceId - Source identifier (e.g., \"public\", \"local\", marketplace name)\n *\n * Side effects: updates `skillConfigs` entry for the skill. No-op with warning if either param is empty.\n */\n setSourceSelection: (skillId: SkillId, sourceId: string) => void;\n /**\n * Enable or disable source customization on the sources step.\n * @param customize - true to show per-skill source pickers\n *\n * Side effects: sets `customizeSources`\n */\n setCustomizeSources: (customize: boolean) => void;\n /** Toggle the settings overlay (source management). */\n toggleSettings: () => void;\n /** Toggle the help overlay (hotkey reference). */\n toggleHelp: () => void;\n /**\n * Replace the full set of enabled/disabled sources.\n * @param sources - Record of source name to enabled boolean. Empty-string keys are filtered out.\n *\n * Side effects: sets `enabledSources`\n */\n setEnabledSources: (sources: Record<string, boolean>) => void;\n /**\n * Add a bound skill from search to the wizard's bound skills list.\n * Duplicates (same id + sourceUrl) are silently skipped with a warning.\n *\n * @param skill - Bound skill to add (foreign skill tied to a category alias)\n *\n * Side effects: appends to `boundSkills`\n */\n bindSkill: (skill: BoundSkill) => void;\n /**\n * Navigate to the previous wizard step using the history stack.\n * Falls back to \"stack\" if history is empty.\n *\n * Side effects: pops from `history`, sets `step` to the popped value\n */\n goBack: () => void;\n /**\n * Toggle an agent on or off in the selectedAgents list.\n * @param agent - Agent name to toggle\n *\n * Side effects: adds or removes from `selectedAgents`, syncs `agentConfigs`\n */\n toggleAgent: (agent: AgentName) => void;\n /**\n * Toggle the scope of a specific agent between \"project\" and \"global\".\n * @param agentName - Agent to toggle scope for\n *\n * Side effects: updates `agentConfigs` entry for the agent\n */\n toggleAgentScope: (agentName: AgentName) => void;\n /**\n * Set the currently focused agent ID in the agents step (for S hotkey).\n * @param id - Agent name to focus, or null to clear\n *\n * Side effects: sets `focusedAgentId`\n */\n setFocusedAgentId: (id: AgentName | null) => void;\n /**\n * Preselect agents based on selected domains from the first wizard step.\n * Matches domains against DOMAIN_AGENTS mapping.\n * Optional agents (meta/pattern) are excluded.\n *\n * Side effects: replaces `selectedAgents` with computed preselection\n */\n preselectAgentsFromDomains: () => void;\n /** Reset all wizard state to initial values. */\n reset: () => void;\n\n /**\n * Collect all selected skill IDs across all domains and categories.\n * @returns Flat array of every selected SkillId (may contain duplicates if shared across domains)\n */\n getAllSelectedTechnologies: () => SkillId[];\n /**\n * Group selected skill IDs by domain.\n * @returns Partial record mapping each domain with selections to its skill ID array\n */\n getSelectedTechnologiesPerDomain: () => Partial<Record<Domain, SkillId[]>>;\n /**\n * Get the domain currently visible in the build step.\n * @returns The domain at currentDomainIndex, or null if no domains are selected\n */\n getCurrentDomain: () => Domain | null;\n /**\n * Count total selected technologies across all domains.\n * @returns Number of selected skill IDs\n */\n getTechnologyCount: () => number;\n /**\n * Compute which wizard steps are completed and which are skipped.\n * Used by WizardTabs to render step progress indicators.\n * @returns Object with completedSteps and skippedSteps string arrays\n */\n getStepProgress: () => { completedSteps: WizardStep[]; skippedSteps: WizardStep[] };\n /** @returns true if there is a next domain after the current one */\n canGoToNextDomain: () => boolean;\n /** @returns true if there is a previous domain before the current one */\n canGoToPreviousDomain: () => boolean;\n /** Set all selected skills to \"local\" source. */\n setAllSourcesLocal: () => void;\n /** Set all selected skills to their first non-local (marketplace) source. */\n setAllSourcesPlugin: () => void;\n\n /**\n * Build the source selection rows for the sources step UI.\n *\n * For each selected technology, resolves the canonical skill ID, looks up available\n * sources from the matrix, merges in any bound skills from search, and determines\n * which source is currently selected. Sources are sorted: local first, then public,\n * then private/other.\n *\n * @returns Array of row objects, one per selected technology, each containing:\n * - `skillId` - Canonical resolved skill ID\n * - `options` - Available sources with selection state and install status\n */\n buildSourceRows: () => {\n skillId: SkillId;\n options: SourceOption[];\n }[];\n};\n\n/** State-only fields from WizardState (excludes actions/getters). Used to type createInitialState(). */\ntype WizardStateData = Pick<\n WizardState,\n | \"step\"\n | \"approach\"\n | \"selectedStackId\"\n | \"stackAction\"\n | \"selectedDomains\"\n | \"currentDomainIndex\"\n | \"domainSelections\"\n | \"_stackDomainSelections\"\n | \"showLabels\"\n | \"skillConfigs\"\n | \"focusedSkillId\"\n | \"customizeSources\"\n | \"showSettings\"\n | \"showHelp\"\n | \"enabledSources\"\n | \"selectedAgents\"\n | \"agentConfigs\"\n | \"focusedAgentId\"\n | \"boundSkills\"\n | \"lockedSkillIds\"\n | \"lockedAgentNames\"\n | \"history\"\n>;\n\nconst createInitialState = (): WizardStateData => ({\n step: \"stack\",\n approach: null,\n selectedStackId: null,\n stackAction: null,\n selectedDomains: [],\n currentDomainIndex: 0,\n domainSelections: {},\n /** Snapshot of domainSelections from populateFromStack/populateFromSkillIds, used to restore on domain re-toggle */\n _stackDomainSelections: null,\n showLabels: false,\n skillConfigs: [],\n focusedSkillId: null,\n customizeSources: false,\n showSettings: false,\n showHelp: false,\n enabledSources: {},\n selectedAgents: [],\n agentConfigs: [],\n focusedAgentId: null,\n boundSkills: [],\n lockedSkillIds: [],\n lockedAgentNames: [],\n history: [],\n});\n\nexport const useWizardStore = create<WizardState>((set, get) => ({\n ...createInitialState(),\n\n setStep: (step) =>\n set((state) => ({\n step,\n history: [...state.history, state.step],\n })),\n\n setApproach: (approach) => set({ approach }),\n\n selectStack: (stackId) => set({ selectedStackId: stackId }),\n\n setStackAction: (action) => set({ stackAction: action }),\n\n populateFromStack: (stack) =>\n set(() => {\n const { categories } = matrix;\n const domainSelections: DomainSelections = {};\n const domains = new Set<Domain>();\n const allSkillIds = new Set<SkillId>();\n\n for (const agentConfig of Object.values(stack.agents)) {\n for (const [subcat, assignments] of typedEntries<Category, SkillAssignment[]>(\n agentConfig,\n )) {\n const category = categories[subcat];\n const domain = category?.domain;\n\n if (!domain || !assignments) {\n continue;\n }\n\n domains.add(domain);\n\n if (!domainSelections[domain]) {\n domainSelections[domain] = {};\n }\n\n if (!domainSelections[domain][subcat]) {\n domainSelections[domain][subcat] = [];\n }\n\n for (const assignment of assignments) {\n if (!domainSelections[domain][subcat].includes(assignment.id)) {\n domainSelections[domain][subcat].push(assignment.id);\n allSkillIds.add(assignment.id);\n }\n }\n }\n }\n\n const skillConfigs: SkillConfig[] = [...allSkillIds].map(createDefaultSkillConfig);\n\n return {\n domainSelections,\n _stackDomainSelections: structuredClone(domainSelections),\n selectedDomains: sortDomainsCanonically(getAllDomainsFromCategories(categories)),\n skillConfigs,\n };\n }),\n\n populateFromSkillIds: (skillIds, savedConfigs) =>\n set(() => {\n const domainSelections: DomainSelections = {};\n const resolvedSkillIds: SkillId[] = [];\n let skippedCount = 0;\n\n for (const skillId of skillIds) {\n const resolved = resolveSkillForPopulation(skillId);\n if (!resolved) {\n skippedCount++;\n continue;\n }\n\n const { domain, subcat, techId } = resolved;\n if (!domainSelections[domain]) domainSelections[domain] = {};\n if (!domainSelections[domain][subcat]) domainSelections[domain][subcat] = [];\n\n if (!domainSelections[domain][subcat].includes(techId)) {\n domainSelections[domain][subcat].push(techId);\n resolvedSkillIds.push(techId);\n }\n }\n\n if (skippedCount > 0) {\n warn(`${skippedCount} installed skill(s) could not be resolved and were skipped`);\n }\n\n const selectedDomains = sortDomainsCanonically(typedKeys<Domain>(domainSelections));\n\n const skillConfigs: SkillConfig[] = resolvedSkillIds.map((id) => {\n const saved = savedConfigs?.find((sc) => sc.id === id);\n return {\n id,\n scope: saved?.scope ?? \"global\",\n source: saved?.source ?? DEFAULT_PUBLIC_SOURCE_NAME,\n };\n });\n\n return {\n domainSelections,\n _stackDomainSelections: structuredClone(domainSelections),\n selectedDomains,\n skillConfigs,\n };\n }),\n\n toggleDomain: (domain) =>\n set((state) => {\n const isSelected = state.selectedDomains.includes(domain);\n if (isSelected) {\n const { [domain]: _removed, ...remainingSelections } = state.domainSelections;\n\n // Collect all skill IDs being removed from this domain\n const removedSkillIds = new Set<SkillId>();\n if (_removed) {\n for (const skills of Object.values(_removed)) {\n if (skills) {\n for (const id of skills) {\n removedSkillIds.add(id);\n }\n }\n }\n }\n\n return {\n selectedDomains: state.selectedDomains.filter((d) => d !== domain),\n domainSelections: remainingSelections,\n skillConfigs: state.skillConfigs.filter((sc) => !removedSkillIds.has(sc.id)),\n };\n }\n\n // Restore stack selections for this domain if a stack snapshot exists\n const stackSelections = state._stackDomainSelections?.[domain];\n if (stackSelections) {\n // Also restore skillConfigs for the restored skills\n const restoredSkillIds: SkillId[] = [];\n for (const skills of Object.values(stackSelections)) {\n if (skills) restoredSkillIds.push(...skills);\n }\n const existingIds = new Set(state.skillConfigs.map((sc) => sc.id));\n const newConfigs = restoredSkillIds\n .filter((id) => !existingIds.has(id))\n .map(createDefaultSkillConfig);\n\n return {\n selectedDomains: sortDomainsCanonically([...state.selectedDomains, domain]),\n domainSelections: {\n ...state.domainSelections,\n [domain]: structuredClone(stackSelections),\n },\n skillConfigs: [...state.skillConfigs, ...newConfigs],\n };\n }\n\n return {\n selectedDomains: sortDomainsCanonically([...state.selectedDomains, domain]),\n };\n }),\n\n toggleTechnology: (domain, category, technology, exclusive) =>\n set((state) => {\n // D9: locked skills cannot be toggled\n if (state.lockedSkillIds.includes(technology)) return state;\n\n const currentSelections = state.domainSelections[domain]?.[category] || [];\n const isSelected = currentSelections.includes(technology);\n\n let newSelections: SkillId[];\n if (exclusive) {\n newSelections = isSelected ? [] : [technology];\n } else {\n newSelections = isSelected\n ? currentSelections.filter((t) => t !== technology)\n : [...currentSelections, technology];\n }\n\n // Sync skillConfigs: add entries for newly selected, remove entries for deselected\n const removed = currentSelections.filter((id) => !newSelections.includes(id));\n const added = newSelections.filter((id) => !currentSelections.includes(id));\n\n let updatedConfigs = state.skillConfigs.filter((sc) => !removed.includes(sc.id));\n for (const id of added) {\n if (!updatedConfigs.some((sc) => sc.id === id)) {\n updatedConfigs = [...updatedConfigs, createDefaultSkillConfig(id)];\n }\n }\n\n return {\n skillConfigs: updatedConfigs,\n domainSelections: {\n ...state.domainSelections,\n [domain]: {\n ...state.domainSelections[domain],\n [category]: newSelections,\n },\n },\n };\n }),\n\n nextDomain: () => {\n const state = get();\n if (state.currentDomainIndex < state.selectedDomains.length - 1) {\n set({\n currentDomainIndex: state.currentDomainIndex + 1,\n });\n return true;\n }\n return false;\n },\n\n prevDomain: () => {\n const state = get();\n if (state.currentDomainIndex > 0) {\n set({\n currentDomainIndex: state.currentDomainIndex - 1,\n });\n return true;\n }\n return false;\n },\n\n toggleShowLabels: () => set((state) => ({ showLabels: !state.showLabels })),\n\n deriveInstallMode: (): InstallMode => {\n const { skillConfigs } = get();\n return sharedDeriveInstallMode(skillConfigs);\n },\n\n toggleSkillScope: (skillId) =>\n set((state) => {\n // D9: locked skills cannot have their scope toggled\n if (state.lockedSkillIds.includes(skillId)) return state;\n return {\n skillConfigs: state.skillConfigs.map((sc) =>\n sc.id === skillId ? { ...sc, scope: sc.scope === \"project\" ? \"global\" : \"project\" } : sc,\n ),\n };\n }),\n\n setSkillSource: (skillId, source) =>\n set((state) => ({\n skillConfigs: state.skillConfigs.map((sc) => (sc.id === skillId ? { ...sc, source } : sc)),\n })),\n\n setFocusedSkillId: (id) => set({ focusedSkillId: id }),\n\n setSourceSelection: (skillId, sourceId) =>\n set((state) => {\n if (!skillId) {\n warn(\"Ignoring setSourceSelection call with empty skillId\");\n return state;\n }\n if (!sourceId) {\n warn(`Ignoring setSourceSelection call with empty sourceId for skill '${skillId}'`);\n return state;\n }\n return {\n skillConfigs: state.skillConfigs.map((sc) =>\n sc.id === skillId ? { ...sc, source: sourceId } : sc,\n ),\n };\n }),\n\n setCustomizeSources: (customize) => set({ customizeSources: customize }),\n\n toggleSettings: () => set((state) => ({ showSettings: !state.showSettings })),\n\n toggleHelp: () => set((state) => ({ showHelp: !state.showHelp })),\n\n setEnabledSources: (sources) => {\n const invalidKeys = Object.keys(sources).filter((key) => !key.trim());\n if (invalidKeys.length > 0) {\n warn(\"Ignoring setEnabledSources call with empty source name(s)\");\n }\n const validSources = Object.fromEntries(Object.entries(sources).filter(([key]) => key.trim()));\n return set({ enabledSources: validSources });\n },\n\n bindSkill: (skill) =>\n set((state) => {\n const exists = state.boundSkills.some(\n (b) => b.id === skill.id && b.sourceUrl === skill.sourceUrl,\n );\n if (exists) {\n warn(`Skill '${skill.id}' from '${skill.sourceUrl}' is already bound — skipping duplicate`);\n return state;\n }\n return { boundSkills: [...state.boundSkills, skill] };\n }),\n\n goBack: () =>\n set((state) => {\n const history = [...state.history];\n const previousStep = history.pop();\n return {\n step: previousStep || \"stack\",\n history,\n };\n }),\n\n toggleAgent: (agent) =>\n set((state) => {\n // D9: locked agents cannot be toggled\n if (state.lockedAgentNames.includes(agent)) return state;\n\n const isSelected = state.selectedAgents.includes(agent);\n if (isSelected) {\n return {\n selectedAgents: state.selectedAgents.filter((a) => a !== agent),\n agentConfigs: state.agentConfigs.filter((ac) => ac.name !== agent),\n };\n }\n return {\n selectedAgents: [...state.selectedAgents, agent],\n agentConfigs: [...state.agentConfigs, { name: agent, scope: \"global\" as const }],\n };\n }),\n\n toggleAgentScope: (agentName) =>\n set((state) => {\n // D9: locked agents cannot have their scope toggled\n if (state.lockedAgentNames.includes(agentName)) return state;\n return {\n agentConfigs: state.agentConfigs.map((ac) =>\n ac.name === agentName\n ? { ...ac, scope: ac.scope === \"project\" ? (\"global\" as const) : (\"project\" as const) }\n : ac,\n ),\n };\n }),\n\n setFocusedAgentId: (id) => set({ focusedAgentId: id }),\n\n preselectAgentsFromDomains: () =>\n set(() => {\n const agents: AgentName[] = [];\n for (const domain of get().selectedDomains) {\n const domainAgents = DOMAIN_AGENTS[domain];\n if (domainAgents) {\n agents.push(...domainAgents);\n }\n }\n const sorted = agents.sort();\n return {\n selectedAgents: sorted,\n agentConfigs: sorted.map((name) => ({ name, scope: \"global\" as const })),\n };\n }),\n\n reset: () => set(createInitialState()),\n\n getAllSelectedTechnologies: () => {\n const state = get();\n const technologies: SkillId[] = [];\n for (const domain of typedKeys<Domain>(state.domainSelections)) {\n const domainSel = state.domainSelections[domain];\n if (!domainSel) continue;\n for (const category of typedKeys<Category>(domainSel)) {\n const techs = domainSel[category];\n if (techs) technologies.push(...techs);\n }\n }\n return technologies;\n },\n\n getSelectedTechnologiesPerDomain: () => {\n const state = get();\n const result: Partial<Record<Domain, SkillId[]>> = {};\n for (const domain of typedKeys<Domain>(state.domainSelections)) {\n const domainSel = state.domainSelections[domain];\n if (!domainSel) continue;\n const techs: SkillId[] = [];\n for (const category of typedKeys<Category>(domainSel)) {\n const subTechs = domainSel[category];\n if (subTechs) techs.push(...subTechs);\n }\n if (techs.length > 0) {\n result[domain] = techs;\n }\n }\n return result;\n },\n\n getCurrentDomain: () => {\n const state = get();\n return state.selectedDomains[state.currentDomainIndex] || null;\n },\n\n getTechnologyCount: () => {\n return get().getAllSelectedTechnologies().length;\n },\n\n getStepProgress: () => {\n const state = get();\n const completed: WizardStep[] = [];\n const skipped: WizardStep[] = [];\n\n if (state.step !== \"stack\") {\n completed.push(\"stack\");\n }\n\n if (state.approach === \"stack\" && state.selectedStackId && state.stackAction === \"defaults\") {\n skipped.push(\"build\");\n skipped.push(\"sources\");\n skipped.push(\"agents\");\n } else if (state.step === \"confirm\") {\n completed.push(\"build\");\n completed.push(\"sources\");\n completed.push(\"agents\");\n } else if (state.step === \"agents\") {\n completed.push(\"build\");\n completed.push(\"sources\");\n } else if (state.step === \"sources\") {\n completed.push(\"build\");\n }\n\n return { completedSteps: completed, skippedSteps: skipped };\n },\n\n canGoToNextDomain: () => {\n const state = get();\n return state.currentDomainIndex < state.selectedDomains.length - 1;\n },\n\n canGoToPreviousDomain: () => {\n const state = get();\n return state.currentDomainIndex > 0;\n },\n\n setAllSourcesLocal: () => {\n set((state) => ({\n skillConfigs: state.skillConfigs.map((sc) => ({ ...sc, source: \"local\" })),\n }));\n },\n\n setAllSourcesPlugin: () => {\n set((state) => ({\n skillConfigs: state.skillConfigs.map((sc) => {\n const skill = getSkillById(sc.id);\n if (skill.availableSources) {\n const marketplaceSource = skill.availableSources.find((s) => s.type !== \"local\");\n if (marketplaceSource) {\n return { ...sc, source: marketplaceSource.name };\n }\n }\n return sc;\n }),\n }));\n },\n\n buildSourceRows: () => {\n const state = get();\n const selectedTechnologies = get().getAllSelectedTechnologies();\n const { skillConfigs, boundSkills } = state;\n\n return selectedTechnologies.map((tech) => {\n const skillId = resolveAlias(tech);\n const skill = getSkillById(skillId);\n const configEntry = skillConfigs.find((sc) => sc.id === skillId);\n const selectedSource =\n configEntry?.source || skill.activeSource?.name || DEFAULT_PUBLIC_SOURCE_NAME;\n const slug = skill.slug;\n\n const sortedSources = [...(skill.availableSources || [])].sort(\n (a, b) => getSourceSortTier(a) - getSourceSortTier(b),\n );\n\n const options =\n sortedSources.length > 0\n ? sortedSources.map((source) => ({\n id: source.name,\n selected: selectedSource === source.name,\n installed: source.installed,\n }))\n : [\n {\n id: DEFAULT_PUBLIC_SOURCE_NAME,\n selected: selectedSource === DEFAULT_PUBLIC_SOURCE_NAME,\n installed: false,\n },\n ];\n\n if (!options.some((o) => o.id === \"local\")) {\n options.unshift({\n id: \"local\",\n selected: selectedSource === \"local\",\n installed: false,\n });\n }\n\n options.push(...buildBoundSkillOptions(boundSkills, slug, selectedSource));\n\n return { skillId, options };\n });\n },\n}));\n"],"mappings":"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","names":[]}
@@ -17,15 +17,15 @@ import {
17
17
  resolveAgents,
18
18
  writeContentHash,
19
19
  writePluginManifest
20
- } from "./chunk-CADG5WWP.js";
20
+ } from "./chunk-3VNQPCOE.js";
21
21
  import {
22
22
  loadAllAgents,
23
23
  loadProjectAgents
24
- } from "./chunk-L6MTIQ2U.js";
24
+ } from "./chunk-ZBLSWJFM.js";
25
25
  import {
26
26
  typedEntries,
27
27
  typedKeys
28
- } from "./chunk-T4EXUIBY.js";
28
+ } from "./chunk-EMX7PA2I.js";
29
29
  import {
30
30
  agentFrontmatterValidationSchema,
31
31
  copy,
@@ -39,7 +39,7 @@ import {
39
39
  verbose,
40
40
  warn,
41
41
  writeFile
42
- } from "./chunk-R3AR4VLZ.js";
42
+ } from "./chunk-WJL4KU5V.js";
43
43
  import {
44
44
  CLAUDE_DIR,
45
45
  DIRS,
@@ -319,4 +319,4 @@ export {
319
319
  compileAllAgentPlugins,
320
320
  printAgentCompilationSummary
321
321
  };
322
- //# sourceMappingURL=chunk-UQM5YPPJ.js.map
322
+ //# sourceMappingURL=chunk-PNZCVOCE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/lib/agents/agent-fetcher.ts","../src/cli/lib/agents/agent-recompiler.ts","../src/cli/lib/agents/agent-plugin-compiler.ts","../src/cli/lib/agents/index.ts"],"sourcesContent":["import path from \"path\";\nimport { directoryExists } from \"../../utils/fs\";\nimport { verbose } from \"../../utils/logger\";\nimport { PROJECT_ROOT, DIRS, CLAUDE_DIR } from \"../../consts\";\nimport { fetchFromSource, type FetchOptions } from \"../loading\";\nimport { loadProjectSourceConfig } from \"../configuration\";\nimport type { AgentSourcePaths } from \"../../types\";\n\nexport type AgentDefinitionOptions = FetchOptions & {\n projectDir?: string;\n};\n\nexport async function getAgentDefinitions(\n remoteSource?: string,\n options: AgentDefinitionOptions = {},\n): Promise<AgentSourcePaths> {\n if (remoteSource) {\n return fetchAgentDefinitionsFromRemote(remoteSource, options);\n }\n return getLocalAgentDefinitions(options);\n}\n\nexport async function getLocalAgentDefinitions(\n options: AgentDefinitionOptions = {},\n): Promise<AgentSourcePaths> {\n const agentsDir = path.join(PROJECT_ROOT, DIRS.agents);\n let templatesDir = path.join(PROJECT_ROOT, DIRS.templates);\n\n if (!(await directoryExists(agentsDir))) {\n throw new Error(\n `Agent partials not found at '${agentsDir}'. Ensure the CLI is properly installed.`,\n );\n }\n\n if (options.projectDir) {\n const localTemplatesDir = path.join(options.projectDir, CLAUDE_DIR, \"templates\");\n if (await directoryExists(localTemplatesDir)) {\n verbose(`Using local templates from: ${localTemplatesDir}`);\n templatesDir = localTemplatesDir;\n }\n }\n\n if (!(await directoryExists(templatesDir))) {\n verbose(`Templates directory not found: ${templatesDir}`);\n }\n\n verbose(`Agent partials loaded from CLI: ${agentsDir}`);\n verbose(`Templates directory: ${templatesDir}`);\n\n return {\n agentsDir,\n templatesDir,\n sourcePath: PROJECT_ROOT,\n };\n}\n\nexport async function fetchAgentDefinitionsFromRemote(\n source: string,\n options: FetchOptions & { agentsDir?: string } = {},\n): Promise<AgentSourcePaths> {\n verbose(`Fetching agent partials from remote: ${source}`);\n\n const result = await fetchFromSource(source, {\n forceRefresh: options.forceRefresh,\n subdir: \"\",\n });\n\n let agentsDirRelPath = options.agentsDir;\n if (!agentsDirRelPath) {\n const sourceProjectConfig = await loadProjectSourceConfig(result.path);\n agentsDirRelPath = sourceProjectConfig?.agentsDir ?? DIRS.agents;\n if (sourceProjectConfig?.agentsDir) {\n verbose(`Using agentsDir from source config: ${sourceProjectConfig.agentsDir}`);\n }\n }\n\n const agentsDir = path.join(result.path, agentsDirRelPath);\n const templatesDir = path.join(agentsDir, \"_templates\");\n\n if (!(await directoryExists(agentsDir))) {\n throw new Error(`Agent partials not found at '${agentsDir}'`);\n }\n\n if (!(await directoryExists(templatesDir))) {\n verbose(`Templates directory not found: ${templatesDir}`);\n }\n\n verbose(`Agent partials fetched from: ${result.path}`);\n\n return {\n agentsDir,\n templatesDir,\n sourcePath: result.path,\n };\n}\n","import type { Liquid } from \"liquidjs\";\nimport path from \"path\";\n\nimport { getErrorMessage } from \"../../utils/errors\";\nimport type {\n AgentConfig,\n AgentDefinition,\n AgentName,\n CompileAgentConfig,\n CompileConfig,\n ProjectConfig,\n SkillDefinitionMap,\n} from \"../../types\";\nimport { type InstallMode, deriveInstallMode } from \"../installation/installation\";\nimport { glob, writeFile, ensureDir } from \"../../utils/fs\";\nimport { verbose } from \"../../utils/logger\";\nimport { typedEntries, typedKeys } from \"../../utils/typed-object\";\nimport { createLiquidEngine } from \"../compiler\";\nimport { loadProjectConfig } from \"../configuration\";\nimport { loadAllAgents, loadProjectAgents } from \"../loading\";\nimport { getPluginAgentsDir } from \"../plugins\";\nimport { discoverAllPluginSkills } from \"../plugins/plugin-discovery\";\nimport { resolveAgents, buildSkillRefsFromConfig } from \"../resolver\";\nimport { compileAgentForPlugin } from \"../stacks\";\n\nexport type RecompileAgentsOptions = {\n pluginDir: string;\n sourcePath: string;\n agents?: AgentName[];\n skills?: SkillDefinitionMap;\n projectDir?: string;\n outputDir?: string;\n installMode?: InstallMode;\n};\n\nexport type RecompileAgentsResult = {\n compiled: AgentName[];\n failed: AgentName[];\n warnings: string[];\n};\n\nasync function getExistingAgentNames(pluginDir: string): Promise<AgentName[]> {\n const agentsDir = getPluginAgentsDir(pluginDir);\n const files = await glob(\"*.md\", agentsDir);\n // Boundary cast: directory names from filesystem are agent names by convention\n return files.map((f) => path.basename(f, \".md\") as AgentName);\n}\n\ntype ResolveAgentNamesParams = {\n specifiedAgents?: AgentName[];\n projectConfig: ProjectConfig | null;\n allAgents: Record<AgentName, AgentDefinition>;\n outputDir?: string;\n pluginDir: string;\n};\n\nasync function resolveAgentNames(params: ResolveAgentNamesParams): Promise<AgentName[]> {\n const { specifiedAgents, projectConfig, allAgents, outputDir, pluginDir } = params;\n\n if (specifiedAgents) {\n return specifiedAgents;\n }\n\n if (projectConfig?.agents?.length) {\n const agentNames = projectConfig.agents.map((a) => a.name);\n verbose(`Using agents from config: ${agentNames.join(\", \")}`);\n return agentNames;\n }\n\n if (outputDir) {\n const names = typedKeys<AgentName>(allAgents);\n verbose(`Using all available agents from source: ${names.join(\", \")}`);\n return names;\n }\n\n return getExistingAgentNames(pluginDir);\n}\n\ntype BuildCompileConfigParams = {\n agentNames: AgentName[];\n allAgents: Record<AgentName, AgentDefinition>;\n projectConfig: ProjectConfig | null;\n pluginDir: string;\n};\n\ntype BuildCompileConfigResult = {\n compileConfig: CompileConfig;\n warnings: string[];\n};\n\nfunction buildCompileConfig(params: BuildCompileConfigParams): BuildCompileConfigResult {\n const { agentNames, allAgents, projectConfig, pluginDir } = params;\n const warnings: string[] = [];\n\n // Store initialization: accumulator populated below for each agent in agentNames\n const compileAgents: Record<string, CompileAgentConfig> = {};\n for (const agentName of agentNames) {\n if (allAgents[agentName]) {\n const agentStack = projectConfig?.stack?.[agentName];\n compileAgents[agentName] = agentStack ? { skills: buildSkillRefsFromConfig(agentStack) } : {};\n } else {\n warnings.push(`Agent \"${agentName}\" not found in source definitions`);\n }\n }\n\n const compileConfig: CompileConfig = {\n name: projectConfig?.name || path.basename(pluginDir),\n description: projectConfig?.description || \"Recompiled plugin\",\n agents: compileAgents,\n };\n\n return { compileConfig, warnings };\n}\n\ntype CompileAndWriteParams = {\n resolvedAgents: Record<AgentName, AgentConfig>;\n agentsDir: string;\n sourcePath: string;\n engine: Liquid;\n installMode?: InstallMode;\n};\n\nasync function compileAndWriteAgents(\n params: CompileAndWriteParams,\n result: RecompileAgentsResult,\n): Promise<void> {\n const { resolvedAgents, agentsDir, sourcePath, engine, installMode } = params;\n\n for (const [agentName, agent] of typedEntries<AgentName, AgentConfig>(resolvedAgents)) {\n try {\n const output = await compileAgentForPlugin(agentName, agent, sourcePath, engine, installMode);\n await writeFile(path.join(agentsDir, `${agentName}.md`), output);\n result.compiled.push(agentName);\n verbose(` Recompiled: ${agentName}`);\n } catch (error) {\n result.failed.push(agentName);\n result.warnings.push(`Failed to compile ${agentName}: ${getErrorMessage(error)}`);\n }\n }\n}\n\nexport async function recompileAgents(\n options: RecompileAgentsOptions,\n): Promise<RecompileAgentsResult> {\n const { pluginDir, sourcePath, skills: providedSkills, projectDir, outputDir } = options;\n\n const result: RecompileAgentsResult = {\n compiled: [],\n failed: [],\n warnings: [],\n };\n\n const configDir = projectDir ?? pluginDir;\n const loadedConfig = await loadProjectConfig(configDir);\n const projectConfig = loadedConfig?.config ?? null;\n\n const builtinAgents = await loadAllAgents(sourcePath);\n const projectAgents = projectDir ? await loadProjectAgents(projectDir) : {};\n\n // Priority: project agents > built-in agents\n const allAgents: Record<AgentName, AgentDefinition> = {\n ...builtinAgents,\n ...projectAgents,\n };\n\n const agentNames = await resolveAgentNames({\n specifiedAgents: options.agents,\n projectConfig,\n allAgents,\n outputDir,\n pluginDir,\n });\n\n if (agentNames.length === 0) {\n result.warnings.push(\"No agents found to recompile\");\n return result;\n }\n\n verbose(`Recompiling ${agentNames.length} agents in ${outputDir ?? pluginDir}`);\n\n // When skills are not provided, discover from all plugin directories.\n let pluginSkills: SkillDefinitionMap;\n if (providedSkills) {\n pluginSkills = providedSkills;\n } else {\n pluginSkills = await discoverAllPluginSkills(projectDir ?? pluginDir);\n }\n\n const { compileConfig, warnings } = buildCompileConfig({\n agentNames,\n allAgents,\n projectConfig,\n pluginDir,\n });\n result.warnings.push(...warnings);\n\n const engine = await createLiquidEngine(projectDir);\n const resolvedAgents = await resolveAgents(allAgents, pluginSkills, compileConfig, sourcePath);\n\n const agentsDir = outputDir ?? getPluginAgentsDir(pluginDir);\n await ensureDir(agentsDir);\n\n await compileAndWriteAgents(\n {\n resolvedAgents,\n agentsDir,\n sourcePath,\n engine,\n installMode: options.installMode ?? deriveInstallMode(projectConfig?.skills ?? []),\n },\n result,\n );\n\n return result;\n}\n","import path from \"path\";\nimport { getErrorMessage } from \"../../utils/errors\";\nimport { readFile, ensureDir, glob, copy } from \"../../utils/fs\";\nimport { log, verbose, warn } from \"../../utils/logger\";\nimport {\n generateAgentPluginManifest,\n writePluginManifest,\n getPluginManifestPath,\n} from \"../plugins\";\nimport { computeStringHash, determinePluginVersion, writeContentHash } from \"../versioning\";\nimport { extractFrontmatter } from \"../../utils/frontmatter\";\nimport type { AgentFrontmatter, PluginManifest } from \"../../types\";\nimport { agentFrontmatterValidationSchema, formatZodErrors } from \"../schemas\";\n\nexport type AgentPluginOptions = {\n agentPath: string;\n outputDir: string;\n};\n\nexport type CompiledAgentPlugin = {\n pluginPath: string;\n manifest: PluginManifest;\n agentName: string;\n};\n\nfunction parseAgentFrontmatter(\n content: string,\n filePath: string,\n): Pick<AgentFrontmatter, \"name\" | \"description\"> | null {\n const raw = extractFrontmatter(content);\n if (!raw) {\n return null;\n }\n\n const result = agentFrontmatterValidationSchema.safeParse(raw);\n if (!result.success) {\n warn(`Invalid agent frontmatter in ${filePath}: ${formatZodErrors(result.error.issues)}`);\n return null;\n }\n\n return { name: result.data.name, description: result.data.description };\n}\n\nexport async function compileAgentPlugin(\n options: AgentPluginOptions,\n): Promise<CompiledAgentPlugin> {\n const { agentPath, outputDir } = options;\n const fileName = path.basename(agentPath);\n\n const content = await readFile(agentPath);\n const frontmatter = parseAgentFrontmatter(content, agentPath);\n\n if (!frontmatter) {\n throw new Error(\n `Agent '${fileName}' has invalid or missing YAML frontmatter. ` +\n `Required fields: 'name' and 'description'. File: ${agentPath}`,\n );\n }\n\n const agentName = frontmatter.name;\n\n verbose(`Compiling agent plugin: ${agentName} from ${agentPath}`);\n\n const pluginDir = path.join(outputDir, `agent-${agentName}`);\n const agentsDir = path.join(pluginDir, \"agents\");\n\n await ensureDir(pluginDir);\n await ensureDir(agentsDir);\n\n const newHash = computeStringHash(content);\n const { version, contentHash } = await determinePluginVersion(\n newHash,\n pluginDir,\n getPluginManifestPath,\n );\n\n const manifest = generateAgentPluginManifest({\n agentName,\n description: frontmatter.description,\n version,\n });\n\n await writePluginManifest(pluginDir, manifest);\n\n await writeContentHash(pluginDir, contentHash, getPluginManifestPath);\n\n verbose(` Wrote plugin.json for ${agentName} (v${version})`);\n\n await copy(agentPath, path.join(agentsDir, `${agentName}.md`));\n verbose(` Copied agent ${fileName} -> agents/${agentName}.md`);\n\n return {\n pluginPath: pluginDir,\n manifest,\n agentName,\n };\n}\n\nexport async function compileAllAgentPlugins(\n agentsDir: string,\n outputDir: string,\n): Promise<CompiledAgentPlugin[]> {\n const results: CompiledAgentPlugin[] = [];\n\n const agentMdFiles = await glob(\"*.md\", agentsDir);\n\n for (const agentFile of agentMdFiles) {\n const agentPath = path.join(agentsDir, agentFile);\n\n try {\n const result = await compileAgentPlugin({\n agentPath,\n outputDir,\n });\n results.push(result);\n log(` [OK] agent-${result.agentName}`);\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n warn(`Failed to compile agent from '${agentFile}': ${errorMessage}`);\n }\n }\n\n return results;\n}\n\nexport function printAgentCompilationSummary(results: CompiledAgentPlugin[]): void {\n log(`\\nCompiled ${results.length} agent plugins:`);\n for (const result of results) {\n log(` - agent-${result.agentName} (v${result.manifest.version})`);\n }\n}\n","export {\n type AgentDefinitionOptions,\n getAgentDefinitions,\n getLocalAgentDefinitions,\n fetchAgentDefinitionsFromRemote,\n} from \"./agent-fetcher\";\n\nexport {\n type RecompileAgentsOptions,\n type RecompileAgentsResult,\n recompileAgents,\n} from \"./agent-recompiler\";\n\nexport {\n type AgentPluginOptions,\n type CompiledAgentPlugin,\n compileAgentPlugin,\n compileAllAgentPlugins,\n printAgentCompilationSummary,\n} from \"./agent-plugin-compiler\";\n"],"mappings":"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","names":["path","path","path","path"]}