agents-inc 0.164.0 → 0.166.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 (191) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +8 -9
  3. package/dist/{chunk-X4SSJZLY.js → chunk-25MPBIK3.js} +12 -261
  4. package/dist/chunk-25MPBIK3.js.map +1 -0
  5. package/dist/{chunk-LT5GXEB2.js → chunk-2VUYFTUB.js} +8 -7
  6. package/dist/chunk-2VUYFTUB.js.map +1 -0
  7. package/dist/chunk-4AAOOAIN.js +49 -0
  8. package/dist/chunk-4AAOOAIN.js.map +1 -0
  9. package/dist/{chunk-ARYNOWKF.js → chunk-4NDBUJHK.js} +8 -8
  10. package/dist/{chunk-S63LXWMC.js → chunk-6L75SQZU.js} +2 -2
  11. package/dist/{chunk-7REKOTKG.js → chunk-6LF4CQBY.js} +3 -3
  12. package/dist/{chunk-K5ITEA3I.js → chunk-7JNJ52CD.js} +34 -17
  13. package/dist/chunk-7JNJ52CD.js.map +1 -0
  14. package/dist/{chunk-XPDVAJDH.js → chunk-A4KDXNOT.js} +3519 -1568
  15. package/dist/chunk-A4KDXNOT.js.map +1 -0
  16. package/dist/{chunk-XHPWTL4I.js → chunk-DAIEQJIF.js} +3 -3
  17. package/dist/{chunk-UITEKY2R.js → chunk-ENGYJCTF.js} +28 -4
  18. package/dist/chunk-ENGYJCTF.js.map +1 -0
  19. package/dist/{chunk-G2JJ5BO5.js → chunk-G4JK7WVO.js} +336 -140
  20. package/dist/chunk-G4JK7WVO.js.map +1 -0
  21. package/dist/{chunk-X37UYIE3.js → chunk-G6UREQ4V.js} +436 -739
  22. package/dist/chunk-G6UREQ4V.js.map +1 -0
  23. package/dist/chunk-GE3WKJ6Q.js +375 -0
  24. package/dist/chunk-GE3WKJ6Q.js.map +1 -0
  25. package/dist/{chunk-RGYDFBCT.js → chunk-HHIYT3PI.js} +5 -5
  26. package/dist/{chunk-2CQNPLVF.js → chunk-HWEKHVLE.js} +63 -42
  27. package/dist/chunk-HWEKHVLE.js.map +1 -0
  28. package/dist/{chunk-XVAQG2CV.js → chunk-JOEA52NR.js} +10 -8
  29. package/dist/chunk-JOEA52NR.js.map +1 -0
  30. package/dist/{chunk-3WVH2CTK.js → chunk-JQRJQ4SS.js} +15 -8
  31. package/dist/chunk-JQRJQ4SS.js.map +1 -0
  32. package/dist/{chunk-DSL66I4N.js → chunk-LFWLEDUG.js} +6 -6
  33. package/dist/{chunk-B3Y3QMWI.js → chunk-MAWNVT2C.js} +4 -4
  34. package/dist/{chunk-Q4IRRVXK.js → chunk-MPTNC32T.js} +3 -3
  35. package/dist/chunk-NBXXFIIW.js +73 -0
  36. package/dist/chunk-NBXXFIIW.js.map +1 -0
  37. package/dist/{chunk-B6FSLXYN.js → chunk-PMJWD27C.js} +3 -3
  38. package/dist/{chunk-XATLUKXK.js → chunk-PNB3524H.js} +6 -6
  39. package/dist/chunk-PXWG7KFO.js +39 -0
  40. package/dist/chunk-PXWG7KFO.js.map +1 -0
  41. package/dist/{chunk-4VL3CEOS.js → chunk-QHDPLLK6.js} +3 -3
  42. package/dist/{chunk-AOTCIUGX.js → chunk-RAHSOJQ2.js} +2 -2
  43. package/dist/{chunk-PHCPUQVR.js → chunk-RZDXDMT6.js} +2 -2
  44. package/dist/{chunk-6MV4JOCL.js → chunk-SAYZWCH6.js} +2 -2
  45. package/dist/{chunk-URXIQE7I.js → chunk-SCOQ34YM.js} +2 -2
  46. package/dist/{chunk-NQXO4LR3.js → chunk-SXVHSOTH.js} +16 -11
  47. package/dist/chunk-SXVHSOTH.js.map +1 -0
  48. package/dist/{chunk-QZX7SYKU.js → chunk-T6UWJAB3.js} +2 -2
  49. package/dist/{chunk-ZVXGW2IC.js → chunk-TODCQFRB.js} +4 -6
  50. package/dist/chunk-TODCQFRB.js.map +1 -0
  51. package/dist/{chunk-YRS3QZP2.js → chunk-TTY6DPJN.js} +3 -3
  52. package/dist/{chunk-QGUP3QJF.js → chunk-TZ2YJJKK.js} +22 -18
  53. package/dist/{chunk-QGUP3QJF.js.map → chunk-TZ2YJJKK.js.map} +1 -1
  54. package/dist/chunk-V3I7VQ7N.js +356 -0
  55. package/dist/chunk-V3I7VQ7N.js.map +1 -0
  56. package/dist/{chunk-AVK2HEKB.js → chunk-V5WXIM2F.js} +2 -6
  57. package/dist/{chunk-AVK2HEKB.js.map → chunk-V5WXIM2F.js.map} +1 -1
  58. package/dist/{chunk-NKGYKOB7.js → chunk-VAPTVR3J.js} +7 -8
  59. package/dist/chunk-VAPTVR3J.js.map +1 -0
  60. package/dist/chunk-VRXX4D6K.js +31 -0
  61. package/dist/chunk-VRXX4D6K.js.map +1 -0
  62. package/dist/{chunk-ABAZMMG4.js → chunk-WVUDLKIO.js} +2 -2
  63. package/dist/{chunk-ECURHW3T.js → chunk-WWIFNPJG.js} +13 -12
  64. package/dist/chunk-WWIFNPJG.js.map +1 -0
  65. package/dist/{chunk-J27W6TXS.js → chunk-XQHZPINL.js} +8 -4
  66. package/dist/chunk-XQHZPINL.js.map +1 -0
  67. package/dist/{chunk-V5GLL2JB.js → chunk-XZEVWPX6.js} +7 -7
  68. package/dist/chunk-Y3VIRVVE.js +932 -0
  69. package/dist/chunk-Y3VIRVVE.js.map +1 -0
  70. package/dist/{chunk-NTF4UXGK.js → chunk-Y47EV74W.js} +73 -30
  71. package/dist/chunk-Y47EV74W.js.map +1 -0
  72. package/dist/chunk-ZR4YPKXQ.js +159 -0
  73. package/dist/chunk-ZR4YPKXQ.js.map +1 -0
  74. package/dist/chunk-ZXKBERQU.js +250 -0
  75. package/dist/chunk-ZXKBERQU.js.map +1 -0
  76. package/dist/commands/build/marketplace.js +17 -17
  77. package/dist/commands/build/marketplace.js.map +1 -1
  78. package/dist/commands/build/plugins.js +11 -9
  79. package/dist/commands/build/plugins.js.map +1 -1
  80. package/dist/commands/compile.js +105 -27
  81. package/dist/commands/compile.js.map +1 -1
  82. package/dist/commands/doctor.js +309 -171
  83. package/dist/commands/doctor.js.map +1 -1
  84. package/dist/commands/edit.js +503 -314
  85. package/dist/commands/edit.js.map +1 -1
  86. package/dist/commands/eject.js +40 -23
  87. package/dist/commands/eject.js.map +1 -1
  88. package/dist/commands/init.js +44 -40
  89. package/dist/commands/list.js +44 -10
  90. package/dist/commands/list.js.map +1 -1
  91. package/dist/commands/new/marketplace.js +13 -10
  92. package/dist/commands/new/marketplace.js.map +1 -1
  93. package/dist/commands/search.js +12 -10
  94. package/dist/commands/search.js.map +1 -1
  95. package/dist/commands/share.js +102 -15
  96. package/dist/commands/share.js.map +1 -1
  97. package/dist/commands/uninstall.js +231 -103
  98. package/dist/commands/uninstall.js.map +1 -1
  99. package/dist/commands/update.js +49 -20
  100. package/dist/commands/update.js.map +1 -1
  101. package/dist/components/common/prompt-confirm.js +1 -1
  102. package/dist/components/common/removal-plan-confirm.js +2 -2
  103. package/dist/components/common/select-list.js +3 -3
  104. package/dist/components/common/spinner.js +6 -3
  105. package/dist/components/wizard/category-grid.js +5 -5
  106. package/dist/components/wizard/checkbox-grid.js +4 -4
  107. package/dist/components/wizard/domain-selection.js +9 -9
  108. package/dist/components/wizard/run-wizard-session.js +29 -29
  109. package/dist/components/wizard/scroll-affordance.js +2 -2
  110. package/dist/components/wizard/skill-agent-summary.js +5 -5
  111. package/dist/components/wizard/source-grid.js +6 -6
  112. package/dist/components/wizard/stack-selection.js +8 -8
  113. package/dist/components/wizard/step-agents.js +8 -8
  114. package/dist/components/wizard/step-build.js +8 -8
  115. package/dist/components/wizard/step-confirm.js +9 -9
  116. package/dist/components/wizard/step-sources.js +9 -9
  117. package/dist/components/wizard/step-stack.js +9 -9
  118. package/dist/components/wizard/summary-panel.js +8 -8
  119. package/dist/components/wizard/toast.js +2 -2
  120. package/dist/components/wizard/wizard-layout.js +12 -12
  121. package/dist/components/wizard/wizard-tabs.js +2 -2
  122. package/dist/components/wizard/wizard.js +27 -27
  123. package/dist/hooks/init.js +69 -43
  124. package/dist/hooks/init.js.map +1 -1
  125. package/dist/load-agent-defs-3C27ENC7.js +14 -0
  126. package/dist/recompile-project-agents-DGNBCU3N.js +18 -0
  127. package/dist/{source-loader-GRBVNRAW.js → source-loader-7KZ3MD5O.js} +6 -4
  128. package/dist/src/agents/_templates/agent-body.liquid +55 -0
  129. package/dist/src/agents/_templates/agent.liquid +1 -55
  130. package/dist/src/agents/meta/agent-summoner/output.md +1 -1
  131. package/dist/src/agents/meta/agent-summoner/playbook.md +15 -7
  132. package/dist/stores/wizard-store.js +4 -4
  133. package/package.json +10 -9
  134. package/src/agents/_templates/agent-body.liquid +55 -0
  135. package/src/agents/_templates/agent.liquid +1 -55
  136. package/src/agents/meta/agent-summoner/output.md +1 -1
  137. package/src/agents/meta/agent-summoner/playbook.md +15 -7
  138. package/src/schemas/project-config.schema.json +1 -1
  139. package/src/schemas/project-source-config.schema.json +1 -1
  140. package/dist/chunk-2CQNPLVF.js.map +0 -1
  141. package/dist/chunk-3WVH2CTK.js.map +0 -1
  142. package/dist/chunk-7ANJQLPJ.js +0 -35
  143. package/dist/chunk-7ANJQLPJ.js.map +0 -1
  144. package/dist/chunk-ECURHW3T.js.map +0 -1
  145. package/dist/chunk-FLW25ORT.js +0 -130
  146. package/dist/chunk-FLW25ORT.js.map +0 -1
  147. package/dist/chunk-G2JJ5BO5.js.map +0 -1
  148. package/dist/chunk-J27W6TXS.js.map +0 -1
  149. package/dist/chunk-JCPANDNR.js +0 -35
  150. package/dist/chunk-JCPANDNR.js.map +0 -1
  151. package/dist/chunk-JIERYE6B.js +0 -480
  152. package/dist/chunk-JIERYE6B.js.map +0 -1
  153. package/dist/chunk-JU4ZGJ7A.js +0 -668
  154. package/dist/chunk-JU4ZGJ7A.js.map +0 -1
  155. package/dist/chunk-K5ITEA3I.js.map +0 -1
  156. package/dist/chunk-LT5GXEB2.js.map +0 -1
  157. package/dist/chunk-NKGYKOB7.js.map +0 -1
  158. package/dist/chunk-NQXO4LR3.js.map +0 -1
  159. package/dist/chunk-NTF4UXGK.js.map +0 -1
  160. package/dist/chunk-UITEKY2R.js.map +0 -1
  161. package/dist/chunk-X37UYIE3.js.map +0 -1
  162. package/dist/chunk-X4SSJZLY.js.map +0 -1
  163. package/dist/chunk-XPDVAJDH.js.map +0 -1
  164. package/dist/chunk-XVAQG2CV.js.map +0 -1
  165. package/dist/chunk-ZBPEFQ4G.js +0 -12
  166. package/dist/chunk-ZBPEFQ4G.js.map +0 -1
  167. package/dist/chunk-ZVXGW2IC.js.map +0 -1
  168. package/dist/load-agent-defs-7IM3GBEQ.js +0 -13
  169. package/dist/recompile-project-agents-VR4NLGOU.js +0 -17
  170. /package/dist/{chunk-ARYNOWKF.js.map → chunk-4NDBUJHK.js.map} +0 -0
  171. /package/dist/{chunk-S63LXWMC.js.map → chunk-6L75SQZU.js.map} +0 -0
  172. /package/dist/{chunk-7REKOTKG.js.map → chunk-6LF4CQBY.js.map} +0 -0
  173. /package/dist/{chunk-XHPWTL4I.js.map → chunk-DAIEQJIF.js.map} +0 -0
  174. /package/dist/{chunk-RGYDFBCT.js.map → chunk-HHIYT3PI.js.map} +0 -0
  175. /package/dist/{chunk-DSL66I4N.js.map → chunk-LFWLEDUG.js.map} +0 -0
  176. /package/dist/{chunk-B3Y3QMWI.js.map → chunk-MAWNVT2C.js.map} +0 -0
  177. /package/dist/{chunk-Q4IRRVXK.js.map → chunk-MPTNC32T.js.map} +0 -0
  178. /package/dist/{chunk-B6FSLXYN.js.map → chunk-PMJWD27C.js.map} +0 -0
  179. /package/dist/{chunk-XATLUKXK.js.map → chunk-PNB3524H.js.map} +0 -0
  180. /package/dist/{chunk-4VL3CEOS.js.map → chunk-QHDPLLK6.js.map} +0 -0
  181. /package/dist/{chunk-AOTCIUGX.js.map → chunk-RAHSOJQ2.js.map} +0 -0
  182. /package/dist/{chunk-PHCPUQVR.js.map → chunk-RZDXDMT6.js.map} +0 -0
  183. /package/dist/{chunk-6MV4JOCL.js.map → chunk-SAYZWCH6.js.map} +0 -0
  184. /package/dist/{chunk-URXIQE7I.js.map → chunk-SCOQ34YM.js.map} +0 -0
  185. /package/dist/{chunk-QZX7SYKU.js.map → chunk-T6UWJAB3.js.map} +0 -0
  186. /package/dist/{chunk-YRS3QZP2.js.map → chunk-TTY6DPJN.js.map} +0 -0
  187. /package/dist/{chunk-ABAZMMG4.js.map → chunk-WVUDLKIO.js.map} +0 -0
  188. /package/dist/{chunk-V5GLL2JB.js.map → chunk-XZEVWPX6.js.map} +0 -0
  189. /package/dist/{load-agent-defs-7IM3GBEQ.js.map → load-agent-defs-3C27ENC7.js.map} +0 -0
  190. /package/dist/{recompile-project-agents-VR4NLGOU.js.map → recompile-project-agents-DGNBCU3N.js.map} +0 -0
  191. /package/dist/{source-loader-GRBVNRAW.js.map → source-loader-7KZ3MD5O.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../matrix/src/vendor/generated/source-types.ts","../../matrix/src/read-model/domains.ts","../../matrix/src/read-model/collections.ts","../../matrix/src/vendor/generated/matrix.ts","../../matrix/src/built-in-matrix.ts","../../matrix/src/read-model/source.ts","../../matrix/src/read-model/catalog.ts","../../matrix/src/generated/agents.ts","../../matrix/src/built-in-agents.ts","../../matrix/src/vendor/matrix.ts","../../matrix/src/read-model/preload-defaults.ts","../../matrix/src/read-model/sub-agents.ts","../../matrix/src/read-model/assignment-defaults.ts","../../matrix/src/read-model/stacks.ts","../../matrix/src/read-model/selection-defaults.ts","../../matrix/src/read-model/selection-semantics.ts","../../matrix/src/contract/selection-scenarios.ts","../../matrix/src/seed.ts","../../matrix/src/matrix-schema.ts","../../matrix/src/skill-index.ts","../../compile/src/domain-order.ts","../../compile/src/paths.ts","../../compile/src/scope-predicates.ts","../../compile/src/catalog.ts","../../compile/src/catalog-seat.ts","../../compile/src/diagnostics.ts","../../compile/src/string.ts","../../compile/src/selection.ts","../src/cli/consts.ts"],"sourcesContent":["// AUTO-GENERATED from skills source and agent metadata — do not edit manually\n// Run: bun run generate:types\n\n// ── Skill Map (slug → ID) ─────────────────────────────────────\n\nexport const SKILL_MAP = {\n \"ai-planning\": \"meta-planning-ai-planning\",\n \"ai-reviewing\": \"meta-reviewing-ai-reviewing\",\n \"angular-standalone\": \"web-framework-angular-standalone\",\n \"ant-design\": \"web-ui-ant-design\",\n \"anthropic-sdk\": \"ai-provider-anthropic-sdk\",\n \"api-performance\": \"api-performance-api-performance\",\n \"api-planning\": \"meta-planning-api-planning\",\n \"api-reviewing\": \"meta-reviewing-api-reviewing\",\n \"apollo-server\": \"api-graphql-apollo-server\",\n \"app-links\": \"mobile-deep-linking-app-links\",\n appwrite: \"api-baas-appwrite\",\n astro: \"web-meta-framework-astro\",\n \"auth-security\": \"shared-security-auth-security\",\n \"aws-sdk\": \"infra-platform-aws-sdk\",\n \"axiom-pino-sentry\": \"api-observability-axiom-pino-sentry\",\n \"base-ui\": \"web-ui-base-ui\",\n \"better-auth-drizzle-hono\": \"api-auth-better-auth-drizzle-hono\",\n biome: \"shared-tooling-biome\",\n \"ble-nfc\": \"mobile-hardware-ble-nfc\",\n bullmq: \"api-queue-bullmq\",\n \"chakra-ui\": \"web-ui-chakra-ui\",\n changesets: \"shared-tooling-changesets\",\n chroma: \"api-vector-db-chroma\",\n clack: \"cli-prompts-clack\",\n \"claude-vision\": \"ai-provider-claude-vision\",\n clerk: \"api-auth-clerk\",\n \"cli-commander\": \"cli-framework-cli-commander\",\n \"cli-planning\": \"meta-planning-cli-planning\",\n \"cli-reviewing\": \"meta-reviewing-cli-reviewing\",\n \"cloudflare-workers\": \"infra-platform-cloudflare-workers\",\n cockroachdb: \"api-database-cockroachdb\",\n \"cohere-sdk\": \"ai-provider-cohere-sdk\",\n \"component-library\": \"web-tooling-component-library\",\n \"composable-components\": \"meta-design-composable-components\",\n \"css-animations\": \"web-animation-css-animations\",\n cva: \"web-styling-cva\",\n \"cypress-e2e\": \"web-testing-cypress-e2e\",\n d3: \"web-dataviz-d3\",\n \"date-fns\": \"web-utilities-date-fns\",\n \"design-tokens\": \"web-styling-design-tokens\",\n detox: \"mobile-testing-detox\",\n \"dnd-kit\": \"web-dnd-dnd-kit\",\n docker: \"infra-ci-cd-docker\",\n docusaurus: \"web-meta-framework-docusaurus\",\n drizzle: \"api-database-drizzle\",\n eas: \"mobile-deployment-eas\",\n edgedb: \"api-database-edgedb\",\n elasticsearch: \"api-search-elasticsearch\",\n electron: \"desktop-framework-electron\",\n \"electron-forge\": \"desktop-packaging-electron-forge\",\n \"electron-ipc\": \"desktop-ipc-electron\",\n \"electron-multiwindow\": \"desktop-multiwindow-electron\",\n \"electron-security\": \"desktop-security-electron\",\n \"electron-storage\": \"desktop-storage-electron\",\n \"electron-testing\": \"desktop-testing-electron\",\n \"electron-ui\": \"desktop-ui-electron\",\n \"electron-updater\": \"desktop-updates-electron-updater\",\n elevenlabs: \"ai-provider-elevenlabs\",\n elysia: \"api-framework-elysia\",\n \"error-boundaries\": \"web-error-handling-error-boundaries\",\n \"eslint-prettier\": \"shared-tooling-eslint-prettier\",\n expo: \"mobile-framework-expo\",\n \"expo-router\": \"mobile-navigation-expo-router\",\n express: \"api-framework-express\",\n \"expressive-typescript\": \"meta-design-expressive-typescript\",\n fastify: \"api-framework-fastify\",\n \"file-upload-patterns\": \"web-files-file-upload-patterns\",\n firebase: \"api-baas-firebase\",\n \"framer-motion\": \"web-animation-framer-motion\",\n \"gesture-handler\": \"mobile-animation-gesture-handler\",\n \"git-hooks\": \"shared-tooling-git-hooks\",\n \"github-actions\": \"infra-ci-cd-github-actions\",\n \"google-gemini-sdk\": \"ai-provider-google-gemini-sdk\",\n \"graphql-apollo\": \"web-data-fetching-graphql-apollo\",\n \"graphql-urql\": \"web-data-fetching-graphql-urql\",\n \"headless-ui\": \"web-ui-headless-ui\",\n hono: \"api-framework-hono\",\n \"huggingface-inference\": \"ai-infrastructure-huggingface-inference\",\n \"image-handling\": \"web-files-image-handling\",\n \"infra-reviewing\": \"meta-reviewing-infra-reviewing\",\n jotai: \"web-state-jotai\",\n knex: \"api-database-knex\",\n kubernetes: \"infra-containers-kubernetes\",\n langchain: \"ai-orchestration-langchain\",\n langfuse: \"ai-observability-langfuse\",\n leaflet: \"web-maps-leaflet\",\n lexical: \"web-editor-lexical\",\n litellm: \"ai-infrastructure-litellm\",\n llamaindex: \"ai-orchestration-llamaindex\",\n maestro: \"mobile-testing-maestro\",\n mantine: \"web-ui-mantine\",\n mapbox: \"web-maps-mapbox\",\n meilisearch: \"api-search-meilisearch\",\n mercurius: \"api-graphql-mercurius\",\n \"mistral-sdk\": \"ai-provider-mistral-sdk\",\n mmkv: \"mobile-storage-mmkv\",\n mobx: \"web-state-mobx\",\n modal: \"ai-infrastructure-modal\",\n mongodb: \"api-database-mongodb\",\n mongoose: \"api-database-mongoose\",\n msw: \"web-mocks-msw\",\n mui: \"web-ui-mui\",\n mysql: \"api-database-mysql\",\n \"native-js\": \"web-utilities-native-js\",\n nativewind: \"mobile-styling-nativewind\",\n neon: \"api-baas-neon\",\n nestjs: \"api-framework-nestjs\",\n netlify: \"infra-platform-netlify\",\n \"next-intl\": \"web-i18n-next-intl\",\n nextauth: \"api-auth-nextauth\",\n nextjs: \"web-meta-framework-nextjs\",\n \"ngrx-signalstore\": \"web-state-ngrx-signalstore\",\n nuxt: \"web-meta-framework-nuxt\",\n nx: \"shared-monorepo-nx\",\n \"oclif-ink\": \"cli-framework-oclif-ink\",\n \"offline-first\": \"web-pwa-offline-first\",\n ollama: \"ai-infrastructure-ollama\",\n \"openai-sdk\": \"ai-provider-openai-sdk\",\n \"openai-whisper\": \"ai-provider-openai-whisper\",\n openapi: \"api-specs-openapi\",\n payload: \"api-cms-payload\",\n pinecone: \"api-vector-db-pinecone\",\n pinia: \"web-state-pinia\",\n planetscale: \"api-baas-planetscale\",\n \"playwright-e2e\": \"web-testing-playwright-e2e\",\n \"pnpm-workspaces\": \"shared-monorepo-pnpm-workspaces\",\n postgresql: \"api-database-postgresql\",\n \"posthog-analytics\": \"api-analytics-posthog-analytics\",\n \"posthog-flags\": \"api-flags-posthog-flags\",\n prisma: \"api-database-prisma\",\n promptfoo: \"ai-observability-promptfoo\",\n pulumi: \"infra-iac-pulumi\",\n push: \"mobile-notifications-push\",\n qdrant: \"api-vector-db-qdrant\",\n qwik: \"web-meta-framework-qwik\",\n \"radix-ui\": \"web-ui-radix-ui\",\n react: \"web-framework-react\",\n \"react-hook-form\": \"web-forms-react-hook-form\",\n \"react-intl\": \"web-i18n-react-intl\",\n \"react-native\": \"mobile-framework-react-native\",\n \"react-native-paper\": \"mobile-ui-components-react-native-paper\",\n \"react-native-performance\": \"mobile-performance-react-native\",\n \"react-native-security\": \"mobile-security-react-native\",\n \"react-navigation\": \"mobile-navigation-react-navigation\",\n \"react-query\": \"web-server-state-react-query\",\n \"react-router\": \"web-routing-react-router\",\n \"react-testing-library\": \"web-testing-react-testing-library\",\n \"react-three-fiber\": \"web-3d-react-three-fiber\",\n reanimated: \"mobile-animation-reanimated\",\n recharts: \"web-dataviz-recharts\",\n redis: \"api-database-redis\",\n \"redux-toolkit\": \"web-state-redux-toolkit\",\n remix: \"web-meta-framework-remix\",\n replicate: \"ai-infrastructure-replicate\",\n \"research-methodology\": \"meta-methodology-research-methodology\",\n \"resend-react-email\": \"api-email-resend-react-email\",\n \"result-types\": \"web-error-handling-result-types\",\n reviewing: \"meta-reviewing-reviewing\",\n rxjs: \"web-utilities-rxjs\",\n sanity: \"api-cms-sanity\",\n \"scss-modules\": \"web-styling-scss-modules\",\n sequelize: \"api-database-sequelize\",\n \"service-workers\": \"web-pwa-service-workers\",\n \"setup-axiom-pino-sentry\": \"api-observability-setup-axiom-pino-sentry\",\n \"setup-env\": \"infra-config-setup-env\",\n \"setup-posthog\": \"api-analytics-setup-posthog\",\n \"setup-resend\": \"api-email-setup-resend\",\n \"shadcn-ui\": \"web-ui-shadcn-ui\",\n skia: \"mobile-animation-skia\",\n \"socket-io\": \"web-realtime-socket-io\",\n solidjs: \"web-framework-solidjs\",\n \"sqlite-powersync\": \"mobile-storage-sqlite-powersync\",\n sse: \"web-realtime-sse\",\n sst: \"infra-iac-sst\",\n \"stack-detect\": \"meta-config-stack-detect\",\n storybook: \"web-tooling-storybook\",\n strapi: \"api-cms-strapi\",\n strategies: \"api-caching-strategies\",\n stripe: \"api-commerce-stripe\",\n supabase: \"api-baas-supabase\",\n surrealdb: \"api-database-surrealdb\",\n svelte: \"web-framework-svelte\",\n sveltekit: \"web-meta-framework-sveltekit\",\n swr: \"web-data-fetching-swr\",\n tailwind: \"web-styling-tailwind\",\n tamagui: \"mobile-ui-components-tamagui\",\n \"tanstack-form\": \"web-forms-tanstack-form\",\n \"tanstack-router\": \"web-routing-tanstack-router\",\n \"tanstack-table\": \"web-ui-tanstack-table\",\n tasks: \"mobile-background-tasks\",\n tauri: \"desktop-framework-tauri\",\n \"tauri-backend\": \"desktop-backend-tauri\",\n \"tauri-bundling\": \"desktop-packaging-tauri\",\n \"tauri-mobile\": \"desktop-mobile-tauri\",\n \"tauri-multiwindow\": \"desktop-multiwindow-tauri\",\n \"tauri-plugins\": \"desktop-plugins-tauri\",\n \"tauri-security\": \"desktop-security-tauri\",\n terraform: \"infra-iac-terraform\",\n theming: \"web-styling-theming\",\n tiptap: \"web-editor-tiptap\",\n \"together-ai\": \"ai-infrastructure-together-ai\",\n \"tool-use-patterns\": \"ai-patterns-tool-use-patterns\",\n trpc: \"web-data-fetching-trpc\",\n turborepo: \"shared-monorepo-turborepo\",\n \"turborepo-ci\": \"infra-ci-cd-turborepo-ci\",\n turso: \"api-baas-turso\",\n typeorm: \"api-database-typeorm\",\n \"typescript-config\": \"shared-tooling-typescript-config\",\n unistyles: \"mobile-styling-unistyles\",\n upstash: \"api-database-upstash\",\n \"vee-validate\": \"web-forms-vee-validate\",\n vercel: \"infra-platform-vercel\",\n \"vercel-ai-sdk\": \"ai-orchestration-vercel-ai-sdk\",\n \"vercel-kv\": \"api-database-vercel-kv\",\n \"vercel-postgres\": \"api-database-vercel-postgres\",\n \"view-transitions\": \"web-animation-view-transitions\",\n \"vision-camera\": \"mobile-camera-vision-camera\",\n \"visual-regression\": \"web-testing-visual-regression\",\n vite: \"web-tooling-vite\",\n vitepress: \"web-meta-framework-vitepress\",\n vitest: \"web-testing-vitest\",\n \"vue-composition-api\": \"web-framework-vue-composition-api\",\n \"vue-i18n\": \"web-i18n-vue-i18n\",\n \"vue-test-utils\": \"web-testing-vue-test-utils\",\n vuetify: \"web-ui-vuetify\",\n vueuse: \"web-utilities-vueuse\",\n watermelondb: \"mobile-storage-watermelondb\",\n weaviate: \"api-vector-db-weaviate\",\n \"web-accessibility\": \"web-accessibility-web-accessibility\",\n \"web-performance\": \"web-performance-web-performance\",\n \"web-planning\": \"meta-planning-web-planning\",\n \"web-reviewing\": \"meta-reviewing-web-reviewing\",\n webhooks: \"api-messaging-webhooks\",\n websockets: \"web-realtime-websockets\",\n xquik: \"api-search-xquik\",\n yoga: \"api-graphql-yoga\",\n \"zod-validation\": \"web-forms-zod-validation\",\n zustand: \"web-state-zustand\",\n} as const;\n\nexport type SkillSlug = keyof typeof SKILL_MAP;\nexport type SkillId = (typeof SKILL_MAP)[SkillSlug];\n\n// Derived arrays for Zod enum compatibility\n// (z.enum() requires a readonly tuple, not Object.keys/values)\nexport const SKILL_SLUGS = [\n \"ai-planning\",\n \"ai-reviewing\",\n \"angular-standalone\",\n \"ant-design\",\n \"anthropic-sdk\",\n \"api-performance\",\n \"api-planning\",\n \"api-reviewing\",\n \"apollo-server\",\n \"app-links\",\n \"appwrite\",\n \"astro\",\n \"auth-security\",\n \"aws-sdk\",\n \"axiom-pino-sentry\",\n \"base-ui\",\n \"better-auth-drizzle-hono\",\n \"biome\",\n \"ble-nfc\",\n \"bullmq\",\n \"chakra-ui\",\n \"changesets\",\n \"chroma\",\n \"clack\",\n \"claude-vision\",\n \"clerk\",\n \"cli-commander\",\n \"cli-planning\",\n \"cli-reviewing\",\n \"cloudflare-workers\",\n \"cockroachdb\",\n \"cohere-sdk\",\n \"component-library\",\n \"composable-components\",\n \"css-animations\",\n \"cva\",\n \"cypress-e2e\",\n \"d3\",\n \"date-fns\",\n \"design-tokens\",\n \"detox\",\n \"dnd-kit\",\n \"docker\",\n \"docusaurus\",\n \"drizzle\",\n \"eas\",\n \"edgedb\",\n \"elasticsearch\",\n \"electron\",\n \"electron-forge\",\n \"electron-ipc\",\n \"electron-multiwindow\",\n \"electron-security\",\n \"electron-storage\",\n \"electron-testing\",\n \"electron-ui\",\n \"electron-updater\",\n \"elevenlabs\",\n \"elysia\",\n \"error-boundaries\",\n \"eslint-prettier\",\n \"expo\",\n \"expo-router\",\n \"express\",\n \"expressive-typescript\",\n \"fastify\",\n \"file-upload-patterns\",\n \"firebase\",\n \"framer-motion\",\n \"gesture-handler\",\n \"git-hooks\",\n \"github-actions\",\n \"google-gemini-sdk\",\n \"graphql-apollo\",\n \"graphql-urql\",\n \"headless-ui\",\n \"hono\",\n \"huggingface-inference\",\n \"image-handling\",\n \"infra-reviewing\",\n \"jotai\",\n \"knex\",\n \"kubernetes\",\n \"langchain\",\n \"langfuse\",\n \"leaflet\",\n \"lexical\",\n \"litellm\",\n \"llamaindex\",\n \"maestro\",\n \"mantine\",\n \"mapbox\",\n \"meilisearch\",\n \"mercurius\",\n \"mistral-sdk\",\n \"mmkv\",\n \"mobx\",\n \"modal\",\n \"mongodb\",\n \"mongoose\",\n \"msw\",\n \"mui\",\n \"mysql\",\n \"native-js\",\n \"nativewind\",\n \"neon\",\n \"nestjs\",\n \"netlify\",\n \"next-intl\",\n \"nextauth\",\n \"nextjs\",\n \"ngrx-signalstore\",\n \"nuxt\",\n \"nx\",\n \"oclif-ink\",\n \"offline-first\",\n \"ollama\",\n \"openai-sdk\",\n \"openai-whisper\",\n \"openapi\",\n \"payload\",\n \"pinecone\",\n \"pinia\",\n \"planetscale\",\n \"playwright-e2e\",\n \"pnpm-workspaces\",\n \"postgresql\",\n \"posthog-analytics\",\n \"posthog-flags\",\n \"prisma\",\n \"promptfoo\",\n \"pulumi\",\n \"push\",\n \"qdrant\",\n \"qwik\",\n \"radix-ui\",\n \"react\",\n \"react-hook-form\",\n \"react-intl\",\n \"react-native\",\n \"react-native-paper\",\n \"react-native-performance\",\n \"react-native-security\",\n \"react-navigation\",\n \"react-query\",\n \"react-router\",\n \"react-testing-library\",\n \"react-three-fiber\",\n \"reanimated\",\n \"recharts\",\n \"redis\",\n \"redux-toolkit\",\n \"remix\",\n \"replicate\",\n \"research-methodology\",\n \"resend-react-email\",\n \"result-types\",\n \"reviewing\",\n \"rxjs\",\n \"sanity\",\n \"scss-modules\",\n \"sequelize\",\n \"service-workers\",\n \"setup-axiom-pino-sentry\",\n \"setup-env\",\n \"setup-posthog\",\n \"setup-resend\",\n \"shadcn-ui\",\n \"skia\",\n \"socket-io\",\n \"solidjs\",\n \"sqlite-powersync\",\n \"sse\",\n \"sst\",\n \"stack-detect\",\n \"storybook\",\n \"strapi\",\n \"strategies\",\n \"stripe\",\n \"supabase\",\n \"surrealdb\",\n \"svelte\",\n \"sveltekit\",\n \"swr\",\n \"tailwind\",\n \"tamagui\",\n \"tanstack-form\",\n \"tanstack-router\",\n \"tanstack-table\",\n \"tasks\",\n \"tauri\",\n \"tauri-backend\",\n \"tauri-bundling\",\n \"tauri-mobile\",\n \"tauri-multiwindow\",\n \"tauri-plugins\",\n \"tauri-security\",\n \"terraform\",\n \"theming\",\n \"tiptap\",\n \"together-ai\",\n \"tool-use-patterns\",\n \"trpc\",\n \"turborepo\",\n \"turborepo-ci\",\n \"turso\",\n \"typeorm\",\n \"typescript-config\",\n \"unistyles\",\n \"upstash\",\n \"vee-validate\",\n \"vercel\",\n \"vercel-ai-sdk\",\n \"vercel-kv\",\n \"vercel-postgres\",\n \"view-transitions\",\n \"vision-camera\",\n \"visual-regression\",\n \"vite\",\n \"vitepress\",\n \"vitest\",\n \"vue-composition-api\",\n \"vue-i18n\",\n \"vue-test-utils\",\n \"vuetify\",\n \"vueuse\",\n \"watermelondb\",\n \"weaviate\",\n \"web-accessibility\",\n \"web-performance\",\n \"web-planning\",\n \"web-reviewing\",\n \"webhooks\",\n \"websockets\",\n \"xquik\",\n \"yoga\",\n \"zod-validation\",\n \"zustand\",\n] as const satisfies readonly SkillSlug[];\n\nexport const SKILL_IDS = [\n \"ai-infrastructure-huggingface-inference\",\n \"ai-infrastructure-litellm\",\n \"ai-infrastructure-modal\",\n \"ai-infrastructure-ollama\",\n \"ai-infrastructure-replicate\",\n \"ai-infrastructure-together-ai\",\n \"ai-observability-langfuse\",\n \"ai-observability-promptfoo\",\n \"ai-orchestration-langchain\",\n \"ai-orchestration-llamaindex\",\n \"ai-orchestration-vercel-ai-sdk\",\n \"ai-patterns-tool-use-patterns\",\n \"ai-provider-anthropic-sdk\",\n \"ai-provider-claude-vision\",\n \"ai-provider-cohere-sdk\",\n \"ai-provider-elevenlabs\",\n \"ai-provider-google-gemini-sdk\",\n \"ai-provider-mistral-sdk\",\n \"ai-provider-openai-sdk\",\n \"ai-provider-openai-whisper\",\n \"api-analytics-posthog-analytics\",\n \"api-analytics-setup-posthog\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-auth-clerk\",\n \"api-auth-nextauth\",\n \"api-baas-appwrite\",\n \"api-baas-firebase\",\n \"api-baas-neon\",\n \"api-baas-planetscale\",\n \"api-baas-supabase\",\n \"api-baas-turso\",\n \"api-caching-strategies\",\n \"api-cms-payload\",\n \"api-cms-sanity\",\n \"api-cms-strapi\",\n \"api-commerce-stripe\",\n \"api-database-cockroachdb\",\n \"api-database-drizzle\",\n \"api-database-edgedb\",\n \"api-database-knex\",\n \"api-database-mongodb\",\n \"api-database-mongoose\",\n \"api-database-mysql\",\n \"api-database-postgresql\",\n \"api-database-prisma\",\n \"api-database-redis\",\n \"api-database-sequelize\",\n \"api-database-surrealdb\",\n \"api-database-typeorm\",\n \"api-database-upstash\",\n \"api-database-vercel-kv\",\n \"api-database-vercel-postgres\",\n \"api-email-resend-react-email\",\n \"api-email-setup-resend\",\n \"api-flags-posthog-flags\",\n \"api-framework-elysia\",\n \"api-framework-express\",\n \"api-framework-fastify\",\n \"api-framework-hono\",\n \"api-framework-nestjs\",\n \"api-graphql-apollo-server\",\n \"api-graphql-mercurius\",\n \"api-graphql-yoga\",\n \"api-messaging-webhooks\",\n \"api-observability-axiom-pino-sentry\",\n \"api-observability-setup-axiom-pino-sentry\",\n \"api-performance-api-performance\",\n \"api-queue-bullmq\",\n \"api-search-elasticsearch\",\n \"api-search-meilisearch\",\n \"api-search-xquik\",\n \"api-specs-openapi\",\n \"api-vector-db-chroma\",\n \"api-vector-db-pinecone\",\n \"api-vector-db-qdrant\",\n \"api-vector-db-weaviate\",\n \"cli-framework-cli-commander\",\n \"cli-framework-oclif-ink\",\n \"cli-prompts-clack\",\n \"desktop-backend-tauri\",\n \"desktop-framework-electron\",\n \"desktop-framework-tauri\",\n \"desktop-ipc-electron\",\n \"desktop-mobile-tauri\",\n \"desktop-multiwindow-electron\",\n \"desktop-multiwindow-tauri\",\n \"desktop-packaging-electron-forge\",\n \"desktop-packaging-tauri\",\n \"desktop-plugins-tauri\",\n \"desktop-security-electron\",\n \"desktop-security-tauri\",\n \"desktop-storage-electron\",\n \"desktop-testing-electron\",\n \"desktop-ui-electron\",\n \"desktop-updates-electron-updater\",\n \"infra-ci-cd-docker\",\n \"infra-ci-cd-github-actions\",\n \"infra-ci-cd-turborepo-ci\",\n \"infra-config-setup-env\",\n \"infra-containers-kubernetes\",\n \"infra-iac-pulumi\",\n \"infra-iac-sst\",\n \"infra-iac-terraform\",\n \"infra-platform-aws-sdk\",\n \"infra-platform-cloudflare-workers\",\n \"infra-platform-netlify\",\n \"infra-platform-vercel\",\n \"meta-config-stack-detect\",\n \"meta-design-composable-components\",\n \"meta-design-expressive-typescript\",\n \"meta-methodology-research-methodology\",\n \"meta-planning-ai-planning\",\n \"meta-planning-api-planning\",\n \"meta-planning-cli-planning\",\n \"meta-planning-web-planning\",\n \"meta-reviewing-ai-reviewing\",\n \"meta-reviewing-api-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"meta-reviewing-infra-reviewing\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-web-reviewing\",\n \"mobile-animation-gesture-handler\",\n \"mobile-animation-reanimated\",\n \"mobile-animation-skia\",\n \"mobile-background-tasks\",\n \"mobile-camera-vision-camera\",\n \"mobile-deep-linking-app-links\",\n \"mobile-deployment-eas\",\n \"mobile-framework-expo\",\n \"mobile-framework-react-native\",\n \"mobile-hardware-ble-nfc\",\n \"mobile-navigation-expo-router\",\n \"mobile-navigation-react-navigation\",\n \"mobile-notifications-push\",\n \"mobile-performance-react-native\",\n \"mobile-security-react-native\",\n \"mobile-storage-mmkv\",\n \"mobile-storage-sqlite-powersync\",\n \"mobile-storage-watermelondb\",\n \"mobile-styling-nativewind\",\n \"mobile-styling-unistyles\",\n \"mobile-testing-detox\",\n \"mobile-testing-maestro\",\n \"mobile-ui-components-react-native-paper\",\n \"mobile-ui-components-tamagui\",\n \"shared-monorepo-nx\",\n \"shared-monorepo-pnpm-workspaces\",\n \"shared-monorepo-turborepo\",\n \"shared-security-auth-security\",\n \"shared-tooling-biome\",\n \"shared-tooling-changesets\",\n \"shared-tooling-eslint-prettier\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-typescript-config\",\n \"web-3d-react-three-fiber\",\n \"web-accessibility-web-accessibility\",\n \"web-animation-css-animations\",\n \"web-animation-framer-motion\",\n \"web-animation-view-transitions\",\n \"web-data-fetching-graphql-apollo\",\n \"web-data-fetching-graphql-urql\",\n \"web-data-fetching-swr\",\n \"web-data-fetching-trpc\",\n \"web-dataviz-d3\",\n \"web-dataviz-recharts\",\n \"web-dnd-dnd-kit\",\n \"web-editor-lexical\",\n \"web-editor-tiptap\",\n \"web-error-handling-error-boundaries\",\n \"web-error-handling-result-types\",\n \"web-files-file-upload-patterns\",\n \"web-files-image-handling\",\n \"web-forms-react-hook-form\",\n \"web-forms-tanstack-form\",\n \"web-forms-vee-validate\",\n \"web-forms-zod-validation\",\n \"web-framework-angular-standalone\",\n \"web-framework-react\",\n \"web-framework-solidjs\",\n \"web-framework-svelte\",\n \"web-framework-vue-composition-api\",\n \"web-i18n-next-intl\",\n \"web-i18n-react-intl\",\n \"web-i18n-vue-i18n\",\n \"web-maps-leaflet\",\n \"web-maps-mapbox\",\n \"web-meta-framework-astro\",\n \"web-meta-framework-docusaurus\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-nuxt\",\n \"web-meta-framework-qwik\",\n \"web-meta-framework-remix\",\n \"web-meta-framework-sveltekit\",\n \"web-meta-framework-vitepress\",\n \"web-mocks-msw\",\n \"web-performance-web-performance\",\n \"web-pwa-offline-first\",\n \"web-pwa-service-workers\",\n \"web-realtime-socket-io\",\n \"web-realtime-sse\",\n \"web-realtime-websockets\",\n \"web-routing-react-router\",\n \"web-routing-tanstack-router\",\n \"web-server-state-react-query\",\n \"web-state-jotai\",\n \"web-state-mobx\",\n \"web-state-ngrx-signalstore\",\n \"web-state-pinia\",\n \"web-state-redux-toolkit\",\n \"web-state-zustand\",\n \"web-styling-cva\",\n \"web-styling-design-tokens\",\n \"web-styling-scss-modules\",\n \"web-styling-tailwind\",\n \"web-styling-theming\",\n \"web-testing-cypress-e2e\",\n \"web-testing-playwright-e2e\",\n \"web-testing-react-testing-library\",\n \"web-testing-visual-regression\",\n \"web-testing-vitest\",\n \"web-testing-vue-test-utils\",\n \"web-tooling-component-library\",\n \"web-tooling-storybook\",\n \"web-tooling-vite\",\n \"web-ui-ant-design\",\n \"web-ui-base-ui\",\n \"web-ui-chakra-ui\",\n \"web-ui-headless-ui\",\n \"web-ui-mantine\",\n \"web-ui-mui\",\n \"web-ui-radix-ui\",\n \"web-ui-shadcn-ui\",\n \"web-ui-tanstack-table\",\n \"web-ui-vuetify\",\n \"web-utilities-date-fns\",\n \"web-utilities-native-js\",\n \"web-utilities-rxjs\",\n \"web-utilities-vueuse\",\n] as const satisfies readonly SkillId[];\n\n// ── Categories ─────────────────────────────────────────────────\n\nexport const CATEGORIES = [\n \"ai-infrastructure\",\n \"ai-observability\",\n \"ai-orchestration\",\n \"ai-patterns\",\n \"ai-provider\",\n \"api-analytics\",\n \"api-api\",\n \"api-auth\",\n \"api-baas\",\n \"api-caching\",\n \"api-cms\",\n \"api-commerce\",\n \"api-db-host\",\n \"api-document\",\n \"api-email\",\n \"api-graphql\",\n \"api-kv\",\n \"api-messaging\",\n \"api-observability\",\n \"api-orm\",\n \"api-performance\",\n \"api-queue\",\n \"api-search\",\n \"api-specs\",\n \"api-sql-engine\",\n \"api-vector-db\",\n \"cli-framework\",\n \"cli-prompts\",\n \"desktop-backend\",\n \"desktop-framework\",\n \"desktop-ipc\",\n \"desktop-mobile\",\n \"desktop-multiwindow\",\n \"desktop-packaging\",\n \"desktop-plugins\",\n \"desktop-security\",\n \"desktop-storage\",\n \"desktop-testing\",\n \"desktop-ui\",\n \"desktop-updates\",\n \"infra-ci-cd\",\n \"infra-config\",\n \"infra-containers\",\n \"infra-iac\",\n \"infra-platform\",\n \"meta-design\",\n \"meta-methodology\",\n \"meta-planning\",\n \"meta-reviewing\",\n \"mobile-animation\",\n \"mobile-background\",\n \"mobile-camera\",\n \"mobile-deep-linking\",\n \"mobile-deployment\",\n \"mobile-framework\",\n \"mobile-hardware\",\n \"mobile-navigation\",\n \"mobile-notifications\",\n \"mobile-performance\",\n \"mobile-security\",\n \"mobile-storage\",\n \"mobile-styling\",\n \"mobile-testing\",\n \"mobile-ui-components\",\n \"shared-lint\",\n \"shared-monorepo\",\n \"shared-security\",\n \"shared-task-runner\",\n \"shared-tooling\",\n \"web-3d\",\n \"web-accessibility\",\n \"web-animation\",\n \"web-client-state\",\n \"web-dataviz\",\n \"web-dnd\",\n \"web-docs\",\n \"web-e2e\",\n \"web-editor\",\n \"web-error-handling\",\n \"web-file-upload\",\n \"web-files\",\n \"web-form-library\",\n \"web-forms\",\n \"web-framework\",\n \"web-graphql-client\",\n \"web-i18n\",\n \"web-maps\",\n \"web-meta-framework\",\n \"web-mocking\",\n \"web-performance\",\n \"web-pwa\",\n \"web-realtime\",\n \"web-routing\",\n \"web-rpc\",\n \"web-server-state\",\n \"web-streaming\",\n \"web-styling\",\n \"web-testing\",\n \"web-tooling\",\n \"web-ui-components\",\n \"web-ui-kit\",\n \"web-utilities\",\n] as const;\n\nexport type Category = (typeof CATEGORIES)[number];\n\n// ── Domains ────────────────────────────────────────────────────\n\nexport const DOMAINS = [\n \"ai\",\n \"api\",\n \"cli\",\n \"desktop\",\n \"infra\",\n \"meta\",\n \"mobile\",\n \"shared\",\n \"web\",\n] as const;\n\nexport type Domain = (typeof DOMAINS)[number];\n\n// ── Agent Names ────────────────────────────────────────────────\n\nexport const AGENT_NAMES = [\n \"agent-summoner\",\n \"ai-developer\",\n \"ai-researcher\",\n \"ai-tester\",\n \"api-developer\",\n \"api-researcher\",\n \"api-tester\",\n \"cli-developer\",\n \"cli-researcher\",\n \"cli-tester\",\n \"codex-keeper\",\n \"convention-keeper\",\n \"pm\",\n \"reviewer\",\n \"skill-summoner\",\n \"web-developer\",\n \"web-researcher\",\n \"web-tester\",\n] as const;\n\nexport type AgentName = (typeof AGENT_NAMES)[number];\n","import { DOMAINS, type Domain } from \"../vendor/generated/source-types\"\n\n// The canonical display order. The CLI's wizard imports it from here — the\n// byte-duplicate it used to keep in sync by hand (`BUILT_IN_DOMAIN_ORDER` in\n// src/cli/consts.ts) was folded into this one when the selection semantics\n// moved onto this shared surface.\nexport const DOMAIN_ORDER: readonly Domain[] = [\n \"web\",\n \"api\",\n \"ai\",\n \"mobile\",\n \"desktop\",\n \"cli\",\n \"infra\",\n \"meta\",\n \"shared\",\n]\n\n// Short labels, for a filter bar that has to fit nine chips on one row.\n// The CLI spells `infra` out as \"Infrastructure\"; the design's chip says \"Infra\".\nexport const DOMAIN_LABELS: Record<Domain, string> = {\n web: \"Web\",\n api: \"API\",\n ai: \"AI\",\n mobile: \"Mobile\",\n desktop: \"Desktop\",\n cli: \"CLI\",\n infra: \"Infra\",\n meta: \"Meta\",\n shared: \"Shared\",\n}\n\n// One-line descriptions: the editor's chip and group tooltips, and the CLI's\n// domain-selection grid — its own copy folded into this one alongside\n// DOMAIN_ORDER above.\nexport const DOMAIN_DESCRIPTIONS: Record<Domain, string> = {\n web: \"Frontend web applications\",\n api: \"Backend APIs and services\",\n ai: \"AI and LLM integrations\",\n mobile: \"Mobile applications\",\n desktop: \"Desktop applications\",\n cli: \"Command-line tools\",\n infra: \"CI/CD, deployment, and infrastructure\",\n meta: \"Design patterns, code review, and research methodology\",\n shared: \"Shared utilities and methodology\",\n}\n\nconst DOMAIN_IDS = new Set<string>(DOMAINS)\n\n/**\n * Whether the UI has a section for this domain.\n *\n * Exported because a fetched marketplace names its own domains as plain\n * strings, and the nine here are the only ones with a label, an order and a\n * filter chip — so this is the question `buildCatalog` asks before it decides a\n * category has somewhere to render.\n */\nexport const isDomain = (domainId: string): domainId is Domain =>\n DOMAIN_IDS.has(domainId)\n\n// Agent ids are `<domain>-<role>` for the twelve agents that belong to a domain. The other six\n// (`agent-summoner`, `codex-keeper`, `convention-keeper`, `skill-summoner`, and the two\n// consolidated role agents `pm` and `reviewer`) have no domain prefix and land in `meta`,\n// alongside the meta-domain skills.\n//\n// The CLI's `MergedSkillsMatrix.agentDefinedDomains` would be the authoritative source, but it\n// is never populated and the CLI has it queued for deletion, so the prefix is what we have.\nexport const agentDomainOf = (agentId: string): Domain => {\n const prefix = agentId.split(\"-\")[0]\n return prefix && isDomain(prefix) ? prefix : \"meta\"\n}\n\nconst DOMAIN_POSITION = new Map(\n DOMAIN_ORDER.map((domain, index) => [domain, index])\n)\n\nexport const compareDomains = (a: Domain, b: Domain) =>\n (DOMAIN_POSITION.get(a) ?? DOMAIN_ORDER.length) -\n (DOMAIN_POSITION.get(b) ?? DOMAIN_ORDER.length)\n","// The two collection shapes every read model builds: ordered groups and a\n// by-id lookup. Local to read-model/ on purpose — nothing outside it groups\n// or indexes anything.\n\nexport const groupBy = <T, K>(\n items: T[],\n keyOf: (item: T) => K\n): Map<K, T[]> => {\n const groups = new Map<K, T[]>()\n for (const item of items) {\n const key = keyOf(item)\n const bucket = groups.get(key)\n if (bucket) bucket.push(item)\n else groups.set(key, [item])\n }\n return groups\n}\n\n// Keyed by whatever the items call themselves, and partial because that is what\n// an index built from a list is: it holds the ids it was given and nothing else,\n// so a lookup answers `undefined` rather than pretending the union is total.\nexport const indexById = <T extends { id: string }>(\n items: T[]\n): Partial<Record<T[\"id\"], T>> =>\n // Boundary cast: `Object.fromEntries` types every key as `string`; each of\n // these is the item's own id, which is the key type being claimed.\n Object.fromEntries(items.map((item) => [item.id, item])) as Partial<\n Record<T[\"id\"], T>\n >\n\n// `Object.entries` widens every key to `string`, which is what forces a cast\n// back to the union at each call site. One cast here, in the one place that\n// knows the keys came from a record typed by that union.\nexport const typedEntries = <K extends string, V>(\n record: Partial<Record<K, V>>\n): [K, V][] => Object.entries(record) as [K, V][]\n","// AUTO-GENERATED from skills source — do not edit manually\n// Run: bun run generate:types\n\nimport type {\n CategoryMap,\n MergedSkillsMatrix,\n ResolvedSkill,\n ResolvedStack,\n SkillSlugMap,\n} from \"../matrix\";\nimport type { AgentName } from \"../agents\";\nimport type { SkillId, SkillSlug } from \"../skills\";\nimport type { Category, Domain } from \"./source-types\";\n\n// ── Built-in Matrix ───────────────────────────────────────────\n\nexport const BUILT_IN_MATRIX: MergedSkillsMatrix = {\n version: \"1.0.0\",\n categories: {\n \"web-framework\": {\n id: \"web-framework\",\n displayName: \"Framework\",\n description: \"UI framework (React, Vue, Angular, SolidJS)\",\n domain: \"web\",\n exclusive: true,\n order: 1,\n },\n \"web-meta-framework\": {\n id: \"web-meta-framework\",\n displayName: \"Meta-Framework\",\n description: \"Full-stack meta-framework (Next.js, Remix, Nuxt, SvelteKit)\",\n domain: \"web\",\n exclusive: true,\n order: 2,\n },\n \"web-routing\": {\n id: \"web-routing\",\n displayName: \"Routing\",\n description: \"Client-side routing (TanStack Router)\",\n domain: \"web\",\n exclusive: true,\n order: 3,\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 order: 4,\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 order: 5,\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 order: 6,\n },\n \"web-graphql-client\": {\n id: \"web-graphql-client\",\n displayName: \"GraphQL Client\",\n description: \"GraphQL client library (Apollo Client, urql)\",\n domain: \"web\",\n exclusive: true,\n order: 7,\n },\n \"web-rpc\": {\n id: \"web-rpc\",\n displayName: \"Type-Safe RPC\",\n description: \"End-to-end type-safe RPC (tRPC)\",\n domain: \"web\",\n exclusive: false,\n order: 8,\n },\n \"web-forms\": {\n id: \"web-forms\",\n displayName: \"Validation\",\n description: \"Schema validation (Zod)\",\n domain: \"web\",\n exclusive: false,\n order: 9,\n },\n \"web-form-library\": {\n id: \"web-form-library\",\n displayName: \"Form Library\",\n description: \"Form state and submission (React Hook Form, TanStack Form, VeeValidate)\",\n domain: \"web\",\n exclusive: true,\n order: 10,\n },\n \"web-testing\": {\n id: \"web-testing\",\n displayName: \"Testing\",\n description: \"Unit, component, and visual testing\",\n domain: \"web\",\n exclusive: false,\n order: 11,\n },\n \"web-e2e\": {\n id: \"web-e2e\",\n displayName: \"E2E Testing\",\n description: \"End-to-end browser testing (Playwright, Cypress)\",\n domain: \"web\",\n exclusive: true,\n order: 12,\n },\n \"web-ui-kit\": {\n id: \"web-ui-kit\",\n displayName: \"Design System Kit\",\n description: \"Pre-styled component kit (shadcn/ui, MUI, Mantine, Vuetify)\",\n domain: \"web\",\n exclusive: true,\n order: 13,\n },\n \"web-ui-components\": {\n id: \"web-ui-components\",\n displayName: \"Headless Components\",\n description: \"Headless primitives (Radix UI, Base UI, Headless UI, TanStack Table)\",\n domain: \"web\",\n exclusive: false,\n order: 14,\n },\n \"web-tooling\": {\n id: \"web-tooling\",\n displayName: \"Build Tools\",\n description: \"Frontend build tools and bundlers (Vite, Webpack)\",\n domain: \"web\",\n exclusive: false,\n order: 15,\n },\n \"web-docs\": {\n id: \"web-docs\",\n displayName: \"Documentation Framework\",\n description: \"Documentation site generator (Docusaurus, VitePress)\",\n domain: \"web\",\n exclusive: true,\n order: 16,\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 order: 17,\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 order: 18,\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 order: 19,\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 order: 20,\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 order: 21,\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 order: 22,\n },\n \"web-realtime\": {\n id: \"web-realtime\",\n displayName: \"Realtime\",\n description: \"Bidirectional realtime (WebSockets, Socket.IO)\",\n domain: \"web\",\n exclusive: true,\n order: 23,\n },\n \"web-streaming\": {\n id: \"web-streaming\",\n displayName: \"Server Streaming\",\n description: \"Server-sent events and HTTP streaming\",\n domain: \"web\",\n exclusive: false,\n order: 24,\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 order: 25,\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 order: 26,\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 order: 27,\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 order: 28,\n },\n \"web-3d\": {\n id: \"web-3d\",\n displayName: \"3D Graphics\",\n description: \"3D rendering (React Three Fiber)\",\n domain: \"web\",\n exclusive: false,\n order: 29,\n },\n \"web-dataviz\": {\n id: \"web-dataviz\",\n displayName: \"Data Visualization\",\n description: \"Charts and data visualization (D3, Recharts)\",\n domain: \"web\",\n exclusive: false,\n order: 30,\n },\n \"web-dnd\": {\n id: \"web-dnd\",\n displayName: \"Drag & Drop\",\n description: \"Drag-and-drop interactions (dnd-kit)\",\n domain: \"web\",\n exclusive: false,\n order: 31,\n },\n \"web-editor\": {\n id: \"web-editor\",\n displayName: \"Rich Text Editor\",\n description: \"Rich text editing (Lexical, Tiptap)\",\n domain: \"web\",\n exclusive: true,\n order: 32,\n },\n \"web-maps\": {\n id: \"web-maps\",\n displayName: \"Maps\",\n description: \"Interactive maps (Leaflet, Mapbox)\",\n domain: \"web\",\n exclusive: true,\n order: 33,\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 order: 1,\n },\n \"api-sql-engine\": {\n id: \"api-sql-engine\",\n displayName: \"SQL Engine\",\n description: \"Primary SQL engine (PostgreSQL, MySQL, CockroachDB)\",\n domain: \"api\",\n exclusive: true,\n order: 2,\n },\n \"api-orm\": {\n id: \"api-orm\",\n displayName: \"ORM / Query Builder\",\n description: \"Database access layer (Drizzle, Prisma, TypeORM)\",\n domain: \"api\",\n exclusive: true,\n order: 3,\n },\n \"api-document\": {\n id: \"api-document\",\n displayName: \"Document / Multi-Model Database\",\n description: \"Primary non-SQL store (MongoDB, Mongoose, Gel, SurrealDB)\",\n domain: \"api\",\n exclusive: true,\n order: 4,\n },\n \"api-kv\": {\n id: \"api-kv\",\n displayName: \"Cache / KV Store\",\n description: \"Redis-class key-value provider (Redis, Upstash)\",\n domain: \"api\",\n exclusive: true,\n order: 5,\n },\n \"api-db-host\": {\n id: \"api-db-host\",\n displayName: \"Managed Database\",\n description: \"Managed database host (Neon, PlanetScale, Turso)\",\n domain: \"api\",\n exclusive: true,\n order: 6,\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 order: 8,\n },\n \"api-observability\": {\n id: \"api-observability\",\n displayName: \"Observability\",\n description: \"Logging, monitoring, error tracking\",\n domain: \"api\",\n exclusive: false,\n order: 9,\n },\n \"api-analytics\": {\n id: \"api-analytics\",\n displayName: \"Analytics\",\n description: \"Product analytics and tracking\",\n domain: \"api\",\n exclusive: false,\n order: 10,\n },\n \"api-email\": {\n id: \"api-email\",\n displayName: \"Email\",\n description: \"Transactional email (Resend, Sendgrid)\",\n domain: \"api\",\n exclusive: false,\n order: 11,\n },\n \"ai-provider\": {\n id: \"ai-provider\",\n displayName: \"AI Provider\",\n description: \"AI model provider SDKs (Anthropic, OpenAI, Google, etc.)\",\n domain: \"ai\",\n exclusive: false,\n order: 1,\n },\n \"ai-orchestration\": {\n id: \"ai-orchestration\",\n displayName: \"AI Orchestration\",\n description: \"Multi-model AI workflow frameworks (LangChain, LlamaIndex, Vercel AI)\",\n domain: \"ai\",\n exclusive: false,\n order: 2,\n },\n \"ai-observability\": {\n id: \"ai-observability\",\n displayName: \"AI Observability\",\n description: \"LLM monitoring, evaluation, and tracing (Langfuse, Promptfoo)\",\n domain: \"ai\",\n exclusive: false,\n order: 3,\n },\n \"ai-infrastructure\": {\n id: \"ai-infrastructure\",\n displayName: \"AI Infrastructure\",\n description: \"Model hosting, serving, and inference gateways\",\n domain: \"ai\",\n exclusive: false,\n order: 4,\n },\n \"ai-patterns\": {\n id: \"ai-patterns\",\n displayName: \"AI Patterns\",\n description: \"Cross-cutting AI usage patterns (tool use, prompting)\",\n domain: \"ai\",\n exclusive: false,\n order: 5,\n },\n \"api-baas\": {\n id: \"api-baas\",\n displayName: \"Backend as a Service\",\n description:\n \"Full backend platform — auth, database, storage, functions (Supabase, Firebase)\",\n domain: \"api\",\n exclusive: true,\n order: 7,\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 order: 12,\n },\n \"api-cms\": {\n id: \"api-cms\",\n displayName: \"CMS\",\n description: \"CMS platforms (Payload, Sanity, Strapi)\",\n domain: \"api\",\n exclusive: true,\n order: 13,\n },\n \"api-commerce\": {\n id: \"api-commerce\",\n displayName: \"Commerce\",\n description: \"Commerce platforms (Stripe)\",\n domain: \"api\",\n exclusive: false,\n order: 14,\n },\n \"api-search\": {\n id: \"api-search\",\n displayName: \"Search\",\n description: \"Search engines (Elasticsearch, Meilisearch)\",\n domain: \"api\",\n exclusive: true,\n order: 15,\n },\n \"api-vector-db\": {\n id: \"api-vector-db\",\n displayName: \"Vector Database\",\n description: \"Vector databases (Pinecone, Qdrant, Chroma, Weaviate)\",\n domain: \"api\",\n exclusive: true,\n order: 16,\n },\n \"api-caching\": {\n id: \"api-caching\",\n displayName: \"Caching\",\n description: \"API caching strategies and patterns\",\n domain: \"api\",\n exclusive: false,\n order: 17,\n },\n \"api-graphql\": {\n id: \"api-graphql\",\n displayName: \"GraphQL Server\",\n description: \"GraphQL servers (Apollo Server, Mercurius, Yoga)\",\n domain: \"api\",\n exclusive: true,\n order: 18,\n },\n \"api-messaging\": {\n id: \"api-messaging\",\n displayName: \"Messaging\",\n description: \"Webhooks and event-driven messaging\",\n domain: \"api\",\n exclusive: false,\n order: 19,\n },\n \"api-queue\": {\n id: \"api-queue\",\n displayName: \"Queues\",\n description: \"Background job queues (BullMQ)\",\n domain: \"api\",\n exclusive: false,\n order: 20,\n },\n \"api-specs\": {\n id: \"api-specs\",\n displayName: \"API Specifications\",\n description: \"API specification formats (OpenAPI)\",\n domain: \"api\",\n exclusive: false,\n order: 21,\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: false,\n order: 1,\n },\n \"mobile-animation\": {\n id: \"mobile-animation\",\n displayName: \"Mobile Animation\",\n description: \"Native animation and gestures (Reanimated, Gesture Handler, Skia)\",\n domain: \"mobile\",\n exclusive: false,\n order: 6,\n },\n \"mobile-background\": {\n id: \"mobile-background\",\n displayName: \"Background Tasks\",\n description: \"Background task scheduling and execution\",\n domain: \"mobile\",\n exclusive: false,\n order: 12,\n },\n \"mobile-camera\": {\n id: \"mobile-camera\",\n displayName: \"Camera\",\n description: \"Camera integration (Vision Camera)\",\n domain: \"mobile\",\n exclusive: false,\n order: 10,\n },\n \"mobile-deep-linking\": {\n id: \"mobile-deep-linking\",\n displayName: \"Deep Linking\",\n description: \"Deep links and universal/app links\",\n domain: \"mobile\",\n exclusive: false,\n order: 9,\n },\n \"mobile-deployment\": {\n id: \"mobile-deployment\",\n displayName: \"Deployment\",\n description: \"App builds and store releases (EAS)\",\n domain: \"mobile\",\n exclusive: false,\n order: 15,\n },\n \"mobile-hardware\": {\n id: \"mobile-hardware\",\n displayName: \"Hardware\",\n description: \"Device hardware access (BLE, NFC)\",\n domain: \"mobile\",\n exclusive: false,\n order: 11,\n },\n \"mobile-navigation\": {\n id: \"mobile-navigation\",\n displayName: \"Navigation\",\n description: \"Screen navigation (Expo Router, React Navigation)\",\n domain: \"mobile\",\n exclusive: true,\n order: 2,\n },\n \"mobile-notifications\": {\n id: \"mobile-notifications\",\n displayName: \"Notifications\",\n description: \"Push and local notifications\",\n domain: \"mobile\",\n exclusive: false,\n order: 8,\n },\n \"mobile-performance\": {\n id: \"mobile-performance\",\n displayName: \"Mobile Performance\",\n description: \"React Native performance optimization\",\n domain: \"mobile\",\n exclusive: false,\n order: 13,\n },\n \"mobile-security\": {\n id: \"mobile-security\",\n displayName: \"Mobile Security\",\n description: \"Mobile app security patterns (React Native)\",\n domain: \"mobile\",\n exclusive: false,\n order: 14,\n },\n \"mobile-storage\": {\n id: \"mobile-storage\",\n displayName: \"Mobile Storage\",\n description: \"On-device storage and offline databases (MMKV, SQLite, WatermelonDB)\",\n domain: \"mobile\",\n exclusive: false,\n order: 4,\n },\n \"mobile-styling\": {\n id: \"mobile-styling\",\n displayName: \"Mobile Styling\",\n description: \"Native styling (NativeWind, Unistyles)\",\n domain: \"mobile\",\n exclusive: true,\n order: 3,\n },\n \"mobile-testing\": {\n id: \"mobile-testing\",\n displayName: \"Mobile Testing\",\n description: \"Mobile E2E testing (Detox, Maestro)\",\n domain: \"mobile\",\n exclusive: false,\n order: 7,\n },\n \"mobile-ui-components\": {\n id: \"mobile-ui-components\",\n displayName: \"Mobile UI Components\",\n description: \"Native UI component libraries (React Native Paper, Tamagui)\",\n domain: \"mobile\",\n exclusive: true,\n order: 5,\n },\n \"shared-monorepo\": {\n id: \"shared-monorepo\",\n displayName: \"Monorepo\",\n description: \"Workspace management (pnpm workspaces)\",\n domain: \"shared\",\n exclusive: false,\n order: 1,\n },\n \"shared-task-runner\": {\n id: \"shared-task-runner\",\n displayName: \"Task Runner\",\n description: \"Monorepo task orchestration (Turborepo, Nx)\",\n domain: \"shared\",\n exclusive: true,\n order: 2,\n },\n \"shared-lint\": {\n id: \"shared-lint\",\n displayName: \"Lint & Format\",\n description: \"Linting and formatting (Biome, ESLint & Prettier)\",\n domain: \"shared\",\n exclusive: true,\n order: 3,\n },\n \"shared-tooling\": {\n id: \"shared-tooling\",\n displayName: \"Build Tooling\",\n description: \"TypeScript config, git hooks, changesets, stack detection\",\n domain: \"shared\",\n exclusive: false,\n order: 4,\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 order: 5,\n },\n \"meta-reviewing\": {\n id: \"meta-reviewing\",\n displayName: \"Code Review\",\n description: \"Code review patterns and methodology\",\n domain: \"meta\",\n exclusive: false,\n order: 1,\n },\n \"meta-methodology\": {\n id: \"meta-methodology\",\n displayName: \"Methodology\",\n description: \"Research and investigation methodology\",\n domain: \"meta\",\n exclusive: false,\n order: 2,\n },\n \"meta-design\": {\n id: \"meta-design\",\n displayName: \"Software Design\",\n description: \"Software design patterns and paradigms\",\n domain: \"meta\",\n exclusive: false,\n order: 3,\n },\n \"meta-planning\": {\n id: \"meta-planning\",\n displayName: \"Planning\",\n description: \"Specification planning frameworks per domain\",\n domain: \"meta\",\n exclusive: false,\n order: 4,\n },\n \"infra-ci-cd\": {\n id: \"infra-ci-cd\",\n displayName: \"CI/CD\",\n description: \"Continuous integration and deployment pipelines\",\n domain: \"infra\",\n exclusive: false,\n order: 1,\n },\n \"infra-platform\": {\n id: \"infra-platform\",\n displayName: \"Platform\",\n description: \"Edge compute and deployment platforms\",\n domain: \"infra\",\n exclusive: false,\n order: 2,\n },\n \"infra-config\": {\n id: \"infra-config\",\n displayName: \"Configuration\",\n description: \"Environment and infrastructure configuration\",\n domain: \"infra\",\n exclusive: false,\n order: 3,\n },\n \"infra-containers\": {\n id: \"infra-containers\",\n displayName: \"Containers\",\n description: \"Containers (Docker, Kubernetes)\",\n domain: \"infra\",\n exclusive: false,\n order: 5,\n },\n \"infra-iac\": {\n id: \"infra-iac\",\n displayName: \"Infrastructure as Code\",\n description: \"Infrastructure as code (Pulumi, SST, Terraform)\",\n domain: \"infra\",\n exclusive: true,\n order: 4,\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 order: 1,\n },\n \"cli-prompts\": {\n id: \"cli-prompts\",\n displayName: \"CLI Prompts\",\n description: \"Interactive CLI prompts (Clack)\",\n domain: \"cli\",\n exclusive: false,\n order: 2,\n },\n \"desktop-framework\": {\n id: \"desktop-framework\",\n displayName: \"Desktop Framework\",\n description: \"Desktop application framework (Tauri, Electron)\",\n domain: \"desktop\",\n exclusive: true,\n order: 1,\n },\n \"desktop-backend\": {\n id: \"desktop-backend\",\n displayName: \"Desktop Backend\",\n description: \"Desktop backend integration (Tauri)\",\n domain: \"desktop\",\n exclusive: false,\n order: 3,\n },\n \"desktop-ipc\": {\n id: \"desktop-ipc\",\n displayName: \"IPC\",\n description: \"Inter-process communication (Electron)\",\n domain: \"desktop\",\n exclusive: false,\n order: 2,\n },\n \"desktop-mobile\": {\n id: \"desktop-mobile\",\n displayName: \"Mobile Support\",\n description: \"Desktop-to-mobile platform support (Tauri)\",\n domain: \"desktop\",\n exclusive: false,\n order: 12,\n },\n \"desktop-multiwindow\": {\n id: \"desktop-multiwindow\",\n displayName: \"Multi-Window\",\n description: \"Multi-window management (Electron, Tauri)\",\n domain: \"desktop\",\n exclusive: false,\n order: 5,\n },\n \"desktop-packaging\": {\n id: \"desktop-packaging\",\n displayName: \"Packaging\",\n description: \"App packaging and distribution (Electron Forge, Tauri)\",\n domain: \"desktop\",\n exclusive: true,\n order: 9,\n },\n \"desktop-plugins\": {\n id: \"desktop-plugins\",\n displayName: \"Plugins\",\n description: \"Desktop plugin systems (Tauri)\",\n domain: \"desktop\",\n exclusive: false,\n order: 11,\n },\n \"desktop-security\": {\n id: \"desktop-security\",\n displayName: \"Desktop Security\",\n description: \"Desktop app security hardening (Electron, Tauri)\",\n domain: \"desktop\",\n exclusive: false,\n order: 7,\n },\n \"desktop-storage\": {\n id: \"desktop-storage\",\n displayName: \"Desktop Storage\",\n description: \"Desktop data persistence (Electron)\",\n domain: \"desktop\",\n exclusive: false,\n order: 6,\n },\n \"desktop-testing\": {\n id: \"desktop-testing\",\n displayName: \"Desktop Testing\",\n description: \"Desktop app testing (Electron)\",\n domain: \"desktop\",\n exclusive: false,\n order: 8,\n },\n \"desktop-ui\": {\n id: \"desktop-ui\",\n displayName: \"Desktop UI\",\n description: \"Desktop UI patterns (Electron)\",\n domain: \"desktop\",\n exclusive: false,\n order: 4,\n },\n \"desktop-updates\": {\n id: \"desktop-updates\",\n displayName: \"Auto-Updates\",\n description: \"Application auto-updates (electron-updater)\",\n domain: \"desktop\",\n exclusive: false,\n order: 10,\n },\n },\n skills: {\n \"ai-infrastructure-huggingface-inference\": {\n id: \"ai-infrastructure-huggingface-inference\",\n slug: \"huggingface-inference\",\n displayName: \"Hugging Face Inference\",\n description: \"Access 200k+ models via Inference API and Endpoints\",\n usageGuidance:\n \"Use when accessing ML models via Hugging Face — text generation, chat completion, embeddings, image generation, audio transcription, translation, summarization, and custom Inference Endpoints for dedicated deployments.\",\n category: \"ai-infrastructure\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-infrastructure-huggingface-inference\",\n },\n \"ai-infrastructure-litellm\": {\n id: \"ai-infrastructure-litellm\",\n slug: \"litellm\",\n displayName: \"LiteLLM\",\n description: \"Unified LLM proxy — 100+ providers, OpenAI-compatible API\",\n usageGuidance:\n \"Use when routing LLM requests through LiteLLM proxy — unified OpenAI-compatible API across providers, model fallbacks, load balancing, spend tracking, and rate limiting. Covers proxy server config.yaml setup, TypeScript client via OpenAI SDK, virtual keys, and production deployment.\",\n category: \"ai-infrastructure\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-infrastructure-litellm\",\n },\n \"ai-infrastructure-modal\": {\n id: \"ai-infrastructure-modal\",\n slug: \"modal\",\n displayName: \"Modal\",\n description: \"Serverless GPU compute for model deployment and inference\",\n usageGuidance:\n \"Use when deploying ML models or GPU workloads on Modal — web endpoints for API access from TypeScript, serverless GPU functions, model serving, scheduled jobs, and container-based deployments.\",\n category: \"ai-infrastructure\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/ai-infrastructure-modal\",\n },\n \"ai-infrastructure-ollama\": {\n id: \"ai-infrastructure-ollama\",\n slug: \"ollama\",\n displayName: \"Ollama\",\n description: \"Local LLM inference with the Ollama JavaScript client\",\n usageGuidance:\n \"Use when running LLMs locally with Ollama — chat completions, streaming, tool calling, vision, embeddings, model management, structured output with JSON schemas, and the OpenAI-compatible endpoint.\",\n category: \"ai-infrastructure\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-infrastructure-ollama\",\n },\n \"ai-infrastructure-replicate\": {\n id: \"ai-infrastructure-replicate\",\n slug: \"replicate\",\n displayName: \"Replicate\",\n description: \"Run open-source ML models with serverless GPU inference\",\n usageGuidance:\n \"Use when running open-source models on Replicate — model predictions, streaming, webhooks, file handling, model versioning, and serverless GPU deployment.\",\n category: \"ai-infrastructure\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-infrastructure-replicate\",\n },\n \"ai-infrastructure-together-ai\": {\n id: \"ai-infrastructure-together-ai\",\n slug: \"together-ai\",\n displayName: \"Together AI\",\n description: \"Multi-model inference API for open-source LLMs\",\n usageGuidance:\n \"Use when running open-source LLMs on Together AI — chat completions, streaming, embeddings, image generation, function calling, JSON mode, structured output, fine-tuning, and OpenAI-compatible endpoints.\",\n category: \"ai-infrastructure\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-infrastructure-together-ai\",\n },\n \"ai-observability-langfuse\": {\n id: \"ai-observability-langfuse\",\n slug: \"langfuse\",\n displayName: \"Langfuse\",\n description: \"LLM observability — tracing, evaluations, prompt management\",\n usageGuidance:\n \"Use when adding observability to LLM applications — tracing LLM calls, tracking costs, evaluations, prompt management, session tracking, user feedback, and datasets for testing with Langfuse.\",\n category: \"ai-observability\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-observability-promptfoo\",\n purpose: \"AI Evaluation / Observability\",\n },\n ],\n path: \"skills/ai-observability-langfuse\",\n },\n \"ai-observability-promptfoo\": {\n id: \"ai-observability-promptfoo\",\n slug: \"promptfoo\",\n displayName: \"Promptfoo\",\n description: \"Testing and evaluation framework for LLM prompts and apps\",\n usageGuidance:\n \"Use when testing LLM prompts and applications — promptfooconfig.yaml for test definitions, assertion types, model-graded evals, red teaming, CI integration, and comparative evaluation across providers.\",\n category: \"ai-observability\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-observability-langfuse\",\n purpose: \"AI Evaluation / Observability\",\n },\n ],\n path: \"skills/ai-observability-promptfoo\",\n },\n \"ai-orchestration-langchain\": {\n id: \"ai-orchestration-langchain\",\n slug: \"langchain\",\n displayName: \"LangChain\",\n description: \"LLM app framework with chains, agents, RAG, and memory\",\n usageGuidance:\n \"Use when building LLM-powered applications with LangChain.js — chat models, prompt templates, output parsers, chains (LCEL), agents with tools, RAG pipelines, vector stores, and memory.\",\n category: \"ai-orchestration\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-orchestration-vercel-ai-sdk\",\n purpose: \"AI SDK\",\n },\n {\n skillId: \"ai-orchestration-llamaindex\",\n purpose: \"AI SDK\",\n },\n ],\n path: \"skills/ai-orchestration-langchain\",\n },\n \"ai-orchestration-llamaindex\": {\n id: \"ai-orchestration-llamaindex\",\n slug: \"llamaindex\",\n displayName: \"LlamaIndex\",\n description: \"LLM data framework — indexing, retrieval, query engines\",\n usageGuidance:\n \"Use when building RAG and data-aware LLM applications — document loading, text chunking, vector indexing, query engines, chat engines, and agentic RAG with LlamaIndex.TS.\",\n category: \"ai-orchestration\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-orchestration-vercel-ai-sdk\",\n purpose: \"AI SDK\",\n },\n {\n skillId: \"ai-orchestration-langchain\",\n purpose: \"AI SDK\",\n },\n ],\n path: \"skills/ai-orchestration-llamaindex\",\n },\n \"ai-orchestration-vercel-ai-sdk\": {\n id: \"ai-orchestration-vercel-ai-sdk\",\n slug: \"vercel-ai-sdk\",\n displayName: \"Vercel AI SDK\",\n description: \"Vercel AI SDK for streaming AI applications\",\n usageGuidance:\n \"Use when building AI-powered features with streaming, chat UIs, or multi-provider AI integrations. Covers generateText, streamText, structured output with Zod, tool calling, useChat/useCompletion hooks, embeddings, and RAG patterns.\",\n category: \"ai-orchestration\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-orchestration-langchain\",\n purpose: \"AI SDK\",\n },\n {\n skillId: \"ai-orchestration-llamaindex\",\n purpose: \"AI SDK\",\n },\n ],\n path: \"skills/ai-orchestration-vercel-ai-sdk\",\n },\n \"ai-patterns-tool-use-patterns\": {\n id: \"ai-patterns-tool-use-patterns\",\n slug: \"tool-use-patterns\",\n displayName: \"Tool Use Patterns\",\n description: \"Provider-agnostic patterns for LLM function calling\",\n usageGuidance:\n \"Use when implementing LLM tool use -- tool definition schemas, the tool call loop pattern, parallel tool calls, error reporting back to the model, multi-step agent workflows, human-in-the-loop patterns, and tool choice control. Provider-agnostic -- shows generic TypeScript patterns, not provider-specific SDK code.\",\n category: \"ai-patterns\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/ai-patterns-tool-use-patterns\",\n },\n \"ai-provider-anthropic-sdk\": {\n id: \"ai-provider-anthropic-sdk\",\n slug: \"anthropic-sdk\",\n displayName: \"Anthropic SDK\",\n description: \"Claude API — messages, streaming, tool use, and vision\",\n usageGuidance:\n \"Use when integrating Claude via the Anthropic API — messages API, streaming responses, tool use (function calling), vision (image input), extended thinking, batch API, and prompt caching.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-provider-anthropic-sdk\",\n },\n \"ai-provider-claude-vision\": {\n id: \"ai-provider-claude-vision\",\n slug: \"claude-vision\",\n displayName: \"Claude Vision\",\n description: \"Image understanding and document analysis with Claude\",\n usageGuidance:\n \"Use when processing images and documents with Claude — image analysis, document extraction, chart interpretation, multi-image comparison, and PDF processing with the Anthropic API.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"ai-provider-anthropic-sdk\"],\n needsAny: false,\n reason: \"Claude Vision uses the Anthropic SDK\",\n },\n ],\n alternatives: [],\n path: \"skills/ai-provider-claude-vision\",\n },\n \"ai-provider-cohere-sdk\": {\n id: \"ai-provider-cohere-sdk\",\n slug: \"cohere-sdk\",\n displayName: \"Cohere SDK\",\n description: \"Cohere API — chat, embeddings, rerank, and RAG\",\n usageGuidance:\n \"Use when integrating Cohere AI -- chat completions with Command models, embeddings for semantic search, rerank for relevance scoring, RAG with inline documents and citations, tool use / function calling, and streaming.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-provider-cohere-sdk\",\n },\n \"ai-provider-elevenlabs\": {\n id: \"ai-provider-elevenlabs\",\n slug: \"elevenlabs\",\n displayName: \"ElevenLabs\",\n description: \"Text-to-speech, voice cloning, and real-time streaming\",\n usageGuidance:\n \"Use when generating speech with ElevenLabs — text-to-speech, streaming audio, voice cloning, voice selection, pronunciation control (SSML), and real-time conversational AI.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/ai-provider-elevenlabs\",\n },\n \"ai-provider-google-gemini-sdk\": {\n id: \"ai-provider-google-gemini-sdk\",\n slug: \"google-gemini-sdk\",\n displayName: \"Google Gemini SDK\",\n description: \"Gemini API — multimodal input, tools, structured output\",\n usageGuidance:\n \"Use when integrating Google Gemini — text generation, multimodal input (images, video, audio, PDF), function calling, structured JSON output, streaming, embeddings, and context caching.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-provider-google-gemini-sdk\",\n },\n \"ai-provider-mistral-sdk\": {\n id: \"ai-provider-mistral-sdk\",\n slug: \"mistral-sdk\",\n displayName: \"Mistral SDK\",\n description: \"Mistral API — chat, embeddings, tools, code generation\",\n usageGuidance:\n \"Use when integrating Mistral AI models — chat completions, streaming, function calling, embeddings, JSON mode, structured outputs with Zod, vision with supported models, and Codestral for code generation / FIM.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-openai-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-provider-mistral-sdk\",\n },\n \"ai-provider-openai-sdk\": {\n id: \"ai-provider-openai-sdk\",\n slug: \"openai-sdk\",\n displayName: \"OpenAI SDK\",\n description: \"Official OpenAI SDK for TypeScript/Node.js\",\n usageGuidance:\n \"Use when building applications with OpenAI's API — GPT models, chat completions, Responses API, embeddings, function calling, structured outputs, vision, audio, streaming, and batch processing.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"ai-provider-anthropic-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-google-gemini-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-mistral-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-provider-cohere-sdk\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-together-ai\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-replicate\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-huggingface-inference\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-ollama\",\n purpose: \"AI Provider SDK\",\n },\n {\n skillId: \"ai-infrastructure-litellm\",\n purpose: \"AI Provider SDK\",\n },\n ],\n path: \"skills/ai-provider-openai-sdk\",\n },\n \"ai-provider-openai-whisper\": {\n id: \"ai-provider-openai-whisper\",\n slug: \"openai-whisper\",\n displayName: \"OpenAI Whisper\",\n description: \"Speech-to-text and translation via the OpenAI Audio API\",\n usageGuidance:\n \"Use when transcribing or translating audio with OpenAI Whisper -- file transcription, streaming transcription, translation to English, timestamp generation, and custom vocabulary prompting.\",\n category: \"ai-provider\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"ai-provider-openai-sdk\"],\n needsAny: false,\n reason: \"Whisper API uses the OpenAI SDK\",\n },\n ],\n alternatives: [],\n path: \"skills/ai-provider-openai-whisper\",\n },\n \"api-analytics-posthog-analytics\": {\n id: \"api-analytics-posthog-analytics\",\n slug: \"posthog-analytics\",\n displayName: \"PostHog Analytics\",\n description: \"Product analytics tracking\",\n usageGuidance:\n \"Use when tracking user events, setting up funnels, or implementing GDPR-compliant analytics.\",\n category: \"api-analytics\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-analytics-posthog-analytics\",\n },\n \"api-analytics-setup-posthog\": {\n id: \"api-analytics-setup-posthog\",\n slug: \"setup-posthog\",\n displayName: \"PostHog Setup\",\n description: \"PostHog initial setup\",\n usageGuidance: \"Use when setting up PostHog analytics or feature flags for the first time.\",\n category: \"api-analytics\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-analytics-setup-posthog\",\n },\n \"api-auth-better-auth-drizzle-hono\": {\n id: \"api-auth-better-auth-drizzle-hono\",\n slug: \"better-auth-drizzle-hono\",\n displayName: \"Better Auth\",\n description: \"Authentication and sessions\",\n usageGuidance: \"Use when implementing authentication, sessions, OAuth, or user management.\",\n category: \"api-auth\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-auth-nextauth\",\n reason: \"Authentication solutions are mutually exclusive\",\n },\n {\n skillId: \"api-auth-clerk\",\n reason: \"Authentication solutions are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"api-database-drizzle\", \"api-framework-hono\"],\n needsAny: false,\n reason:\n \"Skill teaches Better Auth with the Drizzle adapter, mounted via Hono routes and typed Hono middleware\",\n },\n ],\n alternatives: [\n {\n skillId: \"api-auth-nextauth\",\n purpose: \"Auth\",\n },\n {\n skillId: \"api-auth-clerk\",\n purpose: \"Auth\",\n },\n ],\n path: \"skills/api-auth-better-auth-drizzle-hono\",\n },\n \"api-auth-clerk\": {\n id: \"api-auth-clerk\",\n slug: \"clerk\",\n displayName: \"Clerk\",\n description: \"Clerk managed authentication and user management\",\n usageGuidance:\n \"Use when building with Clerk for auth, user management, organizations, or pre-built UI components.\",\n category: \"api-auth\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-auth-better-auth-drizzle-hono\",\n reason: \"Authentication solutions are mutually exclusive\",\n },\n {\n skillId: \"api-auth-nextauth\",\n reason: \"Authentication solutions are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-meta-framework-nextjs\"],\n needsAny: false,\n reason: \"Skill teaches @clerk/nextjs patterns\",\n },\n ],\n alternatives: [\n {\n skillId: \"api-auth-better-auth-drizzle-hono\",\n purpose: \"Auth\",\n },\n {\n skillId: \"api-auth-nextauth\",\n purpose: \"Auth\",\n },\n ],\n path: \"skills/api-auth-clerk\",\n },\n \"api-auth-nextauth\": {\n id: \"api-auth-nextauth\",\n slug: \"nextauth\",\n displayName: \"Auth.js\",\n description: \"Auth.js (NextAuth v5) authentication\",\n usageGuidance:\n \"Use when implementing authentication with Auth.js/NextAuth for Next.js, SvelteKit, or other frameworks.\",\n category: \"api-auth\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-auth-better-auth-drizzle-hono\",\n reason: \"Authentication solutions are mutually exclusive\",\n },\n {\n skillId: \"api-auth-clerk\",\n reason: \"Authentication solutions are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-meta-framework-nextjs\"],\n needsAny: false,\n reason:\n \"Skill teaches the next-auth (Next.js) package — auth.ts, handlers, middleware, Server Components\",\n },\n ],\n alternatives: [\n {\n skillId: \"api-auth-better-auth-drizzle-hono\",\n purpose: \"Auth\",\n },\n {\n skillId: \"api-auth-clerk\",\n purpose: \"Auth\",\n },\n ],\n path: \"skills/api-auth-nextauth\",\n },\n \"api-baas-appwrite\": {\n id: \"api-baas-appwrite\",\n slug: \"appwrite\",\n displayName: \"Appwrite\",\n description: \"Open-source BaaS — auth, databases, storage, and functions\",\n usageGuidance:\n \"Use when building with Appwrite — client/server SDKs for authentication, TablesDB (tables, rows, columns), file storage with buckets, serverless functions, and realtime subscriptions.\",\n category: \"api-baas\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-supabase\",\n purpose: \"Backend as a Service\",\n },\n {\n skillId: \"api-baas-firebase\",\n purpose: \"Backend as a Service\",\n },\n ],\n path: \"skills/api-baas-appwrite\",\n },\n \"api-baas-firebase\": {\n id: \"api-baas-firebase\",\n slug: \"firebase\",\n displayName: \"Firebase\",\n description: \"Google Firebase platform for web and mobile\",\n usageGuidance:\n \"Use when building with Firebase — Firestore, Authentication, Cloud Functions, Storage, Hosting, Realtime Database, and Firebase Admin SDK.\",\n category: \"api-baas\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-supabase\",\n purpose: \"Backend as a Service\",\n },\n {\n skillId: \"api-baas-appwrite\",\n purpose: \"Backend as a Service\",\n },\n ],\n path: \"skills/api-baas-firebase\",\n },\n \"api-baas-neon\": {\n id: \"api-baas-neon\",\n slug: \"neon\",\n displayName: \"Neon\",\n description: \"Serverless PostgreSQL — branching, autoscaling, edge driver\",\n usageGuidance:\n \"Use when deploying PostgreSQL on Neon — serverless driver for edge/serverless functions, database branching for dev/preview, autoscaling, connection pooling, and the Neon API for programmatic management.\",\n category: \"api-db-host\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-planetscale\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-baas-turso\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-vercel-postgres\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-cockroachdb\",\n purpose: \"Managed Database\",\n },\n ],\n path: \"skills/api-baas-neon\",\n },\n \"api-baas-planetscale\": {\n id: \"api-baas-planetscale\",\n slug: \"planetscale\",\n displayName: \"PlanetScale\",\n description: \"Serverless MySQL — branching, deploy requests, edge driver\",\n usageGuidance:\n \"Use when deploying MySQL on PlanetScale — serverless driver for edge/serverless, database branching, deploy requests for schema changes, connection pooling, and Vitess-powered horizontal scaling.\",\n category: \"api-db-host\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-neon\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-baas-turso\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-vercel-postgres\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-cockroachdb\",\n purpose: \"Managed Database\",\n },\n ],\n path: \"skills/api-baas-planetscale\",\n },\n \"api-baas-supabase\": {\n id: \"api-baas-supabase\",\n slug: \"supabase\",\n displayName: \"Supabase\",\n description: \"Supabase backend-as-a-service platform\",\n usageGuidance:\n \"Use when building with Supabase Auth, Database, Realtime, Storage, or Edge Functions. Covers client setup, typed queries, RLS policies, realtime subscriptions, file storage, and Deno edge functions.\",\n category: \"api-baas\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-firebase\",\n purpose: \"Backend as a Service\",\n },\n {\n skillId: \"api-baas-appwrite\",\n purpose: \"Backend as a Service\",\n },\n ],\n path: \"skills/api-baas-supabase\",\n },\n \"api-baas-turso\": {\n id: \"api-baas-turso\",\n slug: \"turso\",\n displayName: \"Turso\",\n description: \"Edge-hosted SQLite with libSQL driver and embedded replicas\",\n usageGuidance:\n \"Use when deploying SQLite on Turso — libSQL client for edge/serverless, embedded replicas for zero-latency reads, database groups for multi-region, and schema migrations with branching.\",\n category: \"api-db-host\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-neon\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-baas-planetscale\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-vercel-postgres\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-cockroachdb\",\n purpose: \"Managed Database\",\n },\n ],\n path: \"skills/api-baas-turso\",\n },\n \"api-caching-strategies\": {\n id: \"api-caching-strategies\",\n slug: \"strategies\",\n displayName: \"Caching\",\n description: \"Application-level caching and cache invalidation patterns\",\n usageGuidance:\n \"Use when implementing caching in backend applications — cache-aside, write-through, write-behind, TTL strategies, cache invalidation, CDN caching headers, HTTP caching, in-memory caching, and distributed cache patterns.\",\n category: \"api-caching\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-caching-strategies\",\n },\n \"api-cms-payload\": {\n id: \"api-cms-payload\",\n slug: \"payload\",\n displayName: \"Payload CMS\",\n description: \"TypeScript headless CMS — code-first schema, admin panel\",\n usageGuidance:\n \"Use when building content-managed applications with Payload — collection configs, field types, hooks, access control, REST/GraphQL/Local API, admin panel customization, and database adapter pattern.\",\n category: \"api-cms\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-cms-sanity\",\n purpose: \"CMS\",\n },\n {\n skillId: \"api-cms-strapi\",\n purpose: \"CMS\",\n },\n ],\n path: \"skills/api-cms-payload\",\n },\n \"api-cms-sanity\": {\n id: \"api-cms-sanity\",\n slug: \"sanity\",\n displayName: \"Sanity\",\n description: \"Structured content with GROQ queries and live collaboration\",\n usageGuidance:\n \"Use when building content-managed applications with Sanity — schema definitions, GROQ queries, @sanity/client for data fetching, image handling with @sanity/image-url, Portable Text for rich text, and Sanity Studio customization.\",\n category: \"api-cms\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-cms-payload\",\n purpose: \"CMS\",\n },\n {\n skillId: \"api-cms-strapi\",\n purpose: \"CMS\",\n },\n ],\n path: \"skills/api-cms-sanity\",\n },\n \"api-cms-strapi\": {\n id: \"api-cms-strapi\",\n slug: \"strapi\",\n displayName: \"Strapi\",\n description: \"Open-source headless CMS — content types, REST/GraphQL API\",\n usageGuidance:\n \"Use when building content-managed applications with Strapi — content type schemas, REST API (filters, populate, pagination), Document Service API (find, create, update, delete, publish), custom controllers, services, policies, middlewares, lifecycle hooks, authentication (register, login, JWT), roles and permissions, media upload, and TypeScript support.\",\n category: \"api-cms\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-cms-payload\",\n purpose: \"CMS\",\n },\n {\n skillId: \"api-cms-sanity\",\n purpose: \"CMS\",\n },\n ],\n path: \"skills/api-cms-strapi\",\n },\n \"api-commerce-stripe\": {\n id: \"api-commerce-stripe\",\n slug: \"stripe\",\n displayName: \"Stripe\",\n description: \"Payments — subscriptions, checkout, webhooks, and Connect\",\n usageGuidance:\n \"Use when integrating payments with Stripe — Checkout Sessions, Payment Intents, subscriptions, webhooks, customer management, Connect for platforms, and Stripe Elements.\",\n category: \"api-commerce\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-commerce-stripe\",\n },\n \"api-database-cockroachdb\": {\n id: \"api-database-cockroachdb\",\n slug: \"cockroachdb\",\n displayName: \"CockroachDB\",\n description: \"Distributed SQL with PostgreSQL wire protocol\",\n usageGuidance:\n \"Use when working with CockroachDB -- PostgreSQL-compatible wire protocol, distributed transactions with serializable isolation, automatic sharding, multi-region locality, and transaction retry logic.\",\n category: \"api-sql-engine\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-neon\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-baas-planetscale\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-baas-turso\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-vercel-postgres\",\n purpose: \"Managed Database\",\n },\n ],\n path: \"skills/api-database-cockroachdb\",\n },\n \"api-database-drizzle\": {\n id: \"api-database-drizzle\",\n slug: \"drizzle\",\n displayName: \"Drizzle\",\n description: \"Drizzle ORM patterns\",\n usageGuidance: \"Use when writing database queries, migrations, or working with Drizzle ORM.\",\n category: \"api-orm\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-prisma\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-sequelize\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-typeorm\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-knex\",\n purpose: \"SQL ORM / Query Builder\",\n },\n ],\n path: \"skills/api-database-drizzle\",\n },\n \"api-database-edgedb\": {\n id: \"api-database-edgedb\",\n slug: \"edgedb\",\n displayName: \"Gel (EdgeDB)\",\n description: \"Graph-relational database with EdgeQL and code-first schema\",\n usageGuidance:\n \"Use when working with Gel (formerly EdgeDB) — EdgeQL for type-safe queries, code-first schema with migrations, link-based relations, computed properties, and the query builder for fully typed TypeScript queries.\",\n category: \"api-document\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-database-edgedb\",\n },\n \"api-database-knex\": {\n id: \"api-database-knex\",\n slug: \"knex\",\n displayName: \"Knex.js\",\n description: \"SQL query builder for PostgreSQL, MySQL, SQLite, and MSSQL\",\n usageGuidance:\n \"Use when building SQL queries programmatically -- fluent query builder, schema builder, migrations, seeds, transactions, and raw queries with parameter binding.\",\n category: \"api-orm\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-drizzle\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-prisma\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-sequelize\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-typeorm\",\n purpose: \"SQL ORM / Query Builder\",\n },\n ],\n path: \"skills/api-database-knex\",\n },\n \"api-database-mongodb\": {\n id: \"api-database-mongodb\",\n slug: \"mongodb\",\n displayName: \"MongoDB\",\n description: \"Native MongoDB driver — the mongodb npm package, no ODM\",\n usageGuidance:\n \"Use when talking to MongoDB through the official `mongodb` driver directly, with no schema layer in between — MongoClient and pool lifecycle, typed collections, CRUD result shapes, cursors and streaming reads, aggregation pipelines, index design and verification with explain, and multi document transactions with sessions.\",\n category: \"api-document\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-mongoose\",\n purpose: \"MongoDB\",\n },\n ],\n path: \"skills/api-database-mongodb\",\n },\n \"api-database-mongoose\": {\n id: \"api-database-mongoose\",\n slug: \"mongoose\",\n displayName: \"Mongoose\",\n description: \"MongoDB ODM — schemas, validation, middleware, TypeScript\",\n usageGuidance:\n \"Use when working with MongoDB via Mongoose — schema definitions, model creation, queries, population, middleware hooks, virtuals, and TypeScript integration.\",\n category: \"api-document\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-mongodb\",\n purpose: \"MongoDB\",\n },\n ],\n path: \"skills/api-database-mongoose\",\n },\n \"api-database-mysql\": {\n id: \"api-database-mysql\",\n slug: \"mysql\",\n displayName: \"MySQL\",\n description: \"Direct MySQL database access with mysql2 driver\",\n usageGuidance:\n \"Use when interacting directly with MySQL -- connection pools, prepared statements, transactions, streaming, and promise-based API with mysql2.\",\n category: \"api-sql-engine\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-postgresql\",\n purpose: \"SQL Database\",\n },\n ],\n path: \"skills/api-database-mysql\",\n },\n \"api-database-postgresql\": {\n id: \"api-database-postgresql\",\n slug: \"postgresql\",\n displayName: \"PostgreSQL\",\n description: \"Direct PostgreSQL database access with node-postgres (pg)\",\n usageGuidance:\n \"Use when interacting directly with PostgreSQL -- connection pools, parameterized queries, transactions, migrations, and type-safe query results with pg.\",\n category: \"api-sql-engine\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-mysql\",\n purpose: \"SQL Database\",\n },\n ],\n path: \"skills/api-database-postgresql\",\n },\n \"api-database-prisma\": {\n id: \"api-database-prisma\",\n slug: \"prisma\",\n displayName: \"Prisma\",\n description: \"Prisma ORM patterns\",\n usageGuidance: \"Use when writing database queries, migrations, or working with Prisma ORM.\",\n category: \"api-orm\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-drizzle\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-sequelize\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-typeorm\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-knex\",\n purpose: \"SQL ORM / Query Builder\",\n },\n ],\n path: \"skills/api-database-prisma\",\n },\n \"api-database-redis\": {\n id: \"api-database-redis\",\n slug: \"redis\",\n displayName: \"Redis\",\n description: \"Redis in-memory data store with ioredis\",\n usageGuidance:\n \"Use when implementing caching, session storage, rate limiting, pub/sub messaging, queues, or real-time leaderboards with Redis.\",\n category: \"api-kv\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-upstash\",\n purpose: \"Cache / KV Store\",\n },\n {\n skillId: \"api-database-vercel-kv\",\n purpose: \"Cache / KV Store\",\n },\n ],\n path: \"skills/api-database-redis\",\n },\n \"api-database-sequelize\": {\n id: \"api-database-sequelize\",\n slug: \"sequelize\",\n displayName: \"Sequelize\",\n description: \"Promise-based SQL ORM with model definitions and migrations\",\n usageGuidance:\n \"Use when working with SQL databases via Sequelize — model definitions, associations, queries, transactions, migrations, hooks, and scopes.\",\n category: \"api-orm\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-drizzle\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-prisma\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-typeorm\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-knex\",\n purpose: \"SQL ORM / Query Builder\",\n },\n ],\n path: \"skills/api-database-sequelize\",\n },\n \"api-database-surrealdb\": {\n id: \"api-database-surrealdb\",\n slug: \"surrealdb\",\n displayName: \"SurrealDB\",\n description: \"Multi-model database with graph relations and live queries\",\n usageGuidance:\n \"Use when working with SurrealDB — SurrealQL queries, record links for graph relations, live queries for real-time, schema-full and schema-less modes, and multi-tenancy with namespaces and databases.\",\n category: \"api-document\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-database-surrealdb\",\n },\n \"api-database-typeorm\": {\n id: \"api-database-typeorm\",\n slug: \"typeorm\",\n displayName: \"TypeORM\",\n description: \"Decorator-based TypeScript ORM with Data Mapper patterns\",\n usageGuidance:\n \"Use when building TypeScript applications with relational databases — entity decorators, repository pattern, migrations, relations, query builder, and transaction management.\",\n category: \"api-orm\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-drizzle\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-prisma\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-sequelize\",\n purpose: \"SQL ORM / Query Builder\",\n },\n {\n skillId: \"api-database-knex\",\n purpose: \"SQL ORM / Query Builder\",\n },\n ],\n path: \"skills/api-database-typeorm\",\n },\n \"api-database-upstash\": {\n id: \"api-database-upstash\",\n slug: \"upstash\",\n displayName: \"Upstash\",\n description: \"Serverless Redis via REST for edge and serverless runtimes\",\n usageGuidance:\n \"Use when deploying Redis on Upstash -- REST-based Redis for edge/serverless compatibility, automatic JSON serialization, pipeline support, rate limiting with @upstash/ratelimit, and global replication.\",\n category: \"api-kv\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-redis\",\n purpose: \"Cache / KV Store\",\n },\n {\n skillId: \"api-database-vercel-kv\",\n purpose: \"Cache / KV Store\",\n },\n ],\n path: \"skills/api-database-upstash\",\n },\n \"api-database-vercel-kv\": {\n id: \"api-database-vercel-kv\",\n slug: \"vercel-kv\",\n displayName: \"Vercel KV\",\n description: \"Serverless Redis-compatible key-value store on Vercel\",\n usageGuidance:\n \"Use when deploying Redis-compatible KV storage on Vercel -- automatic connection via UPSTASH_REDIS_REST_URL env vars, edge-compatible REST API, Redis command compatibility, and TTL-based caching.\",\n category: \"api-kv\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-database-redis\",\n purpose: \"Cache / KV Store\",\n },\n {\n skillId: \"api-database-upstash\",\n purpose: \"Cache / KV Store\",\n },\n ],\n path: \"skills/api-database-vercel-kv\",\n },\n \"api-database-vercel-postgres\": {\n id: \"api-database-vercel-postgres\",\n slug: \"vercel-postgres\",\n displayName: \"Vercel Postgres\",\n description: \"Serverless PostgreSQL on Vercel with edge-compatible SDK\",\n usageGuidance:\n \"Use when deploying PostgreSQL on Vercel -- sql tagged template for edge functions, createPool/createClient for Node.js, automatic connection management via POSTGRES_URL env vars. NOTE: @vercel/postgres is deprecated (Dec 2024). For new projects, use @neondatabase/serverless instead.\",\n category: \"api-db-host\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-baas-neon\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-baas-planetscale\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-baas-turso\",\n purpose: \"Managed Database\",\n },\n {\n skillId: \"api-database-cockroachdb\",\n purpose: \"Managed Database\",\n },\n ],\n path: \"skills/api-database-vercel-postgres\",\n },\n \"api-email-resend-react-email\": {\n id: \"api-email-resend-react-email\",\n slug: \"resend-react-email\",\n displayName: \"Resend\",\n description: \"Transactional email templates\",\n usageGuidance: \"Use when sending transactional emails or building React Email templates.\",\n category: \"api-email\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"React Email uses React for email templates\",\n },\n ],\n alternatives: [],\n path: \"skills/api-email-resend-react-email\",\n },\n \"api-email-setup-resend\": {\n id: \"api-email-setup-resend\",\n slug: \"setup-resend\",\n displayName: \"Email Setup\",\n description: \"Email service setup\",\n usageGuidance: \"Use when configuring Resend email service or domain verification.\",\n category: \"api-email\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason:\n \"Resend Email & React Email Setup — .tsx templates and the react: send prop are React Email surface\",\n },\n ],\n alternatives: [],\n path: \"skills/api-email-setup-resend\",\n },\n \"api-flags-posthog-flags\": {\n id: \"api-flags-posthog-flags\",\n slug: \"posthog-flags\",\n displayName: \"PostHog Flags\",\n description: \"Feature flags and A/B testing\",\n usageGuidance:\n \"Use when implementing feature flags, gradual rollouts, A/B tests, or remote configuration.\",\n category: \"api-analytics\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-flags-posthog-flags\",\n },\n \"api-framework-elysia\": {\n id: \"api-framework-elysia\",\n slug: \"elysia\",\n displayName: \"Elysia\",\n description: \"Bun-native HTTP framework with end-to-end type safety\",\n usageGuidance:\n \"Use when building APIs on Bun runtime — end-to-end type safety via Eden Treaty, plugin-based architecture, schema validation with TypeBox, lifecycle hooks, and high-performance routing.\",\n category: \"api-api\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-framework-hono\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-express\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-fastify\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-nestjs\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-framework-hono\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-express\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-fastify\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-nestjs\",\n purpose: \"API Framework\",\n },\n ],\n path: \"skills/api-framework-elysia\",\n },\n \"api-framework-express\": {\n id: \"api-framework-express\",\n slug: \"express\",\n displayName: \"Express\",\n description: \"Express API framework\",\n usageGuidance: \"Use when building Express.js APIs, middleware chains, or error handling.\",\n category: \"api-api\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-framework-hono\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-fastify\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-elysia\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-nestjs\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-framework-hono\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-fastify\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-elysia\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-nestjs\",\n purpose: \"API Framework\",\n },\n ],\n path: \"skills/api-framework-express\",\n },\n \"api-framework-fastify\": {\n id: \"api-framework-fastify\",\n slug: \"fastify\",\n displayName: \"Fastify\",\n description: \"Fastify API framework\",\n usageGuidance:\n \"Use when building Fastify APIs, using JSON Schema validation, or plugin architecture.\",\n category: \"api-api\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-framework-hono\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-express\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-elysia\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-nestjs\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-framework-hono\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-express\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-elysia\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-nestjs\",\n purpose: \"API Framework\",\n },\n ],\n path: \"skills/api-framework-fastify\",\n },\n \"api-framework-hono\": {\n id: \"api-framework-hono\",\n slug: \"hono\",\n displayName: \"Hono\",\n description: \"Hono API framework\",\n usageGuidance:\n \"Use when building API routes with Hono, implementing OpenAPI specs, or Zod validation.\",\n category: \"api-api\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-framework-express\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-fastify\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-elysia\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-nestjs\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-framework-express\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-fastify\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-elysia\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-nestjs\",\n purpose: \"API Framework\",\n },\n ],\n path: \"skills/api-framework-hono\",\n },\n \"api-framework-nestjs\": {\n id: \"api-framework-nestjs\",\n slug: \"nestjs\",\n displayName: \"NestJS\",\n description: \"NestJS structured backend framework\",\n usageGuidance:\n \"Use when building NestJS apps with modules, controllers, services, or decorators.\",\n category: \"api-api\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"api-framework-hono\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-express\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-fastify\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n {\n skillId: \"api-framework-elysia\",\n reason: \"API frameworks are mutually exclusive within a single service\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-framework-hono\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-express\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-fastify\",\n purpose: \"API Framework\",\n },\n {\n skillId: \"api-framework-elysia\",\n purpose: \"API Framework\",\n },\n ],\n path: \"skills/api-framework-nestjs\",\n },\n \"api-graphql-apollo-server\": {\n id: \"api-graphql-apollo-server\",\n slug: \"apollo-server\",\n displayName: \"Apollo Server\",\n description: \"GraphQL API server with Apollo Server\",\n usageGuidance:\n \"Use when building GraphQL APIs with Apollo Server — schema definition, resolvers, context, data sources, error handling, subscriptions, caching, and federation patterns.\",\n category: \"api-graphql\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-graphql-apollo-server\",\n },\n \"api-graphql-mercurius\": {\n id: \"api-graphql-mercurius\",\n slug: \"mercurius\",\n displayName: \"Mercurius\",\n description: \"GraphQL server for Fastify with Mercurius\",\n usageGuidance:\n \"Use when building GraphQL APIs on Fastify with Mercurius — schema definition, resolvers, loaders (DataLoader-like batching), subscriptions, federation, gateway, and Fastify plugin integration.\",\n category: \"api-graphql\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"api-framework-fastify\"],\n needsAny: false,\n reason:\n \"Mercurius is a Fastify plugin — registered via app.register on a Fastify instance\",\n },\n ],\n alternatives: [],\n path: \"skills/api-graphql-mercurius\",\n },\n \"api-graphql-yoga\": {\n id: \"api-graphql-yoga\",\n slug: \"yoga\",\n displayName: \"GraphQL Yoga\",\n description: \"GraphQL server with Yoga v5 and the Envelop plugin system\",\n usageGuidance:\n \"Use when building GraphQL APIs with GraphQL Yoga — schema definition, resolvers, Envelop plugins, subscriptions (SSE/WebSocket), file uploads, error handling, and server framework integration.\",\n category: \"api-graphql\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-graphql-yoga\",\n },\n \"api-messaging-webhooks\": {\n id: \"api-messaging-webhooks\",\n slug: \"webhooks\",\n displayName: \"Webhooks\",\n description: \"Receiving, sending, signature verification, and retry logic\",\n usageGuidance:\n \"Use when implementing webhook endpoints or sending webhooks — signature verification (HMAC), idempotency, retry logic with exponential backoff, payload validation, event routing, and dead letter queues.\",\n category: \"api-messaging\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-messaging-webhooks\",\n },\n \"api-observability-axiom-pino-sentry\": {\n id: \"api-observability-axiom-pino-sentry\",\n slug: \"axiom-pino-sentry\",\n displayName: \"Observability\",\n description: \"Logging and error tracking\",\n usageGuidance:\n \"Use when implementing structured logging, error tracking, or performance monitoring.\",\n category: \"api-observability\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-observability-axiom-pino-sentry\",\n },\n \"api-observability-setup-axiom-pino-sentry\": {\n id: \"api-observability-setup-axiom-pino-sentry\",\n slug: \"setup-axiom-pino-sentry\",\n displayName: \"Observability Setup\",\n description: \"Logging and monitoring setup\",\n usageGuidance: \"Use when setting up Pino logging, Axiom, or Sentry for the first time.\",\n category: \"api-observability\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-meta-framework-nextjs\"],\n needsAny: false,\n reason:\n \"Every pattern is the Next.js wiring — next-axiom, @sentry/nextjs, next.config.ts wrapping, instrumentation.ts; strip the Next slice and nothing followable remains\",\n },\n ],\n alternatives: [],\n path: \"skills/api-observability-setup-axiom-pino-sentry\",\n },\n \"api-performance-api-performance\": {\n id: \"api-performance-api-performance\",\n slug: \"api-performance\",\n displayName: \"Backend Performance\",\n description: \"Query and caching optimization\",\n usageGuidance:\n \"Use when optimizing database queries, implementing caching, or improving API response times.\",\n category: \"api-performance\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-performance-api-performance\",\n },\n \"api-queue-bullmq\": {\n id: \"api-queue-bullmq\",\n slug: \"bullmq\",\n displayName: \"BullMQ\",\n description: \"Job queues and background processing with BullMQ\",\n usageGuidance:\n \"Use when implementing job queues, background processing, or task scheduling with BullMQ -- queue creation, workers, job scheduling, rate limiting, concurrency, flows, events, and Redis connection patterns.\",\n category: \"api-queue\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"api-database-redis\", \"api-database-upstash\"],\n needsAny: true,\n reason:\n \"BullMQ drives a Redis-compatible server over ioredis/TCP (blocking commands, Lua scripts, streams); Upstash documents BullMQ over its TCP endpoint — its REST client cannot drive BullMQ, and the skill carries its own ioredis connection factory\",\n },\n ],\n alternatives: [],\n path: \"skills/api-queue-bullmq\",\n },\n \"api-search-elasticsearch\": {\n id: \"api-search-elasticsearch\",\n slug: \"elasticsearch\",\n displayName: \"Elasticsearch\",\n description: \"Distributed search — full-text, aggregations, vector search\",\n usageGuidance:\n \"Use when building search with Elasticsearch -- full-text search, structured queries, aggregations, vector/semantic search, index management, and bulk operations.\",\n category: \"api-search\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-search-meilisearch\",\n purpose: \"Search Engine\",\n },\n ],\n path: \"skills/api-search-elasticsearch\",\n },\n \"api-search-meilisearch\": {\n id: \"api-search-meilisearch\",\n slug: \"meilisearch\",\n displayName: \"Meilisearch\",\n description: \"Fast, typo-tolerant search with instant results and facets\",\n usageGuidance:\n \"Use when adding search to applications with Meilisearch -- instant typo-tolerant search, faceted filtering, geo search, multi-index search, and real-time document indexing.\",\n category: \"api-search\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-search-elasticsearch\",\n purpose: \"Search Engine\",\n },\n ],\n path: \"skills/api-search-meilisearch\",\n },\n \"api-search-xquik\": {\n id: \"api-search-xquik\",\n slug: \"xquik\",\n displayName: \"Xquik\",\n description: \"X data and automation API\",\n usageGuidance:\n \"Use when integrating Xquik REST endpoints for X post search, user lookup, timelines, media download, monitors, signed webhooks, or approval-gated X actions.\",\n category: \"api-search\",\n author: \"@kriptoburak\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-search-xquik\",\n },\n \"api-specs-openapi\": {\n id: \"api-specs-openapi\",\n slug: \"openapi\",\n displayName: \"OpenAPI\",\n description: \"OpenAPI schema design and client/server code generation\",\n usageGuidance:\n \"Use when designing API contracts with OpenAPI (Swagger) — spec authoring (YAML/JSON), schema definitions, path operations, request/response types, code generation (client/server), validation, and documentation generation.\",\n category: \"api-specs\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/api-specs-openapi\",\n },\n \"api-vector-db-chroma\": {\n id: \"api-vector-db-chroma\",\n slug: \"chroma\",\n displayName: \"Chroma\",\n description: \"Lightweight embedding database with automatic vectorization\",\n usageGuidance:\n \"Use when building semantic search or RAG with Chroma -- collection management, automatic embedding generation, metadata filtering, document storage, and multi-modal embeddings.\",\n category: \"api-vector-db\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-vector-db-pinecone\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-qdrant\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-weaviate\",\n purpose: \"Vector Database\",\n },\n ],\n path: \"skills/api-vector-db-chroma\",\n },\n \"api-vector-db-pinecone\": {\n id: \"api-vector-db-pinecone\",\n slug: \"pinecone\",\n displayName: \"Pinecone\",\n description: \"Serverless vector database for similarity search and RAG\",\n usageGuidance:\n \"Use when building semantic search or RAG with Pinecone -- index management, vector upsert/query, metadata filtering, namespaces, sparse-dense hybrid search, and serverless scaling.\",\n category: \"api-vector-db\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-vector-db-qdrant\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-chroma\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-weaviate\",\n purpose: \"Vector Database\",\n },\n ],\n path: \"skills/api-vector-db-pinecone\",\n },\n \"api-vector-db-qdrant\": {\n id: \"api-vector-db-qdrant\",\n slug: \"qdrant\",\n displayName: \"Qdrant\",\n description: \"Fast vector DB — filtering, payload indexing, quantization\",\n usageGuidance:\n \"Use when building semantic search or RAG with Qdrant -- collection management, vector upsert/search, payload filtering, named vectors, quantization, and recommendation API.\",\n category: \"api-vector-db\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-vector-db-pinecone\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-chroma\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-weaviate\",\n purpose: \"Vector Database\",\n },\n ],\n path: \"skills/api-vector-db-qdrant\",\n },\n \"api-vector-db-weaviate\": {\n id: \"api-vector-db-weaviate\",\n slug: \"weaviate\",\n displayName: \"Weaviate\",\n description: \"Vector database — built-in vectorization and hybrid search\",\n usageGuidance:\n \"Use when building semantic search or RAG with Weaviate — collection management, built-in vectorization modules, hybrid search (vector + keyword), filtering, multi-tenancy, and generative search.\",\n category: \"api-vector-db\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"api-vector-db-pinecone\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-qdrant\",\n purpose: \"Vector Database\",\n },\n {\n skillId: \"api-vector-db-chroma\",\n purpose: \"Vector Database\",\n },\n ],\n path: \"skills/api-vector-db-weaviate\",\n },\n \"cli-framework-cli-commander\": {\n id: \"cli-framework-cli-commander\",\n slug: \"cli-commander\",\n displayName: \"CLI Commander\",\n description: \"CLI dev with Commander.js, clack, picocolors\",\n usageGuidance:\n \"Use when building CLI applications, interactive prompts, wizard flows, or command-line tools with Node.js.\",\n category: \"cli-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"cli-framework-oclif-ink\",\n reason: \"CLI frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"cli-framework-oclif-ink\",\n purpose: \"CLI Framework\",\n },\n ],\n path: \"skills/cli-framework-cli-commander\",\n },\n \"cli-framework-oclif-ink\": {\n id: \"cli-framework-oclif-ink\",\n slug: \"oclif-ink\",\n displayName: \"oclif + Ink\",\n description: \"CLI dev with oclif framework and Ink React\",\n usageGuidance:\n \"Use when building command-line interfaces with oclif framework, React-based terminal UIs with Ink, or integrating both for interactive CLI applications. Triggers: oclif, Ink, @oclif/core, @inkjs/ui, terminal React, CLI commands, useInput, useApp, render(), Command class, Flags, Args.\",\n category: \"cli-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"cli-framework-cli-commander\",\n reason: \"CLI frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"cli-framework-cli-commander\",\n purpose: \"CLI Framework\",\n },\n ],\n path: \"skills/cli-framework-oclif-ink\",\n },\n \"cli-prompts-clack\": {\n id: \"cli-prompts-clack\",\n slug: \"clack\",\n displayName: \"Clack\",\n description: \"Beautiful interactive CLI prompts with @clack/prompts\",\n usageGuidance:\n \"Use when building interactive CLI experiences with @clack/prompts — text input, select, multiselect, confirm, spinner, group prompts, cancellation handling, and themed output. Triggers: @clack/prompts, @clack/core, clack, isCancel, intro, outro, spinner, group, text prompt, select prompt, confirm prompt, multiselect, note, log, tasks, progress bar, taskLog.\",\n category: \"cli-prompts\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/cli-prompts-clack\",\n },\n \"desktop-backend-tauri\": {\n id: \"desktop-backend-tauri\",\n slug: \"tauri-backend\",\n displayName: \"Tauri Rust Backend\",\n description: \"Rust command patterns, state, error handling\",\n usageGuidance:\n \"Use when writing Tauri Rust backend code: defining #[tauri::command] handlers (sync and async), managing state with app.manage() and State<T>, implementing error types with thiserror + serde::Serialize, emitting events from Rust, streaming data via Channel<T>, or testing Rust commands with the mock runtime.\",\n category: \"desktop-backend\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-tauri\"],\n needsAny: false,\n reason: \"tauri::command and State are the tauri crate\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-backend-tauri\",\n },\n \"desktop-framework-electron\": {\n id: \"desktop-framework-electron\",\n slug: \"electron\",\n displayName: \"Electron\",\n description: \"Cross-platform desktop apps with web technologies\",\n usageGuidance:\n \"Use when building desktop applications with Electron, configuring main/renderer process architecture, IPC communication, preload scripts, security hardening, native API integration, or packaging for distribution.\",\n category: \"desktop-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"desktop-framework-tauri\",\n reason: \"Desktop frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"desktop-framework-tauri\",\n purpose: \"Desktop Framework\",\n },\n ],\n path: \"skills/desktop-framework-electron\",\n },\n \"desktop-framework-tauri\": {\n id: \"desktop-framework-tauri\",\n slug: \"tauri\",\n displayName: \"Tauri\",\n description: \"Desktop and mobile apps with system webview and Rust backend\",\n usageGuidance:\n \"Use when building desktop or mobile applications with Tauri 2.x, defining Rust commands and IPC bridge, configuring the permission/capability system, using official plugins, system tray, window management, or packaging for distribution.\",\n category: \"desktop-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"desktop-framework-electron\",\n reason: \"Desktop frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"desktop-framework-electron\",\n purpose: \"Desktop Framework\",\n },\n ],\n path: \"skills/desktop-framework-tauri\",\n },\n \"desktop-ipc-electron\": {\n id: \"desktop-ipc-electron\",\n slug: \"electron-ipc\",\n displayName: \"Electron Type-Safe IPC\",\n description: \"Type-safe Electron IPC patterns\",\n usageGuidance:\n \"Use when implementing type-safe IPC between Electron main and renderer processes, setting up electron-trpc for end-to-end type safety, creating typed channel maps with shared payload types, building typed preload APIs with contextBridge, using MessagePort for high-throughput communication, or implementing utility process IPC.\",\n category: \"desktop-ipc\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"contextBridge/ipcMain are Electron core APIs\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-ipc-electron\",\n },\n \"desktop-mobile-tauri\": {\n id: \"desktop-mobile-tauri\",\n slug: \"tauri-mobile\",\n displayName: \"Tauri Mobile\",\n description: \"Mobile app development with Tauri 2.x\",\n usageGuidance:\n \"Use when building iOS or Android mobile apps with Tauri 2.x, initializing mobile targets, using mobile-specific plugins (biometric, barcode-scanner, NFC, haptics, geolocation), writing platform-specific Swift/Kotlin plugin code, configuring mobile permissions (AndroidManifest.xml, Info.plist), or debugging on mobile devices and emulators.\",\n category: \"desktop-mobile\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-tauri\"],\n needsAny: false,\n reason: \"Tauri mobile targets are the same Tauri project\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-mobile-tauri\",\n },\n \"desktop-multiwindow-electron\": {\n id: \"desktop-multiwindow-electron\",\n slug: \"electron-multiwindow\",\n displayName: \"Electron Multi-Window\",\n description: \"Multi-window, WebContentsView, window lifecycle\",\n usageGuidance:\n \"Use when managing multiple windows or embedded views in Electron: BaseWindow with WebContentsView for tabs/panels/split views, parent/child and modal windows, window registries, inter-window communication via MessagePort, window state persistence, or multi-monitor placement with the screen API.\",\n category: \"desktop-multiwindow\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"BaseWindow and WebContentsView are Electron core APIs\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-multiwindow-electron\",\n },\n \"desktop-multiwindow-tauri\": {\n id: \"desktop-multiwindow-tauri\",\n slug: \"tauri-multiwindow\",\n displayName: \"Tauri Multi-Window & Events\",\n description: \"Multi-window management and event system\",\n usageGuidance:\n \"Use when creating or managing multiple windows in a Tauri 2.x app, communicating between windows via events (emit, emitTo, emit_filter), handling close confirmation, persisting window state, or setting up parent/child and modal window relationships.\",\n category: \"desktop-multiwindow\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-tauri\"],\n needsAny: false,\n reason: \"Tauri 2 event system and WebviewWindow APIs\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-multiwindow-tauri\",\n },\n \"desktop-packaging-electron-forge\": {\n id: \"desktop-packaging-electron-forge\",\n slug: \"electron-forge\",\n displayName: \"Electron Forge\",\n description: \"Electron build toolchain, makers, publishers, signing\",\n usageGuidance:\n \"Use when configuring Electron Forge (forge.config.ts), setting up makers for platform-specific installers, configuring publishers for release distribution, code signing and notarization, Electron Fuses, build hooks, or choosing between Forge and electron-builder.\",\n category: \"desktop-packaging\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"Electron Forge packages Electron apps\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-packaging-electron-forge\",\n },\n \"desktop-packaging-tauri\": {\n id: \"desktop-packaging-tauri\",\n slug: \"tauri-bundling\",\n displayName: \"Tauri Bundling & Distribution\",\n description: \"Bundle config, signing, updater, CI/CD\",\n usageGuidance:\n \"Use when configuring tauri.conf.json bundle settings, building platform-specific installers (NSIS/MSI, DMG, deb/rpm/AppImage), setting up code signing or notarization, configuring the auto-updater with signature verification, optimizing app size, adding sidecar binaries, or creating CI/CD pipelines for cross-platform Tauri builds.\",\n category: \"desktop-packaging\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-tauri\"],\n needsAny: false,\n reason: \"Tauri bundler, signer, and updater configuration\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-packaging-tauri\",\n },\n \"desktop-plugins-tauri\": {\n id: \"desktop-plugins-tauri\",\n slug: \"tauri-plugins\",\n displayName: \"Tauri Plugins\",\n description: \"Official plugin ecosystem and custom plugin development\",\n usageGuidance:\n \"Use when installing, configuring, or using official Tauri 2.x plugins (fs, http, store, dialog, notification, shell, updater, log, sql, stronghold, deep-link, global-shortcut, autostart, clipboard, window-state, barcode-scanner, biometric, single-instance, os, process), or when developing custom plugins with the Rust Builder pattern and optional mobile (Swift/Kotlin) support.\",\n category: \"desktop-plugins\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-tauri\"],\n needsAny: false,\n reason: \"tauri-plugin-* crates and the Tauri 2 ACL model\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-plugins-tauri\",\n },\n \"desktop-security-electron\": {\n id: \"desktop-security-electron\",\n slug: \"electron-security\",\n displayName: \"Electron Security & Fuses\",\n description: \"Electron fuses, ASAR integrity, sandbox hardening\",\n usageGuidance:\n \"Use when hardening an Electron app's security posture: flipping fuses with @electron/fuses, configuring ASAR integrity validation, enforcing sandbox and contextIsolation defaults, setting Content Security Policy, restricting permissions, or validating deep link URLs.\",\n category: \"desktop-security\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"Fuses, ASAR integrity, and sandbox are Electron mechanisms\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-security-electron\",\n },\n \"desktop-security-tauri\": {\n id: \"desktop-security-tauri\",\n slug: \"tauri-security\",\n displayName: \"Tauri Capabilities & ACL\",\n description: \"Deny-by-default security, capabilities, permissions, scopes\",\n usageGuidance:\n \"Use when configuring Tauri 2.x capabilities, permissions, or scopes. Covers capability file structure, window-specific permissions, allow/deny scopes, custom permission definitions, permission sets, remote domain access, debugging permission errors, and migrating from the Tauri 1.x allowlist. Not for Tauri commands, IPC, plugins, or window management (use desktop-framework-tauri).\",\n category: \"desktop-security\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-tauri\"],\n needsAny: false,\n reason: \"Capabilities and permissions are the Tauri 2 security model\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-security-tauri\",\n },\n \"desktop-storage-electron\": {\n id: \"desktop-storage-electron\",\n slug: \"electron-storage\",\n displayName: \"Electron Storage & Credentials\",\n description: \"Persistent storage and credential management\",\n usageGuidance:\n \"Use when persisting user preferences with electron-store, storing structured data with better-sqlite3, encrypting secrets with safeStorage, choosing between storage solutions, or working with app.getPath() storage directories.\",\n category: \"desktop-storage\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"electron-store and safeStorage are Electron-scoped\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-storage-electron\",\n },\n \"desktop-testing-electron\": {\n id: \"desktop-testing-electron\",\n slug: \"electron-testing\",\n displayName: \"Electron Testing\",\n description: \"E2E, unit, and IPC testing for Electron\",\n usageGuidance:\n \"Use when writing E2E tests with Playwright for Electron apps (_electron.launch), unit testing main process code, testing IPC handlers, mocking Electron modules (dialog, BrowserWindow, ipcMain/ipcRenderer), testing preload scripts, running Electron tests in CI (xvfb), or migrating from Spectron.\",\n category: \"desktop-testing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"Playwright's _electron driver automates Electron apps\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-testing-electron\",\n },\n \"desktop-ui-electron\": {\n id: \"desktop-ui-electron\",\n slug: \"electron-ui\",\n displayName: \"Electron Desktop UI\",\n description: \"Frameless windows, custom title bars, tray, menus\",\n usageGuidance:\n \"Use when customizing Electron window appearance (frameless, transparent, vibrancy), building custom title bars with drag regions, positioning macOS traffic lights, creating system tray icons, application/context menus, dock badges, splash screens, kiosk mode, or persisting window state.\",\n category: \"desktop-ui\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"Tray, Menu, and frameless windows are Electron core APIs\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-ui-electron\",\n },\n \"desktop-updates-electron-updater\": {\n id: \"desktop-updates-electron-updater\",\n slug: \"electron-updater\",\n displayName: \"Electron Auto-Updates\",\n description: \"Cross-platform auto-update with electron-updater\",\n usageGuidance:\n \"Use when implementing auto-updates in Electron apps using electron-updater from the electron-builder ecosystem. Covers update providers (GitHub, S3, generic server), update channels (stable/beta/alpha), staged rollouts, differential downloads, manual update control, error handling, and local testing.\",\n category: \"desktop-updates\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"desktop-framework-electron\"],\n needsAny: false,\n reason: \"electron-updater updates packaged Electron apps\",\n },\n ],\n alternatives: [],\n path: \"skills/desktop-updates-electron-updater\",\n },\n \"infra-ci-cd-docker\": {\n id: \"infra-ci-cd-docker\",\n slug: \"docker\",\n displayName: \"Docker\",\n description: \"Docker containerization for development and deployment\",\n usageGuidance:\n \"Use when creating Dockerfiles, docker-compose configs, multi-stage builds, or containerized development environments for Node.js/TypeScript applications.\",\n category: \"infra-containers\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-ci-cd-docker\",\n },\n \"infra-ci-cd-github-actions\": {\n id: \"infra-ci-cd-github-actions\",\n slug: \"github-actions\",\n displayName: \"GitHub Actions\",\n description: \"CI/CD pipelines\",\n usageGuidance:\n \"Use when configuring CI/CD pipelines, GitHub workflows, or deployment automation.\",\n category: \"infra-ci-cd\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-ci-cd-github-actions\",\n },\n \"infra-ci-cd-turborepo-ci\": {\n id: \"infra-ci-cd-turborepo-ci\",\n slug: \"turborepo-ci\",\n displayName: \"Turborepo CI\",\n description: \"CI pipelines with remote caching and affected detection\",\n usageGuidance:\n \"Use when configuring CI/CD for Turborepo monorepos — remote caching, affected detection, task pipelines, parallel execution, and CI provider integration.\",\n category: \"infra-ci-cd\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"shared-monorepo-turborepo\"],\n needsAny: false,\n reason:\n \"Turborepo CI patterns configure turbo.json and the turbo CLI — requires the Turborepo task runner (shared-task-runner)\",\n },\n ],\n alternatives: [],\n path: \"skills/infra-ci-cd-turborepo-ci\",\n },\n \"infra-config-setup-env\": {\n id: \"infra-config-setup-env\",\n slug: \"setup-env\",\n displayName: \"Environment\",\n description: \"Environment variable management\",\n usageGuidance:\n \"Use when setting up environment variables, .env files, or Zod validation for config.\",\n category: \"infra-config\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-config-setup-env\",\n },\n \"infra-containers-kubernetes\": {\n id: \"infra-containers-kubernetes\",\n slug: \"kubernetes\",\n displayName: \"Kubernetes\",\n description: \"Kubernetes manifests, Helm charts, and resource patterns\",\n usageGuidance:\n \"Use when writing Kubernetes manifests, Helm charts, or Kustomize overlays — deployments, services, ingress, configmaps, secrets, RBAC, health checks, resource limits, and scaling patterns.\",\n category: \"infra-containers\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-containers-kubernetes\",\n },\n \"infra-iac-pulumi\": {\n id: \"infra-iac-pulumi\",\n slug: \"pulumi\",\n displayName: \"Pulumi\",\n description: \"TypeScript-native Infrastructure as Code with Pulumi\",\n usageGuidance:\n \"Use when writing Pulumi programs in TypeScript — resource definitions, component resources, stack references, config/secrets, providers, automation API, and deployment workflows.\",\n category: \"infra-iac\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-iac-pulumi\",\n },\n \"infra-iac-sst\": {\n id: \"infra-iac-sst\",\n slug: \"sst\",\n displayName: \"SST\",\n description: \"Serverless Stack (SST) for full-stack TypeScript on AWS\",\n usageGuidance:\n \"Use when building with SST (Ion) — constructs for Lambda, API Gateway, S3, DynamoDB, Aurora, queues, cron jobs, Next.js/Remix/Astro deployments, and live Lambda dev mode.\",\n category: \"infra-iac\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-iac-sst\",\n },\n \"infra-iac-terraform\": {\n id: \"infra-iac-terraform\",\n slug: \"terraform\",\n displayName: \"Terraform\",\n description: \"Infrastructure as Code with HashiCorp Terraform\",\n usageGuidance:\n \"Use when writing Terraform/OpenTofu configurations — HCL syntax, resource definitions, modules, state management, providers, workspaces, and plan/apply workflows.\",\n category: \"infra-iac\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-iac-terraform\",\n },\n \"infra-platform-aws-sdk\": {\n id: \"infra-platform-aws-sdk\",\n slug: \"aws-sdk\",\n displayName: \"AWS SDK\",\n description: \"AWS SDK v3 for TypeScript — S3, DynamoDB, SQS, Lambda\",\n usageGuidance:\n \"Use when integrating AWS services via the AWS SDK v3 for JavaScript/TypeScript — S3 operations, DynamoDB queries, SQS messaging, Lambda invocations, SNS notifications, Secrets Manager, and IAM patterns.\",\n category: \"infra-platform\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-platform-aws-sdk\",\n },\n \"infra-platform-cloudflare-workers\": {\n id: \"infra-platform-cloudflare-workers\",\n slug: \"cloudflare-workers\",\n displayName: \"Cloudflare Workers\",\n description: \"Cloudflare Workers edge compute platform\",\n usageGuidance:\n \"Use when deploying to Cloudflare Workers — Wrangler CLI, KV storage, D1 databases, R2 object storage, Durable Objects, Queues, and edge-first TypeScript patterns.\",\n category: \"infra-platform\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-platform-cloudflare-workers\",\n },\n \"infra-platform-netlify\": {\n id: \"infra-platform-netlify\",\n slug: \"netlify\",\n displayName: \"Netlify\",\n description: \"Deployment platform with serverless and edge functions\",\n usageGuidance:\n \"Use when deploying to Netlify — site configuration, serverless functions, edge functions, redirects/rewrites, forms, environment variables, build plugins, and deployment workflows.\",\n category: \"infra-platform\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-platform-netlify\",\n },\n \"infra-platform-vercel\": {\n id: \"infra-platform-vercel\",\n slug: \"vercel\",\n displayName: \"Vercel\",\n description: \"Vercel deployment platform, edge functions, and middleware\",\n usageGuidance:\n \"Use when deploying to Vercel — project configuration (vercel.json/vercel.ts), serverless and edge functions, Routing Middleware, cron jobs, environment variables, monorepo setup, regions, headers, redirects, rewrites, and deployment workflows.\",\n category: \"infra-platform\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/infra-platform-vercel\",\n },\n \"meta-config-stack-detect\": {\n id: \"meta-config-stack-detect\",\n slug: \"stack-detect\",\n displayName: \"Stack Detection\",\n description: \"Detect a project's stack and propose a config\",\n usageGuidance:\n \"Use when proposing an agents-inc configuration from what is actually in front of you — a codebase to traverse, a stack the user describes in conversation, or nothing but a description of what they want to build. Maps detected libraries to catalog skill ids, offers candidate built-in stacks for the user to pick between when intent is all there is, marks how each assignment loads per the product's preload mapping, surfaces conflicts, and emits a SeedPayload plus a human-readable proposal report for the user to confirm.\",\n category: \"shared-tooling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-config-stack-detect\",\n },\n \"meta-design-composable-components\": {\n id: \"meta-design-composable-components\",\n slug: \"composable-components\",\n displayName: \"Composable Components\",\n description: \"Composable component APIs — parts, state, polymorphism\",\n usageGuidance:\n \"Use when designing a new React component API or aligning an existing one. Apply when a component is accumulating configuration props, booleans, or renderX props, and when adding controlled/uncontrolled duality, polymorphic rendering, data-attribute state, context scoping, or prop and ref forwarding.\",\n category: \"meta-design\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason:\n \"Composition patterns are React surface — base-ui useRender/mergeProps, forwardRef, JSX parts\",\n },\n ],\n alternatives: [],\n path: \"skills/meta-design-composable-components\",\n },\n \"meta-design-expressive-typescript\": {\n id: \"meta-design-expressive-typescript\",\n slug: \"expressive-typescript\",\n displayName: \"Expressive TypeScript\",\n description: \"Readable functional patterns and named abstractions\",\n usageGuidance:\n \"Use when writing or refactoring TypeScript functions, data transformations, store actions, or any code that mixes logic levels. Apply the orchestrator pattern and extract until the code reads like prose.\",\n category: \"meta-design\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-design-expressive-typescript\",\n },\n \"meta-methodology-research-methodology\": {\n id: \"meta-methodology-research-methodology\",\n slug: \"research-methodology\",\n displayName: \"Research\",\n description: \"Codebase investigation\",\n usageGuidance:\n \"Use when investigating codebase patterns, researching implementations, or discovering how things work.\",\n category: \"meta-methodology\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-methodology-research-methodology\",\n },\n \"meta-planning-ai-planning\": {\n id: \"meta-planning-ai-planning\",\n slug: \"ai-planning\",\n displayName: \"AI Planning\",\n description: \"Prompt contracts, model selection, budgets, eval planning\",\n usageGuidance:\n \"Use when a spec touches model calls, prompts, retrieval, tool calling, agentic loops, or evals. Carries the approach-selection, output-contract, budget, failure-mode, and eval frameworks for AI specifications.\",\n category: \"meta-planning\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-planning-ai-planning\",\n },\n \"meta-planning-api-planning\": {\n id: \"meta-planning-api-planning\",\n slug: \"api-planning\",\n displayName: \"API Planning\",\n description: \"Endpoint contracts, schema design, auth and error catalogs\",\n usageGuidance:\n \"Use when a spec touches API endpoints, database schema, middleware, or auth. Carries the endpoint-contract, schema, middleware-pipeline, and error-catalog frameworks for backend specifications.\",\n category: \"meta-planning\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-planning-api-planning\",\n },\n \"meta-planning-cli-planning\": {\n id: \"meta-planning-cli-planning\",\n slug: \"cli-planning\",\n displayName: \"CLI Planning\",\n description: \"Command-surface, flag, exit-code and output-mode planning\",\n usageGuidance:\n \"Use when a spec touches a command surface, an interactive flow, config precedence, exit codes, or output modes. Carries the contract frameworks and per-artifact spec tables for CLI specifications.\",\n category: \"meta-planning\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-planning-cli-planning\",\n },\n \"meta-planning-web-planning\": {\n id: \"meta-planning-web-planning\",\n slug: \"web-planning\",\n displayName: \"Web Planning\",\n description: \"UI-state completeness, component boundaries, spec criteria\",\n usageGuidance:\n \"Use when a spec touches UI components, forms, client state, or user-facing flows. Carries the UI-state completeness, component-boundary, and measurable-criteria frameworks for frontend specifications.\",\n category: \"meta-planning\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-planning-web-planning\",\n },\n \"meta-reviewing-ai-reviewing\": {\n id: \"meta-reviewing-ai-reviewing\",\n slug: \"ai-reviewing\",\n displayName: \"AI Reviewing\",\n description: \"Prompt injection, output validation, and cost control\",\n usageGuidance:\n \"Use when reviewing diffs that touch model API calls, prompt construction, LLM output handling, RAG pipelines, or tool-calling code. Covers injection call-chain tracing, output validation, token budgets, retry/timeout handling, streaming, and key/PII exposure.\",\n category: \"meta-reviewing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-reviewing-ai-reviewing\",\n },\n \"meta-reviewing-api-reviewing\": {\n id: \"meta-reviewing-api-reviewing\",\n slug: \"api-reviewing\",\n displayName: \"API Reviewing\",\n description: \"Injection, boundary validation, authorization, data exposure\",\n usageGuidance:\n \"Use when reviewing diffs that touch API routes, database queries, auth middleware, or server utilities. Covers injection, input validation at boundaries, authn/authz coverage, secret and PII exposure, error leakage, and query patterns.\",\n category: \"meta-reviewing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-reviewing-api-reviewing\",\n },\n \"meta-reviewing-cli-reviewing\": {\n id: \"meta-reviewing-cli-reviewing\",\n slug: \"cli-reviewing\",\n displayName: \"CLI Reviewing\",\n description: \"CLI code review patterns for Commander.js and @clack/prompts\",\n usageGuidance:\n \"Use when reviewing CLI applications built with Commander.js, @clack/prompts, or similar tools. Covers exit codes, signal handling, cancellation, error messages, spinners, and testing adequacy.\",\n category: \"meta-reviewing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-reviewing-cli-reviewing\",\n },\n \"meta-reviewing-infra-reviewing\": {\n id: \"meta-reviewing-infra-reviewing\",\n slug: \"infra-reviewing\",\n displayName: \"Infra Reviewing\",\n description: \"Supply-chain pinning, secret exposure, container hygiene\",\n usageGuidance:\n \"Use when reviewing diffs that touch CI/CD workflows, Dockerfiles, deployment configs, or IaC. Covers action and base-image pinning, secret handling, non-root containers, layer caching, least-privilege permissions, and deployment safety.\",\n category: \"meta-reviewing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-reviewing-infra-reviewing\",\n },\n \"meta-reviewing-reviewing\": {\n id: \"meta-reviewing-reviewing\",\n slug: \"reviewing\",\n displayName: \"Code Review\",\n description: \"Code review guidance\",\n usageGuidance: \"Use when reviewing code, PRs, or making approval/rejection decisions.\",\n category: \"meta-reviewing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/meta-reviewing-reviewing\",\n },\n \"meta-reviewing-web-reviewing\": {\n id: \"meta-reviewing-web-reviewing\",\n slug: \"web-reviewing\",\n displayName: \"Web Reviewing\",\n description: \"React hooks, accessibility, and render performance\",\n usageGuidance:\n \"Use when reviewing diffs that touch UI components - React/JSX files, hooks, props and state, styling, or accessibility. Covers rules of hooks, effect cleanup, render performance, list keys, and ARIA/keyboard patterns.\",\n category: \"meta-reviewing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason:\n \"Checklist self-scopes to React diffs — rules of hooks, dependency arrays, React.memo\",\n },\n ],\n alternatives: [],\n path: \"skills/meta-reviewing-web-reviewing\",\n },\n \"mobile-animation-gesture-handler\": {\n id: \"mobile-animation-gesture-handler\",\n slug: \"gesture-handler\",\n displayName: \"Gesture Handler\",\n description: \"Native gesture system for React Native\",\n usageGuidance:\n \"Use when implementing touch gestures (pan, pinch, tap, rotation, long press, fling, hover), composing multiple gestures on the same view, building swipeable list rows, or replacing React Native's built-in Gesture Responder System.\",\n category: \"mobile-animation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Gesture Handler replaces React Native's gesture system\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-animation-gesture-handler\",\n },\n \"mobile-animation-reanimated\": {\n id: \"mobile-animation-reanimated\",\n slug: \"reanimated\",\n displayName: \"Reanimated\",\n description: \"React Native animations and gestures\",\n usageGuidance:\n \"Use when implementing animations in React Native with Reanimated 4 - shared values, animated styles, spring/timing/decay animations, layout animations, gesture-driven animations, scroll-driven animations, interpolation, or worklet functions.\",\n category: \"mobile-animation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Reanimated animates React Native via worklets\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-animation-reanimated\",\n },\n \"mobile-animation-skia\": {\n id: \"mobile-animation-skia\",\n slug: \"skia\",\n displayName: \"Skia\",\n description: \"GPU-accelerated 2D graphics with Skia\",\n usageGuidance:\n \"Use when implementing custom 2D graphics, shaders, blur effects, path animations, text layout with Paragraph API, sprite batch rendering with Atlas, or GPU-accelerated drawing in React Native using @shopify/react-native-skia.\",\n category: \"mobile-animation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"@shopify/react-native-skia is a React Native renderer\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-animation-skia\",\n },\n \"mobile-background-tasks\": {\n id: \"mobile-background-tasks\",\n slug: \"tasks\",\n displayName: \"Background Tasks\",\n description: \"Background fetch, processing, location\",\n usageGuidance:\n \"Use when implementing background fetch, periodic sync, background location tracking, headless JS tasks, or any work that must execute while the app is backgrounded or terminated.\",\n category: \"mobile-background\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Dual-path: Expo background tasks or react-native-background-fetch\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-background-tasks\",\n },\n \"mobile-camera-vision-camera\": {\n id: \"mobile-camera-vision-camera\",\n slug: \"vision-camera\",\n displayName: \"VisionCamera\",\n description: \"Camera capture, scanning, frame processing\",\n usageGuidance:\n \"Use when implementing camera features with react-native-vision-camera: photo/video capture, QR/barcode scanning, real-time frame processing, zoom/focus/exposure controls, or HDR. Not for image picking from gallery.\",\n category: \"mobile-camera\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"react-native-vision-camera depends on React Native's JSI\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-camera-vision-camera\",\n },\n \"mobile-deep-linking-app-links\": {\n id: \"mobile-deep-linking-app-links\",\n slug: \"app-links\",\n displayName: \"Deep Linking & App Links\",\n description: \"Universal Links, App Links, URI schemes\",\n usageGuidance:\n \"Use when implementing deep linking, Universal Links (iOS), App Links (Android), custom URI schemes, or configuring navigation to handle incoming URLs in React Native.\",\n category: \"mobile-deep-linking\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Deep linking via expo-linking or React Navigation linking config\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-deep-linking-app-links\",\n },\n \"mobile-deployment-eas\": {\n id: \"mobile-deployment-eas\",\n slug: \"eas\",\n displayName: \"EAS\",\n description: \"EAS Build, Update, Submit patterns\",\n usageGuidance:\n \"Use when configuring EAS Build profiles, publishing OTA updates with EAS Update, submitting to app stores with EAS Submit, managing credentials, setting up CI/CD with EAS Workflows, or configuring eas.json for any Expo project.\",\n category: \"mobile-deployment\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-expo\"],\n needsAny: false,\n reason: \"EAS Build/Update workflows assume the Expo SDK\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-deployment-eas\",\n },\n \"mobile-framework-expo\": {\n id: \"mobile-framework-expo\",\n slug: \"expo\",\n displayName: \"Expo\",\n description: \"Expo managed workflow\",\n usageGuidance:\n \"Use when building React Native apps with Expo, configuring EAS builds, or using Expo Router.\",\n category: \"mobile-framework\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\"],\n needsAny: false,\n reason: \"Expo is a React Native framework\",\n },\n ],\n alternatives: [\n {\n skillId: \"mobile-framework-react-native\",\n purpose: \"Mobile\",\n },\n ],\n path: \"skills/mobile-framework-expo\",\n },\n \"mobile-framework-react-native\": {\n id: \"mobile-framework-react-native\",\n slug: \"react-native\",\n displayName: \"React Native\",\n description: \"React Native mobile apps\",\n usageGuidance:\n \"Use when building cross-platform mobile apps, working with native modules, or React Navigation.\",\n category: \"mobile-framework\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason: \"React Native is built on React\",\n },\n ],\n alternatives: [\n {\n skillId: \"mobile-framework-expo\",\n purpose: \"Mobile\",\n },\n ],\n path: \"skills/mobile-framework-react-native\",\n },\n \"mobile-hardware-ble-nfc\": {\n id: \"mobile-hardware-ble-nfc\",\n slug: \"ble-nfc\",\n displayName: \"BLE & NFC\",\n description: \"Bluetooth LE and NFC hardware access\",\n usageGuidance:\n \"Use when implementing BLE scanning, connecting, reading/writing characteristics, or NFC tag reading/writing with react-native-ble-plx and react-native-nfc-manager. Not for classic Bluetooth, peripheral mode, or Wi-Fi Direct.\",\n category: \"mobile-hardware\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Both taught libraries are React Native packages\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-hardware-ble-nfc\",\n },\n \"mobile-navigation-expo-router\": {\n id: \"mobile-navigation-expo-router\",\n slug: \"expo-router\",\n displayName: \"Expo Router\",\n description: \"File-based routing for React Native\",\n usageGuidance:\n \"Use when implementing navigation with Expo Router: file-based routing, layout routes, dynamic/catch-all routes, tab/stack navigation, modal routes, authentication flows with Stack.Protected, API routes, typed routes, deep linking, or static rendering for web.\",\n category: \"mobile-navigation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-expo\"],\n needsAny: false,\n reason: \"Expo Router is built on the Expo SDK\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-navigation-expo-router\",\n },\n \"mobile-navigation-react-navigation\": {\n id: \"mobile-navigation-react-navigation\",\n slug: \"react-navigation\",\n displayName: \"React Navigation\",\n description: \"Type-safe mobile navigation patterns\",\n usageGuidance:\n \"Use when implementing navigation in React Native apps: stack/tab/drawer navigators, deep linking, type-safe navigation with TypeScript, authentication flows, screen preloading, or header customization. Covers both static and dynamic APIs.\",\n category: \"mobile-navigation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"React Navigation targets React Native apps, bare or Expo\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-navigation-react-navigation\",\n },\n \"mobile-notifications-push\": {\n id: \"mobile-notifications-push\",\n slug: \"push\",\n displayName: \"Push Notifications\",\n description: \"Push notification patterns for React Native\",\n usageGuidance:\n \"Use when implementing push notifications (remote or local), requesting notification permissions, handling push tokens, listening for foreground/background/tap events, scheduling local notifications, managing Android channels, or configuring notification categories and actions in React Native.\",\n category: \"mobile-notifications\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Dual-path: expo-notifications or React Native Firebase messaging\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-notifications-push\",\n },\n \"mobile-performance-react-native\": {\n id: \"mobile-performance-react-native\",\n slug: \"react-native-performance\",\n displayName: \"React Native Performance\",\n description: \"RN profiling, optimization, memory\",\n usageGuidance:\n \"Use when profiling React Native performance, optimizing re-renders, improving list scrolling, reducing bundle size, fixing memory leaks, or analyzing JS thread vs UI thread bottlenecks. Not for general React Native component architecture (use mobile-framework-react-native).\",\n category: \"mobile-performance\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"React Native performance patterns: Hermes, threads, FlashList\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-performance-react-native\",\n },\n \"mobile-security-react-native\": {\n id: \"mobile-security-react-native\",\n slug: \"react-native-security\",\n displayName: \"React Native Security\",\n description: \"Mobile app security hardening\",\n usageGuidance:\n \"Use when implementing secure storage, certificate pinning, biometric authentication, jailbreak/root detection, code obfuscation, screenshot prevention, or network security in React Native apps.\",\n category: \"mobile-security\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Dual-path secure storage: expo-secure-store or react-native-keychain\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-security-react-native\",\n },\n \"mobile-storage-mmkv\": {\n id: \"mobile-storage-mmkv\",\n slug: \"mmkv\",\n displayName: \"MMKV\",\n description: \"High-performance key-value storage\",\n usageGuidance:\n \"Use when persisting key-value data in React Native with react-native-mmkv - synchronous reads/writes, encryption, multiple instances, hooks, or migrating from AsyncStorage.\",\n category: \"mobile-storage\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"react-native-mmkv is a React Native storage package\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-storage-mmkv\",\n },\n \"mobile-storage-sqlite-powersync\": {\n id: \"mobile-storage-sqlite-powersync\",\n slug: \"sqlite-powersync\",\n displayName: \"SQLite + PowerSync\",\n description: \"Offline-first SQLite sync engine\",\n usageGuidance:\n \"Use when building offline-first React Native apps with @powersync/react-native - local SQLite database with cloud sync, schema definition, watched queries, CRUD operations, backend connectors, conflict resolution, or attachment handling.\",\n category: \"mobile-storage\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"The skill teaches PowerSync's React Native SDK\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-storage-sqlite-powersync\",\n },\n \"mobile-storage-watermelondb\": {\n id: \"mobile-storage-watermelondb\",\n slug: \"watermelondb\",\n displayName: \"WatermelonDB\",\n description: \"Reactive local database for React Native\",\n usageGuidance:\n \"Use when building offline-first React Native apps with WatermelonDB - schema and model definitions, reactive queries with observe/withObservables, relations, writer/reader actions, batch operations, migrations, or sync with pullChanges/pushChanges.\",\n category: \"mobile-storage\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"WatermelonDB as taught targets offline-first React Native apps\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-storage-watermelondb\",\n },\n \"mobile-styling-nativewind\": {\n id: \"mobile-styling-nativewind\",\n slug: \"nativewind\",\n displayName: \"NativeWind\",\n description: \"Tailwind CSS styling for React Native\",\n usageGuidance:\n \"Use when styling React Native components with Tailwind CSS utility classes via NativeWind, implementing dark mode, theming with CSS variables, platform-specific styles, or integrating className support with third-party components.\",\n category: \"mobile-styling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"NativeWind compiles Tailwind classes for React Native components\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-styling-nativewind\",\n },\n \"mobile-styling-unistyles\": {\n id: \"mobile-styling-unistyles\",\n slug: \"unistyles\",\n displayName: \"Unistyles\",\n description: \"C++ powered React Native styling\",\n usageGuidance:\n \"Use when styling React Native components with Unistyles 3.0: theming with StyleSheet.configure, breakpoints and media queries, variants and compound variants, dynamic functions, runtime values (insets, screen, fontScale), scoped themes, or migrating from Unistyles 2.x.\",\n category: \"mobile-styling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Unistyles styles React Native via Nitro Modules\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-styling-unistyles\",\n },\n \"mobile-testing-detox\": {\n id: \"mobile-testing-detox\",\n slug: \"detox\",\n displayName: \"Detox\",\n description: \"React Native E2E gray-box testing\",\n usageGuidance:\n \"Use when writing end-to-end tests for React Native apps with Detox, configuring .detoxrc.js, using element matchers/actions/expectations, waitFor polling, device API, mocking with Metro, or setting up CI artifacts.\",\n category: \"mobile-testing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"Detox is gray-box E2E testing for React Native\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-testing-detox\",\n },\n \"mobile-testing-maestro\": {\n id: \"mobile-testing-maestro\",\n slug: \"maestro\",\n displayName: \"Maestro\",\n description: \"YAML-based mobile UI testing\",\n usageGuidance:\n \"Use when writing or debugging Maestro YAML flows for mobile E2E testing, working with selectors, flow control, environment variables, Maestro Studio, Maestro Cloud CI, JavaScript expressions, or device interaction commands.\",\n category: \"mobile-testing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"mobile-framework-react-native\",\n \"mobile-framework-expo\",\n \"desktop-mobile-tauri\",\n ],\n needsAny: true,\n reason: \"Maestro drives a mobile app; these are the catalog's mobile-app producers\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-testing-maestro\",\n },\n \"mobile-ui-components-react-native-paper\": {\n id: \"mobile-ui-components-react-native-paper\",\n slug: \"react-native-paper\",\n displayName: \"React Native Paper\",\n description: \"Material Design 3 components for React Native\",\n usageGuidance:\n \"Use when building Material Design UIs with React Native Paper v5+, configuring PaperProvider theming (MD3 light/dark, custom themes, dynamic color), or using Paper components (Button, Card, TextInput, FAB, Appbar, Dialog, Snackbar, SegmentedButtons, BottomNavigation). Not for general React Native patterns.\",\n category: \"mobile-ui-components\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"mobile-framework-react-native\", \"mobile-framework-expo\"],\n needsAny: true,\n reason: \"React Native Paper is Material Design 3 for React Native\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-ui-components-react-native-paper\",\n },\n \"mobile-ui-components-tamagui\": {\n id: \"mobile-ui-components-tamagui\",\n slug: \"tamagui\",\n displayName: \"Tamagui\",\n description: \"Universal UI for React Native and web\",\n usageGuidance:\n \"Use when building universal React Native + web UIs with Tamagui styled components, token system, themes, optimizing compiler, responsive media queries, animations, or Tamagui UI kit components (Sheet, Dialog, Button, Input).\",\n category: \"mobile-ui-components\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"mobile-framework-react-native\",\n \"mobile-framework-expo\",\n \"web-framework-react\",\n ],\n needsAny: true,\n reason: \"Tamagui is universal React: native via RN or Expo, web via React alone\",\n },\n ],\n alternatives: [],\n path: \"skills/mobile-ui-components-tamagui\",\n },\n \"shared-monorepo-nx\": {\n id: \"shared-monorepo-nx\",\n slug: \"nx\",\n displayName: \"Nx\",\n description: \"Nx monorepo build system and task orchestration\",\n usageGuidance:\n \"Use when setting up or working with Nx monorepos — workspace configuration, project graph, task pipelines, caching, generators, and plugins.\",\n category: \"shared-task-runner\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"shared-monorepo-turborepo\",\n reason: \"Monorepo build orchestrators are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"shared-monorepo-turborepo\",\n purpose: \"Monorepo Orchestrator\",\n },\n ],\n path: \"skills/shared-monorepo-nx\",\n },\n \"shared-monorepo-pnpm-workspaces\": {\n id: \"shared-monorepo-pnpm-workspaces\",\n slug: \"pnpm-workspaces\",\n displayName: \"pnpm Workspaces\",\n description: \"pnpm workspace protocol for monorepo management\",\n usageGuidance:\n \"Use when managing monorepos with pnpm — workspace protocol, filtering, shared dependencies, publishConfig, and catalog for version synchronization.\",\n category: \"shared-monorepo\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/shared-monorepo-pnpm-workspaces\",\n },\n \"shared-monorepo-turborepo\": {\n id: \"shared-monorepo-turborepo\",\n slug: \"turborepo\",\n displayName: \"Turborepo\",\n description: \"Monorepo orchestration\",\n usageGuidance:\n \"Use when configuring monorepo pipelines, workspaces, or package architecture.\",\n category: \"shared-task-runner\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"shared-monorepo-nx\",\n reason: \"Monorepo build orchestrators are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"shared-monorepo-nx\",\n purpose: \"Monorepo Orchestrator\",\n },\n ],\n path: \"skills/shared-monorepo-turborepo\",\n },\n \"shared-security-auth-security\": {\n id: \"shared-security-auth-security\",\n slug: \"auth-security\",\n displayName: \"Security\",\n description: \"Application security patterns\",\n usageGuidance:\n \"Use when implementing authentication, authorization, XSS prevention, CSRF protection, CSP headers, or managing secrets.\",\n category: \"shared-security\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/shared-security-auth-security\",\n },\n \"shared-tooling-biome\": {\n id: \"shared-tooling-biome\",\n slug: \"biome\",\n displayName: \"Biome\",\n description: \"Biome unified linter and formatter\",\n usageGuidance:\n \"Use when configuring Biome as an all-in-one linter, formatter, and import organizer — replacing ESLint and Prettier with a single fast tool.\",\n category: \"shared-lint\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"shared-tooling-eslint-prettier\",\n reason: \"Linting and formatting tools are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"shared-tooling-eslint-prettier\",\n purpose: \"Linting / Formatting\",\n },\n ],\n path: \"skills/shared-tooling-biome\",\n },\n \"shared-tooling-changesets\": {\n id: \"shared-tooling-changesets\",\n slug: \"changesets\",\n displayName: \"Changesets\",\n description: \"Versioning and changelog management with Changesets\",\n usageGuidance:\n \"Use when managing package versioning and changelogs with @changesets/cli — adding changesets, version bumping, changelog generation, monorepo publishing, pre-release modes, and CI automation.\",\n category: \"shared-tooling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/shared-tooling-changesets\",\n },\n \"shared-tooling-eslint-prettier\": {\n id: \"shared-tooling-eslint-prettier\",\n slug: \"eslint-prettier\",\n displayName: \"ESLint & Prettier\",\n description: \"ESLint 9/10 flat config and Prettier formatting\",\n usageGuidance:\n \"Use when configuring ESLint 9 flat config, Prettier formatting, shared linting configs, or migrating from legacy .eslintrc to flat config.\",\n category: \"shared-lint\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"shared-tooling-biome\",\n reason: \"Linting and formatting tools are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"shared-tooling-biome\",\n purpose: \"Linting / Formatting\",\n },\n ],\n path: \"skills/shared-tooling-eslint-prettier\",\n },\n \"shared-tooling-git-hooks\": {\n id: \"shared-tooling-git-hooks\",\n slug: \"git-hooks\",\n displayName: \"Git Hooks\",\n description: \"Husky, lint-staged, commitlint\",\n usageGuidance:\n \"Use when setting up pre-commit hooks with Husky, configuring lint-staged for staged file linting, or adding commitlint for conventional commits.\",\n category: \"shared-tooling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/shared-tooling-git-hooks\",\n },\n \"shared-tooling-typescript-config\": {\n id: \"shared-tooling-typescript-config\",\n slug: \"typescript-config\",\n displayName: \"TypeScript Config\",\n description: \"Shared TypeScript strict configs\",\n usageGuidance:\n \"Use when configuring TypeScript strict mode, shared tsconfig patterns, path aliases, or TS 5.x module settings.\",\n category: \"shared-tooling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/shared-tooling-typescript-config\",\n },\n \"web-3d-react-three-fiber\": {\n id: \"web-3d-react-three-fiber\",\n slug: \"react-three-fiber\",\n displayName: \"React Three Fiber\",\n description: \"3D rendering with React Three Fiber and Three.js\",\n usageGuidance:\n \"Use when building 3D experiences with React Three Fiber (R3F) — scene setup, meshes, materials, lights, cameras, animations, physics (rapier), post-processing, performance optimization, and interaction/events.\",\n category: \"web-3d\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"React Three Fiber is a React renderer for Three.js\",\n },\n ],\n alternatives: [],\n path: \"skills/web-3d-react-three-fiber\",\n },\n \"web-accessibility-web-accessibility\": {\n id: \"web-accessibility-web-accessibility\",\n slug: \"web-accessibility\",\n displayName: \"Accessibility\",\n description: \"WCAG accessibility patterns\",\n usageGuidance:\n \"Use when implementing WCAG compliance, ARIA attributes, or keyboard navigation.\",\n category: \"web-accessibility\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-accessibility-web-accessibility\",\n },\n \"web-animation-css-animations\": {\n id: \"web-animation-css-animations\",\n slug: \"css-animations\",\n displayName: \"CSS Animations\",\n description: \"Native CSS animations\",\n usageGuidance:\n \"Use when implementing CSS transitions, keyframes, or scroll-driven animations.\",\n category: \"web-animation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-animation-framer-motion\",\n purpose: \"Animation\",\n },\n {\n skillId: \"web-animation-view-transitions\",\n purpose: \"Animation\",\n },\n ],\n path: \"skills/web-animation-css-animations\",\n },\n \"web-animation-framer-motion\": {\n id: \"web-animation-framer-motion\",\n slug: \"framer-motion\",\n displayName: \"Motion\",\n description: \"Motion animation library\",\n usageGuidance: \"Use when animating React components with Motion (Framer Motion).\",\n category: \"web-animation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Motion (Framer Motion) is a React animation library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-animation-css-animations\",\n purpose: \"Animation\",\n },\n {\n skillId: \"web-animation-view-transitions\",\n purpose: \"Animation\",\n },\n ],\n path: \"skills/web-animation-framer-motion\",\n },\n \"web-animation-view-transitions\": {\n id: \"web-animation-view-transitions\",\n slug: \"view-transitions\",\n displayName: \"View Transitions\",\n description: \"Page transition animations\",\n usageGuidance: \"Use when implementing page transitions with View Transitions API.\",\n category: \"web-animation\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-animation-framer-motion\",\n purpose: \"Animation\",\n },\n {\n skillId: \"web-animation-css-animations\",\n purpose: \"Animation\",\n },\n ],\n path: \"skills/web-animation-view-transitions\",\n },\n \"web-data-fetching-graphql-apollo\": {\n id: \"web-data-fetching-graphql-apollo\",\n slug: \"graphql-apollo\",\n displayName: \"Apollo Client\",\n description: \"Apollo GraphQL client\",\n usageGuidance: \"Use when working with Apollo Client for GraphQL queries and mutations.\",\n category: \"web-graphql-client\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Skill teaches React Apollo Client patterns\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-data-fetching-graphql-urql\",\n purpose: \"GraphQL Client\",\n },\n ],\n path: \"skills/web-data-fetching-graphql-apollo\",\n },\n \"web-data-fetching-graphql-urql\": {\n id: \"web-data-fetching-graphql-urql\",\n slug: \"graphql-urql\",\n displayName: \"URQL\",\n description: \"URQL GraphQL client\",\n usageGuidance: \"Use when working with URQL client for GraphQL.\",\n category: \"web-graphql-client\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-framework-vue-composition-api\",\n \"web-framework-solidjs\",\n \"web-framework-svelte\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"web-meta-framework-nuxt\",\n \"web-meta-framework-sveltekit\",\n ],\n needsAny: true,\n reason: \"URQL supports React, Vue, Solid, and Svelte\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-data-fetching-graphql-apollo\",\n purpose: \"GraphQL Client\",\n },\n ],\n path: \"skills/web-data-fetching-graphql-urql\",\n },\n \"web-data-fetching-swr\": {\n id: \"web-data-fetching-swr\",\n slug: \"swr\",\n displayName: \"SWR\",\n description: \"Server state and caching\",\n usageGuidance: \"Use when implementing stale-while-revalidate data fetching patterns.\",\n category: \"web-server-state\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-server-state-react-query\",\n reason: \"Both solve server state caching\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"mobile-framework-react-native\",\n ],\n needsAny: true,\n reason: \"SWR is a React Hooks library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-server-state-react-query\",\n purpose: \"Server State / Data Fetching\",\n },\n {\n skillId: \"web-data-fetching-trpc\",\n purpose: \"Server State / Data Fetching\",\n },\n ],\n path: \"skills/web-data-fetching-swr\",\n },\n \"web-data-fetching-trpc\": {\n id: \"web-data-fetching-trpc\",\n slug: \"trpc\",\n displayName: \"tRPC\",\n description: \"Type-safe API layer\",\n usageGuidance: \"Use when building type-safe APIs with tRPC procedures and React Query.\",\n category: \"web-rpc\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Skill teaches React Query integration patterns\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-server-state-react-query\",\n purpose: \"Server State / Data Fetching\",\n },\n {\n skillId: \"web-data-fetching-swr\",\n purpose: \"Server State / Data Fetching\",\n },\n ],\n path: \"skills/web-data-fetching-trpc\",\n },\n \"web-dataviz-d3\": {\n id: \"web-dataviz-d3\",\n slug: \"d3\",\n displayName: \"D3.js\",\n description: \"Data-driven visualizations with D3.js\",\n usageGuidance:\n \"Use when building custom data visualizations with D3.js — selections, data joins, scales, axes, shapes, transitions, force layouts, geographic projections, and integrating D3 with component frameworks.\",\n category: \"web-dataviz\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-dataviz-d3\",\n },\n \"web-dataviz-recharts\": {\n id: \"web-dataviz-recharts\",\n slug: \"recharts\",\n displayName: \"Recharts\",\n description: \"Composable chart components with Recharts\",\n usageGuidance:\n \"Use when building charts and data visualizations with Recharts — line charts, bar charts, area charts, pie charts, scatter plots, composed charts, responsive containers, custom tooltips, animations, and real-time data updates.\",\n category: \"web-dataviz\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Recharts wraps D3 in composable React components\",\n },\n ],\n alternatives: [],\n path: \"skills/web-dataviz-recharts\",\n },\n \"web-dnd-dnd-kit\": {\n id: \"web-dnd-dnd-kit\",\n slug: \"dnd-kit\",\n displayName: \"dnd-kit\",\n description: \"Drag and drop toolkit with @dnd-kit\",\n usageGuidance:\n \"Use when implementing drag and drop with @dnd-kit — sortable lists, Kanban boards, droppable containers, drag overlays, collision detection, keyboard/screen reader accessibility, and multi-container sorting.\",\n category: \"web-dnd\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason:\n \"The skill teaches DndContext/useDraggable/useDroppable/useSortable — @dnd-kit React packages throughout\",\n },\n ],\n alternatives: [],\n path: \"skills/web-dnd-dnd-kit\",\n },\n \"web-editor-lexical\": {\n id: \"web-editor-lexical\",\n slug: \"lexical\",\n displayName: \"Lexical\",\n description: \"Extensible text editor framework by Meta with Lexical\",\n usageGuidance:\n \"Use when building rich text editors with Lexical — editor setup, nodes, plugins, commands, decorators, collaboration, serialization, and custom toolbar/menu creation.\",\n category: \"web-editor\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason:\n \"The skill's only editor setup and plugin registration path is @lexical/react — LexicalComposer plus useEffect registration\",\n },\n ],\n alternatives: [],\n path: \"skills/web-editor-lexical\",\n },\n \"web-editor-tiptap\": {\n id: \"web-editor-tiptap\",\n slug: \"tiptap\",\n displayName: \"TipTap\",\n description: \"Rich text editor framework with TipTap and ProseMirror\",\n usageGuidance:\n \"Use when building rich text editors with TipTap — editor setup, extensions, custom nodes/marks, menus (bubble/floating), collaborative editing, content serialization, keyboard shortcuts, and schema customization.\",\n category: \"web-editor\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-editor-tiptap\",\n },\n \"web-error-handling-error-boundaries\": {\n id: \"web-error-handling-error-boundaries\",\n slug: \"error-boundaries\",\n displayName: \"Error Boundaries\",\n description: \"Error UI handling\",\n usageGuidance: \"Use when implementing React error boundaries, fallback UIs, or retry logic.\",\n category: \"web-error-handling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Error boundaries are a React concept\",\n },\n ],\n alternatives: [],\n path: \"skills/web-error-handling-error-boundaries\",\n },\n \"web-error-handling-result-types\": {\n id: \"web-error-handling-result-types\",\n slug: \"result-types\",\n displayName: \"Result Types\",\n description: \"Type-safe error handling\",\n usageGuidance: \"Use when implementing Result/Either types for type-safe error handling.\",\n category: \"web-error-handling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-error-handling-result-types\",\n },\n \"web-files-file-upload-patterns\": {\n id: \"web-files-file-upload-patterns\",\n slug: \"file-upload-patterns\",\n displayName: \"File Upload\",\n description: \"File upload handling\",\n usageGuidance: \"Use when implementing file uploads, drag-drop, or chunked uploads.\",\n category: \"web-file-upload\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Skill teaches React-based file upload patterns\",\n },\n ],\n alternatives: [],\n path: \"skills/web-files-file-upload-patterns\",\n },\n \"web-files-image-handling\": {\n id: \"web-files-image-handling\",\n slug: \"image-handling\",\n displayName: \"Image Handling\",\n description: \"Client-side image processing\",\n usageGuidance: \"Use when processing images client-side, resizing, or format conversion.\",\n category: \"web-files\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Skill teaches React-based image handling hooks\",\n },\n ],\n alternatives: [],\n path: \"skills/web-files-image-handling\",\n },\n \"web-forms-react-hook-form\": {\n id: \"web-forms-react-hook-form\",\n slug: \"react-hook-form\",\n displayName: \"React Hook Form\",\n description: \"React form handling\",\n usageGuidance:\n \"Use when building forms in React with validation, field arrays, or Controller.\",\n category: \"web-form-library\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"mobile-framework-react-native\",\n ],\n needsAny: true,\n reason: \"React Hook Form is React only\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-forms-tanstack-form\",\n purpose: \"Forms (React)\",\n },\n ],\n path: \"skills/web-forms-react-hook-form\",\n },\n \"web-forms-tanstack-form\": {\n id: \"web-forms-tanstack-form\",\n slug: \"tanstack-form\",\n displayName: \"TanStack Form\",\n description: \"Type-safe, headless form management\",\n usageGuidance:\n \"Use when building forms with TanStack Form — type-safe, framework-agnostic form state, validation, and submission.\",\n category: \"web-form-library\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-framework-vue-composition-api\",\n \"web-framework-angular-standalone\",\n \"web-framework-solidjs\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"web-meta-framework-nuxt\",\n ],\n needsAny: true,\n reason: \"TanStack Form requires a UI framework\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-forms-react-hook-form\",\n purpose: \"Forms (React)\",\n },\n {\n skillId: \"web-forms-vee-validate\",\n purpose: \"Forms (Vue)\",\n },\n ],\n path: \"skills/web-forms-tanstack-form\",\n },\n \"web-forms-vee-validate\": {\n id: \"web-forms-vee-validate\",\n slug: \"vee-validate\",\n displayName: \"VeeValidate\",\n description: \"Vue form validation\",\n usageGuidance: \"Use when building forms in Vue with useForm, useField, or schema validation.\",\n category: \"web-form-library\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-vue-composition-api\", \"web-meta-framework-nuxt\"],\n needsAny: true,\n reason: \"VeeValidate is Vue only\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-forms-tanstack-form\",\n purpose: \"Forms (Vue)\",\n },\n ],\n path: \"skills/web-forms-vee-validate\",\n },\n \"web-forms-zod-validation\": {\n id: \"web-forms-zod-validation\",\n slug: \"zod-validation\",\n displayName: \"Zod\",\n description: \"Schema validation\",\n usageGuidance: \"Use when defining validation schemas, type inference, or data transforms.\",\n category: \"web-forms\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-forms-zod-validation\",\n },\n \"web-framework-angular-standalone\": {\n id: \"web-framework-angular-standalone\",\n slug: \"angular-standalone\",\n displayName: \"Angular\",\n description: \"Angular standalone components\",\n usageGuidance:\n \"Use when building Angular 17+ apps with standalone components, signals, or DI.\",\n category: \"web-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-framework-react\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-vue-composition-api\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-solidjs\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-svelte\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-framework-react\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-vue-composition-api\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-solidjs\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-svelte\",\n purpose: \"Base Framework\",\n },\n ],\n path: \"skills/web-framework-angular-standalone\",\n },\n \"web-framework-react\": {\n id: \"web-framework-react\",\n slug: \"react\",\n displayName: \"React\",\n description: \"React component patterns\",\n usageGuidance: \"Use when building React components, hooks, or following React 19 patterns.\",\n category: \"web-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-framework-vue-composition-api\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-solidjs\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-svelte\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-framework-vue-composition-api\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-solidjs\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-svelte\",\n purpose: \"Base Framework\",\n },\n ],\n path: \"skills/web-framework-react\",\n },\n \"web-framework-solidjs\": {\n id: \"web-framework-solidjs\",\n slug: \"solidjs\",\n displayName: \"SolidJS\",\n description: \"SolidJS reactive patterns\",\n usageGuidance: \"Use when building SolidJS apps with signals, effects, or SolidStart.\",\n category: \"web-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-framework-react\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-vue-composition-api\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-svelte\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-framework-react\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-vue-composition-api\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-svelte\",\n purpose: \"Base Framework\",\n },\n ],\n path: \"skills/web-framework-solidjs\",\n },\n \"web-framework-svelte\": {\n id: \"web-framework-svelte\",\n slug: \"svelte\",\n displayName: \"Svelte\",\n description: \"Svelte 5 with Runes reactivity\",\n usageGuidance:\n \"Use when building Svelte 5 apps with Runes ($state, $derived, $effect), components, or snippets.\",\n category: \"web-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-framework-react\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-vue-composition-api\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-solidjs\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-framework-react\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-vue-composition-api\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-solidjs\",\n purpose: \"Base Framework\",\n },\n ],\n path: \"skills/web-framework-svelte\",\n },\n \"web-framework-vue-composition-api\": {\n id: \"web-framework-vue-composition-api\",\n slug: \"vue-composition-api\",\n displayName: \"Vue\",\n description: \"Vue 3 Composition API\",\n usageGuidance:\n \"Use when building Vue 3 apps with Composition API, composables, or reactivity.\",\n category: \"web-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-framework-react\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-solidjs\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-framework-svelte\",\n reason: \"Base frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-framework-react\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-angular-standalone\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-solidjs\",\n purpose: \"Base Framework\",\n },\n {\n skillId: \"web-framework-svelte\",\n purpose: \"Base Framework\",\n },\n ],\n path: \"skills/web-framework-vue-composition-api\",\n },\n \"web-i18n-next-intl\": {\n id: \"web-i18n-next-intl\",\n slug: \"next-intl\",\n displayName: \"next-intl\",\n description: \"Next.js internationalization\",\n usageGuidance: \"Use when implementing i18n in Next.js with next-intl.\",\n category: \"web-i18n\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-i18n-react-intl\",\n reason: \"React internationalization libraries are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-meta-framework-nextjs\"],\n needsAny: false,\n reason:\n \"Skill teaches next-intl's Next.js App Router surface — middleware, routing.ts, setRequestLocale, NextIntlClientProvider\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-i18n-react-intl\",\n purpose: \"Internationalization (React)\",\n },\n ],\n path: \"skills/web-i18n-next-intl\",\n },\n \"web-i18n-react-intl\": {\n id: \"web-i18n-react-intl\",\n slug: \"react-intl\",\n displayName: \"React Intl\",\n description: \"React internationalization\",\n usageGuidance: \"Use when implementing i18n in React with FormatJS/react-intl.\",\n category: \"web-i18n\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-i18n-next-intl\",\n reason: \"React internationalization libraries are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"React Intl (FormatJS) is React only\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-i18n-next-intl\",\n purpose: \"Internationalization (React)\",\n },\n ],\n path: \"skills/web-i18n-react-intl\",\n },\n \"web-i18n-vue-i18n\": {\n id: \"web-i18n-vue-i18n\",\n slug: \"vue-i18n\",\n displayName: \"Vue I18n\",\n description: \"Vue internationalization\",\n usageGuidance: \"Use when implementing i18n in Vue with vue-i18n.\",\n category: \"web-i18n\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-vue-composition-api\", \"web-meta-framework-nuxt\"],\n needsAny: true,\n reason: \"vue-i18n is Vue 3 only\",\n },\n ],\n alternatives: [],\n path: \"skills/web-i18n-vue-i18n\",\n },\n \"web-maps-leaflet\": {\n id: \"web-maps-leaflet\",\n slug: \"leaflet\",\n displayName: \"Leaflet\",\n description: \"Lightweight interactive maps with Leaflet\",\n usageGuidance:\n \"Use when building interactive maps with Leaflet -- map initialization, tile layers, markers, popups, GeoJSON, custom controls, plugins, marker clustering, and event handling.\",\n category: \"web-maps\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-maps-leaflet\",\n },\n \"web-maps-mapbox\": {\n id: \"web-maps-mapbox\",\n slug: \"mapbox\",\n displayName: \"Mapbox GL JS\",\n description: \"Interactive maps with Mapbox GL JS\",\n usageGuidance:\n \"Use when building interactive maps with Mapbox GL JS — map initialization, markers, popups, layers, sources, expressions, geocoding, directions, clustering, 3D terrain, and style customization.\",\n category: \"web-maps\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-maps-mapbox\",\n },\n \"web-meta-framework-astro\": {\n id: \"web-meta-framework-astro\",\n slug: \"astro\",\n displayName: \"Astro\",\n description: \"Astro content-first framework\",\n usageGuidance:\n \"Use when building Astro sites with islands architecture, content collections, or hybrid rendering.\",\n category: \"web-meta-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-meta-framework-nextjs\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-meta-framework-nextjs\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n purpose: \"Meta-Framework\",\n },\n ],\n path: \"skills/web-meta-framework-astro\",\n },\n \"web-meta-framework-docusaurus\": {\n id: \"web-meta-framework-docusaurus\",\n slug: \"docusaurus\",\n displayName: \"Docusaurus\",\n description: \"Docusaurus 3.x documentation site framework\",\n usageGuidance:\n \"Use when building or maintaining documentation sites with Docusaurus 3.x — configuring docs/blog plugins, sidebars, versioning, MDX content, swizzling theme components, or deploying static builds.\",\n category: \"web-docs\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-meta-framework-vitepress\",\n purpose: \"Documentation Framework\",\n },\n ],\n path: \"skills/web-meta-framework-docusaurus\",\n },\n \"web-meta-framework-nextjs\": {\n id: \"web-meta-framework-nextjs\",\n slug: \"nextjs\",\n displayName: \"Next.js\",\n description: \"Next.js full-stack framework\",\n usageGuidance:\n \"Use when building Next.js apps with App Router, Server/Client Components, Server Actions, or streaming.\",\n category: \"web-meta-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-meta-framework-remix\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason: \"Next.js is built on React\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-meta-framework-remix\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n purpose: \"Meta-Framework\",\n },\n ],\n path: \"skills/web-meta-framework-nextjs\",\n },\n \"web-meta-framework-nuxt\": {\n id: \"web-meta-framework-nuxt\",\n slug: \"nuxt\",\n displayName: \"Nuxt\",\n description: \"Nuxt full-stack framework\",\n usageGuidance: \"Use when building Nuxt apps with useFetch, useState, or server routes.\",\n category: \"web-meta-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-meta-framework-nextjs\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-vue-composition-api\"],\n needsAny: false,\n reason: \"Nuxt is built on Vue\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-meta-framework-nextjs\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n purpose: \"Meta-Framework\",\n },\n ],\n path: \"skills/web-meta-framework-nuxt\",\n },\n \"web-meta-framework-qwik\": {\n id: \"web-meta-framework-qwik\",\n slug: \"qwik\",\n displayName: \"Qwik\",\n description: \"Resumable framework with zero hydration and lazy loading\",\n usageGuidance:\n \"Use when building web apps that need instant interactivity — resumability eliminates hydration, $ suffixed functions mark lazy boundaries, and Qwik City provides file-based routing with server loaders and actions.\",\n category: \"web-meta-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-meta-framework-nextjs\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-meta-framework-nextjs\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n purpose: \"Meta-Framework\",\n },\n ],\n path: \"skills/web-meta-framework-qwik\",\n },\n \"web-meta-framework-remix\": {\n id: \"web-meta-framework-remix\",\n slug: \"remix\",\n displayName: \"Remix\",\n description: \"Remix full-stack framework\",\n usageGuidance: \"Use when building Remix apps with loaders, actions, or useFetcher.\",\n category: \"web-meta-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-meta-framework-nextjs\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason: \"Remix is built on React\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-meta-framework-nextjs\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-sveltekit\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n purpose: \"Meta-Framework\",\n },\n ],\n path: \"skills/web-meta-framework-remix\",\n },\n \"web-meta-framework-sveltekit\": {\n id: \"web-meta-framework-sveltekit\",\n slug: \"sveltekit\",\n displayName: \"SvelteKit\",\n description: \"SvelteKit full-stack framework\",\n usageGuidance:\n \"Use when building SvelteKit apps with load functions, form actions, or server hooks.\",\n category: \"web-meta-framework\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-meta-framework-nextjs\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n reason: \"Meta-frameworks are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-svelte\"],\n needsAny: false,\n reason: \"SvelteKit is built on Svelte\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-meta-framework-nextjs\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-remix\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-nuxt\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-astro\",\n purpose: \"Meta-Framework\",\n },\n {\n skillId: \"web-meta-framework-qwik\",\n purpose: \"Meta-Framework\",\n },\n ],\n path: \"skills/web-meta-framework-sveltekit\",\n },\n \"web-meta-framework-vitepress\": {\n id: \"web-meta-framework-vitepress\",\n slug: \"vitepress\",\n displayName: \"VitePress\",\n description: \"VitePress documentation site generator\",\n usageGuidance:\n \"Use when building documentation sites with VitePress — configuring navigation, extending themes, writing data loaders, and customizing markdown rendering.\",\n category: \"web-docs\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-meta-framework-docusaurus\",\n purpose: \"Documentation Framework\",\n },\n ],\n path: \"skills/web-meta-framework-vitepress\",\n },\n \"web-mocks-msw\": {\n id: \"web-mocks-msw\",\n slug: \"msw\",\n displayName: \"MSW\",\n description: \"API mocking\",\n usageGuidance: \"Use when mocking APIs for development or testing with MSW handlers.\",\n category: \"web-mocking\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-mocks-msw\",\n },\n \"web-performance-web-performance\": {\n id: \"web-performance-web-performance\",\n slug: \"web-performance\",\n displayName: \"Frontend Performance\",\n description: \"Bundle and render optimization\",\n usageGuidance:\n \"Use when optimizing bundle size, render performance, or implementing memoization.\",\n category: \"web-performance\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-performance-web-performance\",\n },\n \"web-pwa-offline-first\": {\n id: \"web-pwa-offline-first\",\n slug: \"offline-first\",\n displayName: \"Offline First\",\n description: \"Offline-first patterns\",\n usageGuidance: \"Use when building offline-first apps with IndexedDB or sync queues.\",\n category: \"web-pwa\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-pwa-offline-first\",\n },\n \"web-pwa-service-workers\": {\n id: \"web-pwa-service-workers\",\n slug: \"service-workers\",\n displayName: \"Service Workers\",\n description: \"Offline caching strategies\",\n usageGuidance:\n \"Use when implementing service workers, caching strategies, or offline support.\",\n category: \"web-pwa\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-pwa-service-workers\",\n },\n \"web-realtime-socket-io\": {\n id: \"web-realtime-socket-io\",\n slug: \"socket-io\",\n displayName: \"Socket.IO\",\n description: \"Bidirectional real-time communication\",\n usageGuidance: \"Use when implementing Socket.IO client connections, rooms, or namespaces.\",\n category: \"web-realtime\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-realtime-websockets\",\n purpose: \"Realtime\",\n },\n {\n skillId: \"web-realtime-sse\",\n purpose: \"Realtime\",\n },\n ],\n path: \"skills/web-realtime-socket-io\",\n },\n \"web-realtime-sse\": {\n id: \"web-realtime-sse\",\n slug: \"sse\",\n displayName: \"Server-Sent Events\",\n description: \"Server-to-client streaming\",\n usageGuidance: \"Use when implementing Server-Sent Events for server-to-client streaming.\",\n category: \"web-streaming\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-realtime-websockets\",\n purpose: \"Realtime\",\n },\n {\n skillId: \"web-realtime-socket-io\",\n purpose: \"Realtime\",\n },\n ],\n path: \"skills/web-realtime-sse\",\n },\n \"web-realtime-websockets\": {\n id: \"web-realtime-websockets\",\n slug: \"websockets\",\n displayName: \"WebSockets\",\n description: \"Bidirectional real-time communication\",\n usageGuidance:\n \"Use when implementing WebSocket connections, reconnection, or message handling.\",\n category: \"web-realtime\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-realtime-socket-io\",\n purpose: \"Realtime\",\n },\n {\n skillId: \"web-realtime-sse\",\n purpose: \"Realtime\",\n },\n ],\n path: \"skills/web-realtime-websockets\",\n },\n \"web-routing-react-router\": {\n id: \"web-routing-react-router\",\n slug: \"react-router\",\n displayName: \"React Router\",\n description: \"Client-side and server-side routing for React applications\",\n usageGuidance:\n \"Use when building React apps with client-side routing — nested routes, loaders, actions, error boundaries, lazy loading, and URL-based state.\",\n category: \"web-routing\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-routing-tanstack-router\",\n reason: \"React client-side routers are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason:\n \"React Router v7 Data Mode SPA skill — createBrowserRouter/RouterProvider are framework-owned (wrong) inside a Remix framework-mode app\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-routing-tanstack-router\",\n purpose: \"Routing (React)\",\n },\n ],\n path: \"skills/web-routing-react-router\",\n },\n \"web-routing-tanstack-router\": {\n id: \"web-routing-tanstack-router\",\n slug: \"tanstack-router\",\n displayName: \"TanStack Router\",\n description: \"Type-safe client-side routing for React\",\n usageGuidance:\n \"Use when building React SPAs with type-safe routing — file-based routes, search params validation, route loaders, code splitting, and nested layouts.\",\n category: \"web-routing\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-routing-react-router\",\n reason: \"React client-side routers are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason: \"TanStack Router is a React routing library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-routing-react-router\",\n purpose: \"Routing (React)\",\n },\n ],\n path: \"skills/web-routing-tanstack-router\",\n },\n \"web-server-state-react-query\": {\n id: \"web-server-state-react-query\",\n slug: \"react-query\",\n displayName: \"React Query\",\n description: \"Server state and caching\",\n usageGuidance:\n \"Use when fetching API data with React Query, wiring typed clients generated from an API schema, or configuring query caching and error handling.\",\n category: \"web-server-state\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-data-fetching-swr\",\n reason: \"Both solve server state caching\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"mobile-framework-react-native\",\n ],\n needsAny: true,\n reason: \"TanStack Query's React adapter\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-data-fetching-swr\",\n purpose: \"Server State / Data Fetching\",\n },\n {\n skillId: \"web-data-fetching-trpc\",\n purpose: \"Server State / Data Fetching\",\n },\n ],\n path: \"skills/web-server-state-react-query\",\n },\n \"web-state-jotai\": {\n id: \"web-state-jotai\",\n slug: \"jotai\",\n displayName: \"Jotai\",\n description: \"Atomic client state\",\n usageGuidance: \"Use when managing atomic state with bottom-up composition.\",\n category: \"web-client-state\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-state-zustand\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-redux-toolkit\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-mobx\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"mobile-framework-react-native\",\n ],\n needsAny: true,\n reason: \"Jotai is a React atomic state library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-state-zustand\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-redux-toolkit\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-mobx\",\n purpose: \"Client State (React)\",\n },\n ],\n path: \"skills/web-state-jotai\",\n },\n \"web-state-mobx\": {\n id: \"web-state-mobx\",\n slug: \"mobx\",\n displayName: \"MobX\",\n description: \"Observable reactive state management\",\n usageGuidance:\n \"Use when implementing client-side state with MobX observables, computed values, actions, reactions, or the observer HOC from mobx-react-lite. Not for server state or simple local UI state (use useState).\",\n category: \"web-client-state\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-state-zustand\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-redux-toolkit\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-jotai\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"mobile-framework-react-native\",\n ],\n needsAny: true,\n reason: \"Skill teaches React/React Native patterns\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-state-zustand\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-redux-toolkit\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-jotai\",\n purpose: \"Client State (React)\",\n },\n ],\n path: \"skills/web-state-mobx\",\n },\n \"web-state-ngrx-signalstore\": {\n id: \"web-state-ngrx-signalstore\",\n slug: \"ngrx-signalstore\",\n displayName: \"NgRx SignalStore\",\n description: \"Angular signal-based state\",\n usageGuidance: \"Use when managing Angular state with Signals and SignalStore.\",\n category: \"web-client-state\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-angular-standalone\"],\n needsAny: false,\n reason: \"NgRx SignalStore is Angular only\",\n },\n ],\n alternatives: [],\n path: \"skills/web-state-ngrx-signalstore\",\n },\n \"web-state-pinia\": {\n id: \"web-state-pinia\",\n slug: \"pinia\",\n displayName: \"Pinia\",\n description: \"Vue client state\",\n usageGuidance: \"Use when managing state in Vue apps with Options or Setup stores.\",\n category: \"web-client-state\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-vue-composition-api\", \"web-meta-framework-nuxt\"],\n needsAny: true,\n reason: \"Pinia is Vue only\",\n },\n ],\n alternatives: [],\n path: \"skills/web-state-pinia\",\n },\n \"web-state-redux-toolkit\": {\n id: \"web-state-redux-toolkit\",\n slug: \"redux-toolkit\",\n displayName: \"Redux Toolkit\",\n description: \"Enterprise client state\",\n usageGuidance: \"Use when managing enterprise-scale state, needing DevTools, or RTK Query.\",\n category: \"web-client-state\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-state-zustand\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-mobx\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-jotai\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"mobile-framework-react-native\",\n ],\n needsAny: true,\n reason: \"Skill teaches React/React Native patterns\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-state-zustand\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-mobx\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-jotai\",\n purpose: \"Client State (React)\",\n },\n ],\n path: \"skills/web-state-redux-toolkit\",\n },\n \"web-state-zustand\": {\n id: \"web-state-zustand\",\n slug: \"zustand\",\n displayName: \"Zustand\",\n description: \"Lightweight client state\",\n usageGuidance:\n \"Use when managing global UI state, replacing Context misuse, or handling cross-component state.\",\n category: \"web-client-state\",\n author: \"@vince\",\n conflictsWith: [\n {\n skillId: \"web-state-redux-toolkit\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-mobx\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n {\n skillId: \"web-state-jotai\",\n reason: \"React state management libraries are mutually exclusive\",\n },\n ],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"mobile-framework-react-native\",\n ],\n needsAny: true,\n reason: \"Skill teaches React/React Native patterns\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-state-redux-toolkit\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-mobx\",\n purpose: \"Client State (React)\",\n },\n {\n skillId: \"web-state-jotai\",\n purpose: \"Client State (React)\",\n },\n ],\n path: \"skills/web-state-zustand\",\n },\n \"web-styling-cva\": {\n id: \"web-styling-cva\",\n slug: \"cva\",\n displayName: \"CVA\",\n description: \"Component variant styling\",\n usageGuidance: \"Use when building component variants with class-variance-authority.\",\n category: \"web-styling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-styling-cva\",\n },\n \"web-styling-design-tokens\": {\n id: \"web-styling-design-tokens\",\n slug: \"design-tokens\",\n displayName: \"Design Tokens\",\n description: \"Token tiers, naming, and build pipeline\",\n usageGuidance:\n \"Use when authoring or restructuring a design token system - defining primitive, semantic and component tiers, naming tokens, delivering them as CSS custom properties, or building them from DTCG source with a token pipeline.\",\n category: \"web-styling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-styling-design-tokens\",\n },\n \"web-styling-scss-modules\": {\n id: \"web-styling-scss-modules\",\n slug: \"scss-modules\",\n displayName: \"SCSS Modules\",\n description: \"SCSS Modules styling\",\n usageGuidance:\n \"Use when writing scoped component styles in .module.scss, organising Sass with @use and @forward, or ordering styles with CSS cascade layers.\",\n category: \"web-styling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-styling-tailwind\",\n purpose: \"Styling\",\n },\n ],\n path: \"skills/web-styling-scss-modules\",\n },\n \"web-styling-tailwind\": {\n id: \"web-styling-tailwind\",\n slug: \"tailwind\",\n displayName: \"Tailwind CSS\",\n description: \"Utility-first CSS framework v4\",\n usageGuidance:\n \"Use when styling with Tailwind CSS v4 utility classes, configuring themes with @theme directive, implementing dark mode, responsive design, custom utilities with @utility, or composing component classes with cn() and tailwind-merge.\",\n category: \"web-styling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-styling-scss-modules\",\n purpose: \"Styling\",\n },\n ],\n path: \"skills/web-styling-tailwind\",\n },\n \"web-styling-theming\": {\n id: \"web-styling-theming\",\n slug: \"theming\",\n displayName: \"Runtime Theming\",\n description: \"Runtime light/dark and multi-brand theme switching\",\n usageGuidance:\n \"Use when applying a theme system to a live app - wiring prefers-color-scheme and an explicit override, eliminating theme flash on first paint, persisting a light/dark/system preference, switching semantic token values per scope, or adding multi-brand and nested theme scopes.\",\n category: \"web-styling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-styling-theming\",\n },\n \"web-testing-cypress-e2e\": {\n id: \"web-testing-cypress-e2e\",\n slug: \"cypress-e2e\",\n displayName: \"Cypress\",\n description: \"E2E browser testing\",\n usageGuidance: \"Use when writing Cypress E2E tests, custom commands, or component tests.\",\n category: \"web-e2e\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-testing-playwright-e2e\",\n purpose: \"E2E Testing\",\n },\n ],\n path: \"skills/web-testing-cypress-e2e\",\n },\n \"web-testing-playwright-e2e\": {\n id: \"web-testing-playwright-e2e\",\n slug: \"playwright-e2e\",\n displayName: \"Playwright\",\n description: \"E2E browser testing\",\n usageGuidance: \"Use when writing E2E tests, Page Object Models, or visual regression tests.\",\n category: \"web-e2e\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [\n {\n skillId: \"web-testing-cypress-e2e\",\n purpose: \"E2E Testing\",\n },\n ],\n path: \"skills/web-testing-playwright-e2e\",\n },\n \"web-testing-react-testing-library\": {\n id: \"web-testing-react-testing-library\",\n slug: \"react-testing-library\",\n displayName: \"React Testing Library\",\n description: \"React component testing\",\n usageGuidance: \"Use when testing React components with user-centric queries.\",\n category: \"web-testing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"React Testing Library is React only\",\n },\n ],\n alternatives: [],\n path: \"skills/web-testing-react-testing-library\",\n },\n \"web-testing-visual-regression\": {\n id: \"web-testing-visual-regression\",\n slug: \"visual-regression\",\n displayName: \"Visual Regression\",\n description: \"Screenshot baselines and diff review\",\n usageGuidance:\n \"Use when catching unintended visual changes with screenshot baselines, diff review, or visual CI jobs.\",\n category: \"web-testing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-testing-visual-regression\",\n },\n \"web-testing-vitest\": {\n id: \"web-testing-vitest\",\n slug: \"vitest\",\n displayName: \"Vitest\",\n description: \"Vite-native test runner\",\n usageGuidance:\n \"Use when writing unit tests, integration tests, configuring Vitest, or using vi.fn/vi.mock/vi.spyOn.\",\n category: \"web-testing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-testing-vitest\",\n },\n \"web-testing-vue-test-utils\": {\n id: \"web-testing-vue-test-utils\",\n slug: \"vue-test-utils\",\n displayName: \"Vue Test Utils\",\n description: \"Vue component testing\",\n usageGuidance:\n \"Use when testing Vue components with mount, shallowMount, or testing composables.\",\n category: \"web-testing\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-vue-composition-api\", \"web-meta-framework-nuxt\"],\n needsAny: true,\n reason: \"Vue Test Utils is Vue only\",\n },\n ],\n alternatives: [],\n path: \"skills/web-testing-vue-test-utils\",\n },\n \"web-tooling-component-library\": {\n id: \"web-tooling-component-library\",\n slug: \"component-library\",\n displayName: \"Component Library Packaging\",\n description: \"Packaging React components as a library\",\n usageGuidance:\n 'Use when shipping styled, client-interactive React components as a consumable package — choosing a style delivery contract, marking styles side-effectful, layering library CSS so consumer overrides win, preserving \"use client\" through the build, declaring peer dependency ranges, and splitting server-safe from client entries.',\n category: \"web-tooling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason:\n \"Packaging React components — react/react-dom peerDependencies and 'use client' preservation are the skill's critical requirements\",\n },\n ],\n alternatives: [],\n path: \"skills/web-tooling-component-library\",\n },\n \"web-tooling-storybook\": {\n id: \"web-tooling-storybook\",\n slug: \"storybook\",\n displayName: \"Storybook\",\n description: \"Component documentation\",\n usageGuidance:\n \"Use when documenting components with Storybook, writing stories, or interaction tests.\",\n category: \"web-tooling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-framework-vue-composition-api\",\n \"web-framework-angular-standalone\",\n \"web-framework-solidjs\",\n \"web-framework-svelte\",\n \"web-meta-framework-qwik\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n \"web-meta-framework-nuxt\",\n \"web-meta-framework-sveltekit\",\n ],\n needsAny: true,\n reason: \"Storybook requires a UI framework\",\n },\n ],\n alternatives: [],\n path: \"skills/web-tooling-storybook\",\n },\n \"web-tooling-vite\": {\n id: \"web-tooling-vite\",\n slug: \"vite\",\n displayName: \"Vite\",\n description: \"Vite build tool configuration\",\n usageGuidance:\n \"Use when configuring Vite build tool, path aliases, vendor chunk splitting, environment-specific builds, or migrating to Rolldown.\",\n category: \"web-tooling\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-tooling-vite\",\n },\n \"web-ui-ant-design\": {\n id: \"web-ui-ant-design\",\n slug: \"ant-design\",\n displayName: \"Ant Design\",\n description: \"Ant Design enterprise UI library for React\",\n usageGuidance:\n \"Use when building React UIs with Ant Design — ConfigProvider theming, Table, Form, Layout, data entry components, and enterprise design patterns.\",\n category: \"web-ui-kit\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Ant Design is a React component library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-ui-shadcn-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-mui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-chakra-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-mantine\",\n purpose: \"UI Components (React)\",\n },\n ],\n path: \"skills/web-ui-ant-design\",\n },\n \"web-ui-base-ui\": {\n id: \"web-ui-base-ui\",\n slug: \"base-ui\",\n displayName: \"Base UI\",\n description: \"Unstyled accessible React primitives\",\n usageGuidance:\n \"Use when building accessible UI with Base UI (@base-ui/react) — part-based anatomy (Portal, Positioner, Popup), the render prop for polymorphism, useRender and mergeProps, data-attribute state styling, controlled state with eventDetails cancelation, and Field/Fieldset/Form validation.\",\n category: \"web-ui-components\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Base UI primitives are React-only (@base-ui/react)\",\n },\n ],\n alternatives: [],\n path: \"skills/web-ui-base-ui\",\n },\n \"web-ui-chakra-ui\": {\n id: \"web-ui-chakra-ui\",\n slug: \"chakra-ui\",\n displayName: \"Chakra UI\",\n description: \"Accessible React components with style props and theming\",\n usageGuidance:\n \"Use when building React UIs with Chakra UI — style props, responsive design, theming, accessible components, and composable component patterns.\",\n category: \"web-ui-kit\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Chakra UI is a React component library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-ui-shadcn-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-mui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-mantine\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-ant-design\",\n purpose: \"UI Components (React)\",\n },\n ],\n path: \"skills/web-ui-chakra-ui\",\n },\n \"web-ui-headless-ui\": {\n id: \"web-ui-headless-ui\",\n slug: \"headless-ui\",\n displayName: \"Headless UI\",\n description: \"Unstyled accessible UI components by Tailwind Labs\",\n usageGuidance:\n \"Use when building accessible UI with Headless UI — Dialog, Menu, Listbox, Combobox, Popover, Tabs, Disclosure, and other unstyled primitives you style yourself.\",\n category: \"web-ui-components\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Headless UI v2 is React only\",\n },\n ],\n alternatives: [],\n path: \"skills/web-ui-headless-ui\",\n },\n \"web-ui-mantine\": {\n id: \"web-ui-mantine\",\n slug: \"mantine\",\n displayName: \"Mantine\",\n description: \"Full-featured React components with hooks, forms, theming\",\n usageGuidance:\n \"Use when building React UIs with Mantine — 100+ components, CSS modules styling, theme customization, built-in hooks, form management with @mantine/form, and notification system.\",\n category: \"web-ui-kit\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Mantine is a React component library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-ui-shadcn-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-mui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-chakra-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-ant-design\",\n purpose: \"UI Components (React)\",\n },\n ],\n path: \"skills/web-ui-mantine\",\n },\n \"web-ui-mui\": {\n id: \"web-ui-mui\",\n slug: \"mui\",\n displayName: \"MUI (Material UI)\",\n description: \"Material UI component library for React\",\n usageGuidance:\n \"Use when building React UIs with MUI — theming, component customization, sx prop, styled API, data grids, date pickers, and Material Design patterns.\",\n category: \"web-ui-kit\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"MUI is a React component library\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-ui-shadcn-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-chakra-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-mantine\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-ant-design\",\n purpose: \"UI Components (React)\",\n },\n ],\n path: \"skills/web-ui-mui\",\n },\n \"web-ui-radix-ui\": {\n id: \"web-ui-radix-ui\",\n slug: \"radix-ui\",\n displayName: \"Radix UI\",\n description: \"Accessible UI primitives\",\n usageGuidance:\n \"Use when building accessible overlay components (dialogs, popovers, dropdowns, tooltips), compound component APIs, keyboard navigation, focus management, or polymorphic components with asChild and Slot patterns.\",\n category: \"web-ui-components\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Radix UI primitives are React-specific\",\n },\n ],\n alternatives: [],\n path: \"skills/web-ui-radix-ui\",\n },\n \"web-ui-shadcn-ui\": {\n id: \"web-ui-shadcn-ui\",\n slug: \"shadcn-ui\",\n displayName: \"shadcn/ui\",\n description: \"Tailwind component library\",\n usageGuidance: \"Use when using shadcn/ui components, theming, or customization.\",\n category: \"web-ui-kit\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"shadcn/ui requires a React-based framework\",\n },\n {\n skillIds: [\"web-styling-tailwind\"],\n needsAny: false,\n reason: \"shadcn/ui requires Tailwind CSS\",\n },\n ],\n alternatives: [\n {\n skillId: \"web-ui-mui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-chakra-ui\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-mantine\",\n purpose: \"UI Components (React)\",\n },\n {\n skillId: \"web-ui-ant-design\",\n purpose: \"UI Components (React)\",\n },\n ],\n path: \"skills/web-ui-shadcn-ui\",\n },\n \"web-ui-tanstack-table\": {\n id: \"web-ui-tanstack-table\",\n slug: \"tanstack-table\",\n displayName: \"TanStack Table\",\n description: \"Data table component\",\n usageGuidance: \"Use when building data tables with sorting, filtering, or pagination.\",\n category: \"web-ui-components\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-remix\",\n ],\n needsAny: true,\n reason: \"Skill teaches @tanstack/react-table patterns\",\n },\n ],\n alternatives: [],\n path: \"skills/web-ui-tanstack-table\",\n },\n \"web-ui-vuetify\": {\n id: \"web-ui-vuetify\",\n slug: \"vuetify\",\n displayName: \"Vuetify\",\n description: \"Material Design component library for Vue 3\",\n usageGuidance:\n \"Use when building Vue 3 UIs with Vuetify — theming, global defaults, data tables, form validation, SASS variable customization, composables, and Material Design 3 patterns.\",\n category: \"web-ui-kit\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-vue-composition-api\", \"web-meta-framework-nuxt\"],\n needsAny: true,\n reason: \"Vuetify is Vue only\",\n },\n ],\n alternatives: [],\n path: \"skills/web-ui-vuetify\",\n },\n \"web-utilities-date-fns\": {\n id: \"web-utilities-date-fns\",\n slug: \"date-fns\",\n displayName: \"date-fns\",\n description: \"Date utilities\",\n usageGuidance: \"Use when formatting, parsing, or manipulating dates with date-fns.\",\n category: \"web-utilities\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-utilities-date-fns\",\n },\n \"web-utilities-native-js\": {\n id: \"web-utilities-native-js\",\n slug: \"native-js\",\n displayName: \"Native JS\",\n description: \"Native JS utilities\",\n usageGuidance: \"Use when using modern JS methods instead of lodash utilities.\",\n category: \"web-utilities\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-utilities-native-js\",\n },\n \"web-utilities-rxjs\": {\n id: \"web-utilities-rxjs\",\n slug: \"rxjs\",\n displayName: \"RxJS\",\n description: \"Reactive programming — Observables, operators, streams\",\n usageGuidance:\n \"Use when handling complex async flows with RxJS — Observables, operators (map, filter, switchMap, mergeMap), Subjects, error handling, unsubscription, and reactive patterns for event streams and HTTP requests.\",\n category: \"web-utilities\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [],\n alternatives: [],\n path: \"skills/web-utilities-rxjs\",\n },\n \"web-utilities-vueuse\": {\n id: \"web-utilities-vueuse\",\n slug: \"vueuse\",\n displayName: \"Vueuse\",\n description: \"Vue Composition API utilities — 250+ composable functions\",\n usageGuidance:\n \"Use when building Vue apps with VueUse — browser APIs (useLocalStorage, useClipboard, useFetch), sensors (useMouse, useScroll), animations, state management helpers, and component utilities.\",\n category: \"web-utilities\",\n author: \"@vince\",\n conflictsWith: [],\n discourages: [],\n requires: [\n {\n skillIds: [\"web-framework-vue-composition-api\", \"web-meta-framework-nuxt\"],\n needsAny: true,\n reason: \"VueUse composables require Vue 3\",\n },\n ],\n alternatives: [],\n path: \"skills/web-utilities-vueuse\",\n },\n },\n suggestedStacks: [\n {\n id: \"nextjs-fullstack\",\n name: \"Next.js Full-Stack\",\n description: \"Hono, Drizzle, Better Auth, Zustand\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\", \"meta-reviewing-cli-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"cli-tester\": {},\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-styling-scss-modules\",\n \"web-state-zustand\",\n \"web-server-state-react-query\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"web-accessibility-web-accessibility\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"api-analytics-posthog-analytics\",\n \"api-email-resend-react-email\",\n \"infra-ci-cd-github-actions\",\n \"cli-framework-oclif-ink\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Ship fast, iterate faster\",\n },\n {\n id: \"nextjs-t3-stack\",\n name: \"Next.js T3 Stack\",\n description: \"tRPC, Prisma, NextAuth, Tailwind\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-orm\": [\"api-database-prisma\"],\n \"api-auth\": [\"api-auth-nextauth\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-orm\": [\"api-database-prisma\"],\n \"api-auth\": [\"api-auth-nextauth\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-orm\": [\"api-database-prisma\"],\n \"api-auth\": [\"api-auth-nextauth\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-orm\": [\"api-database-prisma\"],\n \"api-auth\": [\"api-auth-nextauth\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-orm\": [\"api-database-prisma\"],\n \"api-auth\": [\"api-auth-nextauth\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-orm\": [\"api-database-prisma\"],\n \"api-auth\": [\"api-auth-nextauth\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-orm\": [\"api-database-prisma\"],\n \"api-auth\": [\"api-auth-nextauth\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-styling-tailwind\",\n \"web-data-fetching-trpc\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-database-prisma\",\n \"api-auth-nextauth\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"End-to-end type safety with great DX\",\n },\n {\n id: \"nextjs-supabase-fullstack\",\n name: \"Next.js Supabase Full-Stack\",\n description: \"Supabase, Drizzle, Better Auth\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-baas\": [\"api-baas-supabase\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\", \"meta-reviewing-cli-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-baas\": [\"api-baas-supabase\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-baas\": [\"api-baas-supabase\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-baas\": [\"api-baas-supabase\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-baas\": [\"api-baas-supabase\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-baas\": [\"api-baas-supabase\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-baas\": [\"api-baas-supabase\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"cli-tester\": {},\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-styling-scss-modules\",\n \"web-state-zustand\",\n \"web-server-state-react-query\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"web-accessibility-web-accessibility\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-baas-supabase\",\n \"api-observability-axiom-pino-sentry\",\n \"api-analytics-posthog-analytics\",\n \"api-email-resend-react-email\",\n \"infra-ci-cd-github-actions\",\n \"cli-framework-oclif-ink\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Full-stack with Supabase backend-as-a-service\",\n },\n {\n id: \"nextjs-turborepo-fullstack\",\n name: \"Next.js Turborepo Full-Stack\",\n description: \"Turborepo, pnpm Workspaces, Hono, Drizzle\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\", \"meta-reviewing-cli-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-task-runner\": [\"shared-monorepo-turborepo\"],\n },\n \"cli-tester\": {},\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-styling-scss-modules\",\n \"web-state-zustand\",\n \"web-server-state-react-query\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"web-accessibility-web-accessibility\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"shared-monorepo-pnpm-workspaces\",\n \"shared-monorepo-turborepo\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"api-analytics-posthog-analytics\",\n \"api-email-resend-react-email\",\n \"infra-ci-cd-github-actions\",\n \"cli-framework-oclif-ink\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Monorepo architecture with Turborepo and pnpm\",\n },\n {\n id: \"react-old-school\",\n name: \"React Old School\",\n description: \"Redux Toolkit, SCSS Modules, Vite, Vitest\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-redux-toolkit\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-routing\": [\"web-routing-react-router\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-redux-toolkit\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-routing\": [\"web-routing-react-router\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-redux-toolkit\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-routing\": [\"web-routing-react-router\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-redux-toolkit\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-routing\": [\"web-routing-react-router\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-redux-toolkit\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-routing\": [\"web-routing-react-router\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-redux-toolkit\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-routing\": [\"web-routing-react-router\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-redux-toolkit\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-routing\": [\"web-routing-react-router\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-state-redux-toolkit\",\n \"web-styling-scss-modules\",\n \"web-routing-react-router\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Classic React with proven patterns\",\n },\n {\n id: \"react-hono-fullstack\",\n name: \"React Hono Full-Stack\",\n description: \"Vite, Hono, Drizzle, Better Auth\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\", \"meta-reviewing-cli-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"cli-tester\": {},\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-styling-scss-modules\",\n \"web-state-zustand\",\n \"web-server-state-react-query\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"web-accessibility-web-accessibility\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"api-analytics-posthog-analytics\",\n \"api-email-resend-react-email\",\n \"infra-ci-cd-github-actions\",\n \"cli-framework-oclif-ink\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"React SPA with Hono backend\",\n },\n {\n id: \"remix-fullstack\",\n name: \"Remix Full-Stack\",\n description: \"Hono, Drizzle, Better Auth\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-remix\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-remix\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-remix\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-remix\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-remix\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-remix\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-remix\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-meta-framework-remix\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Web standards and excellent forms handling\",\n },\n {\n id: \"sveltekit-fullstack\",\n name: \"SvelteKit Full-Stack\",\n description: \"Hono, Drizzle, Better Auth\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-svelte\"],\n \"web-meta-framework\": [\"web-meta-framework-sveltekit\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-svelte\"],\n \"web-meta-framework\": [\"web-meta-framework-sveltekit\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-svelte\"],\n \"web-meta-framework\": [\"web-meta-framework-sveltekit\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-svelte\"],\n \"web-meta-framework\": [\"web-meta-framework-sveltekit\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-svelte\"],\n \"web-meta-framework\": [\"web-meta-framework-sveltekit\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-svelte\"],\n \"web-meta-framework\": [\"web-meta-framework-sveltekit\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-svelte\"],\n \"web-meta-framework\": [\"web-meta-framework-sveltekit\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-svelte\",\n \"web-meta-framework-sveltekit\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Write less, do more with compiler magic\",\n },\n {\n id: \"solidjs-fullstack\",\n name: \"SolidJS Full-Stack\",\n description: \"Hono, Drizzle, Better Auth, Vitest\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-solidjs\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-solidjs\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-solidjs\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-solidjs\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-solidjs\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-solidjs\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-solidjs\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-solidjs\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Maximum performance with minimal overhead\",\n },\n {\n id: \"astro-content-fullstack\",\n name: \"Astro Content Full-Stack\",\n description: \"Hono, Drizzle\",\n skills: {\n \"web-developer\": {\n \"web-meta-framework\": [\"web-meta-framework-astro\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-cms\": [\"api-cms-sanity\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-meta-framework\": [\"web-meta-framework-astro\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-cms\": [\"api-cms-sanity\"],\n },\n pm: {\n \"web-meta-framework\": [\"web-meta-framework-astro\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-cms\": [\"api-cms-sanity\"],\n },\n \"web-researcher\": {\n \"web-meta-framework\": [\"web-meta-framework-astro\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-cms\": [\"api-cms-sanity\"],\n },\n \"agent-summoner\": {\n \"web-meta-framework\": [\"web-meta-framework-astro\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-cms\": [\"api-cms-sanity\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-meta-framework\": [\"web-meta-framework-astro\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-cms\": [\"api-cms-sanity\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-meta-framework\": [\"web-meta-framework-astro\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-cms\": [\"api-cms-sanity\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-meta-framework-astro\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-observability-axiom-pino-sentry\",\n \"api-cms-sanity\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Ship less JavaScript, faster by default\",\n },\n {\n id: \"vue-modern-fullstack\",\n name: \"Vue Modern Full-Stack\",\n description: \"Pinia, Hono, Drizzle, Better Auth\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-vue-composition-api\",\n \"web-state-pinia\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Progressive and approachable\",\n },\n {\n id: \"nuxt-fullstack\",\n name: \"Nuxt Full-Stack\",\n description: \"Hono, Drizzle, Better Auth\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-meta-framework\": [\"web-meta-framework-nuxt\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-meta-framework\": [\"web-meta-framework-nuxt\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-meta-framework\": [\"web-meta-framework-nuxt\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-meta-framework\": [\"web-meta-framework-nuxt\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-meta-framework\": [\"web-meta-framework-nuxt\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-meta-framework\": [\"web-meta-framework-nuxt\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n \"web-meta-framework\": [\"web-meta-framework-nuxt\"],\n \"web-client-state\": [\"web-state-pinia\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-vue-composition-api\",\n \"web-meta-framework-nuxt\",\n \"web-state-pinia\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Progressive Vue with Nuxt power\",\n },\n {\n id: \"angular-modern-fullstack\",\n name: \"Angular Modern Full-Stack\",\n description: \"NgRx, Hono, Drizzle, Better Auth\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-angular-standalone\"],\n \"web-client-state\": [\"web-state-ngrx-signalstore\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"web-framework\": [\"web-framework-angular-standalone\"],\n \"web-client-state\": [\"web-state-ngrx-signalstore\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-angular-standalone\"],\n \"web-client-state\": [\"web-state-ngrx-signalstore\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-angular-standalone\"],\n \"web-client-state\": [\"web-state-ngrx-signalstore\"],\n \"web-testing\": [\"web-testing-vitest\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-angular-standalone\"],\n \"web-client-state\": [\"web-state-ngrx-signalstore\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-angular-standalone\"],\n \"web-client-state\": [\"web-state-ngrx-signalstore\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-angular-standalone\"],\n \"web-client-state\": [\"web-state-ngrx-signalstore\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n },\n },\n allSkillIds: [\n \"web-framework-angular-standalone\",\n \"web-state-ngrx-signalstore\",\n \"web-testing-vitest\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"meta-reviewing-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Enterprise-grade and type-safe\",\n },\n {\n id: \"nextjs-ai-saas\",\n name: \"Next.js AI SaaS\",\n description: \"Vercel AI, Anthropic, Drizzle, Pinecone\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"ai-orchestration\": [\"ai-orchestration-vercel-ai-sdk\"],\n \"ai-provider\": [\"ai-provider-anthropic-sdk\"],\n \"ai-patterns\": [\"ai-patterns-tool-use-patterns\"],\n \"api-vector-db\": [\"api-vector-db-pinecone\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\", \"meta-reviewing-cli-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"ai-orchestration\": [\"ai-orchestration-vercel-ai-sdk\"],\n \"ai-provider\": [\"ai-provider-anthropic-sdk\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"ai-orchestration\": [\"ai-orchestration-vercel-ai-sdk\"],\n \"ai-provider\": [\"ai-provider-anthropic-sdk\"],\n \"ai-patterns\": [\"ai-patterns-tool-use-patterns\"],\n \"api-vector-db\": [\"api-vector-db-pinecone\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"ai-orchestration\": [\"ai-orchestration-vercel-ai-sdk\"],\n \"ai-provider\": [\"ai-provider-anthropic-sdk\"],\n \"ai-patterns\": [\"ai-patterns-tool-use-patterns\"],\n \"api-vector-db\": [\"api-vector-db-pinecone\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"ai-orchestration\": [\"ai-orchestration-vercel-ai-sdk\"],\n \"ai-provider\": [\"ai-provider-anthropic-sdk\"],\n \"ai-patterns\": [\"ai-patterns-tool-use-patterns\"],\n \"api-vector-db\": [\"api-vector-db-pinecone\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"ai-orchestration\": [\"ai-orchestration-vercel-ai-sdk\"],\n \"ai-provider\": [\"ai-provider-anthropic-sdk\"],\n \"ai-patterns\": [\"ai-patterns-tool-use-patterns\"],\n \"api-vector-db\": [\"api-vector-db-pinecone\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"ai-orchestration\": [\"ai-orchestration-vercel-ai-sdk\"],\n \"ai-provider\": [\"ai-provider-anthropic-sdk\"],\n \"ai-patterns\": [\"ai-patterns-tool-use-patterns\"],\n \"api-vector-db\": [\"api-vector-db-pinecone\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"cli-tester\": {},\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-styling-tailwind\",\n \"web-state-zustand\",\n \"web-server-state-react-query\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"web-accessibility-web-accessibility\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"ai-orchestration-vercel-ai-sdk\",\n \"ai-provider-anthropic-sdk\",\n \"ai-patterns-tool-use-patterns\",\n \"api-vector-db-pinecone\",\n \"api-observability-axiom-pino-sentry\",\n \"api-email-resend-react-email\",\n \"infra-ci-cd-github-actions\",\n \"cli-framework-oclif-ink\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"AI-first full-stack with streaming and tool use\",\n },\n {\n id: \"nextjs-saas-starter\",\n name: \"Next.js SaaS Starter\",\n description: \"Better Auth, Stripe, Drizzle, Resend, PostHog\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n \"web-tooling\": [\"web-tooling-vite\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\", \"api-flags-posthog-flags\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\", \"meta-reviewing-cli-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-e2e\": [\"web-testing-playwright-e2e\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-meta-framework\": [\"web-meta-framework-nextjs\"],\n \"web-styling\": [\"web-styling-tailwind\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-analytics\": [\"api-analytics-posthog-analytics\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"cli-tester\": {},\n },\n allSkillIds: [\n \"web-framework-react\",\n \"web-meta-framework-nextjs\",\n \"web-styling-tailwind\",\n \"web-state-zustand\",\n \"web-server-state-react-query\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"web-accessibility-web-accessibility\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"web-tooling-vite\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-commerce-stripe\",\n \"api-observability-axiom-pino-sentry\",\n \"api-analytics-posthog-analytics\",\n \"api-flags-posthog-flags\",\n \"api-email-resend-react-email\",\n \"infra-ci-cd-github-actions\",\n \"cli-framework-oclif-ink\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"web-testing-playwright-e2e\",\n ],\n philosophy: \"Ship your SaaS fast with auth, payments, and analytics\",\n },\n {\n id: \"expo-mobile-fullstack\",\n name: \"Expo Mobile Full-Stack\",\n description: \"Zustand, React Query, Hono, Drizzle\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\", \"meta-reviewing-cli-reviewing\"],\n \"web-framework\": [\"web-framework-react\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-tester\": {\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n },\n pm: {\n \"web-framework\": [\"web-framework-react\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"web-researcher\": {\n \"web-framework\": [\"web-framework-react\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n },\n \"api-researcher\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n },\n \"agent-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"skill-summoner\": {\n \"web-framework\": [\"web-framework-react\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"codex-keeper\": {\n \"web-framework\": [\"web-framework-react\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-server-state\": [\"web-server-state-react-query\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"api-api\": [\"api-framework-hono\"],\n \"api-orm\": [\"api-database-drizzle\"],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\"],\n \"api-observability\": [\"api-observability-axiom-pino-sentry\"],\n \"api-email\": [\"api-email-resend-react-email\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n },\n \"cli-tester\": {},\n },\n allSkillIds: [\n \"web-framework-react\",\n \"mobile-framework-expo\",\n \"mobile-framework-react-native\",\n \"web-state-zustand\",\n \"web-server-state-react-query\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth-drizzle-hono\",\n \"api-observability-axiom-pino-sentry\",\n \"api-email-resend-react-email\",\n \"infra-ci-cd-github-actions\",\n \"cli-framework-oclif-ink\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n ],\n philosophy: \"Cross-platform mobile with shared React patterns\",\n },\n {\n id: \"cli-ink-oclif\",\n name: \"CLI Tool\",\n description: \"oclif, Ink, Zustand, Vitest\",\n skills: {\n \"cli-developer\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n reviewer: {\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-tester\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"cli-researcher\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n pm: {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"web-researcher\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"agent-summoner\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"skill-summoner\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n \"codex-keeper\": {\n \"cli-framework\": [\"cli-framework-oclif-ink\"],\n \"web-framework\": [\"web-framework-react\"],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-testing\": [\"web-testing-vitest\"],\n \"meta-design\": [\"meta-design-expressive-typescript\"],\n \"meta-reviewing\": [\"meta-reviewing-reviewing\"],\n \"shared-tooling\": [\"shared-tooling-typescript-config\", \"shared-tooling-git-hooks\"],\n \"shared-lint\": [\"shared-tooling-eslint-prettier\"],\n },\n },\n allSkillIds: [\n \"cli-framework-oclif-ink\",\n \"web-framework-react\",\n \"web-forms-zod-validation\",\n \"web-state-zustand\",\n \"web-testing-vitest\",\n \"meta-design-expressive-typescript\",\n \"meta-reviewing-reviewing\",\n \"shared-tooling-typescript-config\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-eslint-prettier\",\n ],\n philosophy: \"Terminal-native CLI with interactive React-based wizard UI\",\n },\n ],\n slugMap: {\n slugToId: {\n \"huggingface-inference\": \"ai-infrastructure-huggingface-inference\",\n litellm: \"ai-infrastructure-litellm\",\n modal: \"ai-infrastructure-modal\",\n ollama: \"ai-infrastructure-ollama\",\n replicate: \"ai-infrastructure-replicate\",\n \"together-ai\": \"ai-infrastructure-together-ai\",\n langfuse: \"ai-observability-langfuse\",\n promptfoo: \"ai-observability-promptfoo\",\n langchain: \"ai-orchestration-langchain\",\n llamaindex: \"ai-orchestration-llamaindex\",\n \"vercel-ai-sdk\": \"ai-orchestration-vercel-ai-sdk\",\n \"tool-use-patterns\": \"ai-patterns-tool-use-patterns\",\n \"anthropic-sdk\": \"ai-provider-anthropic-sdk\",\n \"claude-vision\": \"ai-provider-claude-vision\",\n \"cohere-sdk\": \"ai-provider-cohere-sdk\",\n elevenlabs: \"ai-provider-elevenlabs\",\n \"google-gemini-sdk\": \"ai-provider-google-gemini-sdk\",\n \"mistral-sdk\": \"ai-provider-mistral-sdk\",\n \"openai-sdk\": \"ai-provider-openai-sdk\",\n \"openai-whisper\": \"ai-provider-openai-whisper\",\n \"posthog-analytics\": \"api-analytics-posthog-analytics\",\n \"setup-posthog\": \"api-analytics-setup-posthog\",\n \"better-auth-drizzle-hono\": \"api-auth-better-auth-drizzle-hono\",\n clerk: \"api-auth-clerk\",\n nextauth: \"api-auth-nextauth\",\n appwrite: \"api-baas-appwrite\",\n firebase: \"api-baas-firebase\",\n neon: \"api-baas-neon\",\n planetscale: \"api-baas-planetscale\",\n supabase: \"api-baas-supabase\",\n turso: \"api-baas-turso\",\n strategies: \"api-caching-strategies\",\n payload: \"api-cms-payload\",\n sanity: \"api-cms-sanity\",\n strapi: \"api-cms-strapi\",\n stripe: \"api-commerce-stripe\",\n cockroachdb: \"api-database-cockroachdb\",\n drizzle: \"api-database-drizzle\",\n edgedb: \"api-database-edgedb\",\n knex: \"api-database-knex\",\n mongodb: \"api-database-mongodb\",\n mongoose: \"api-database-mongoose\",\n mysql: \"api-database-mysql\",\n postgresql: \"api-database-postgresql\",\n prisma: \"api-database-prisma\",\n redis: \"api-database-redis\",\n sequelize: \"api-database-sequelize\",\n surrealdb: \"api-database-surrealdb\",\n typeorm: \"api-database-typeorm\",\n upstash: \"api-database-upstash\",\n \"vercel-kv\": \"api-database-vercel-kv\",\n \"vercel-postgres\": \"api-database-vercel-postgres\",\n \"resend-react-email\": \"api-email-resend-react-email\",\n \"setup-resend\": \"api-email-setup-resend\",\n \"posthog-flags\": \"api-flags-posthog-flags\",\n elysia: \"api-framework-elysia\",\n express: \"api-framework-express\",\n fastify: \"api-framework-fastify\",\n hono: \"api-framework-hono\",\n nestjs: \"api-framework-nestjs\",\n \"apollo-server\": \"api-graphql-apollo-server\",\n mercurius: \"api-graphql-mercurius\",\n yoga: \"api-graphql-yoga\",\n webhooks: \"api-messaging-webhooks\",\n \"axiom-pino-sentry\": \"api-observability-axiom-pino-sentry\",\n \"setup-axiom-pino-sentry\": \"api-observability-setup-axiom-pino-sentry\",\n \"api-performance\": \"api-performance-api-performance\",\n bullmq: \"api-queue-bullmq\",\n elasticsearch: \"api-search-elasticsearch\",\n meilisearch: \"api-search-meilisearch\",\n xquik: \"api-search-xquik\",\n openapi: \"api-specs-openapi\",\n chroma: \"api-vector-db-chroma\",\n pinecone: \"api-vector-db-pinecone\",\n qdrant: \"api-vector-db-qdrant\",\n weaviate: \"api-vector-db-weaviate\",\n \"cli-commander\": \"cli-framework-cli-commander\",\n \"oclif-ink\": \"cli-framework-oclif-ink\",\n clack: \"cli-prompts-clack\",\n \"tauri-backend\": \"desktop-backend-tauri\",\n electron: \"desktop-framework-electron\",\n tauri: \"desktop-framework-tauri\",\n \"electron-ipc\": \"desktop-ipc-electron\",\n \"tauri-mobile\": \"desktop-mobile-tauri\",\n \"electron-multiwindow\": \"desktop-multiwindow-electron\",\n \"tauri-multiwindow\": \"desktop-multiwindow-tauri\",\n \"electron-forge\": \"desktop-packaging-electron-forge\",\n \"tauri-bundling\": \"desktop-packaging-tauri\",\n \"tauri-plugins\": \"desktop-plugins-tauri\",\n \"electron-security\": \"desktop-security-electron\",\n \"tauri-security\": \"desktop-security-tauri\",\n \"electron-storage\": \"desktop-storage-electron\",\n \"electron-testing\": \"desktop-testing-electron\",\n \"electron-ui\": \"desktop-ui-electron\",\n \"electron-updater\": \"desktop-updates-electron-updater\",\n docker: \"infra-ci-cd-docker\",\n \"github-actions\": \"infra-ci-cd-github-actions\",\n \"turborepo-ci\": \"infra-ci-cd-turborepo-ci\",\n \"setup-env\": \"infra-config-setup-env\",\n kubernetes: \"infra-containers-kubernetes\",\n pulumi: \"infra-iac-pulumi\",\n sst: \"infra-iac-sst\",\n terraform: \"infra-iac-terraform\",\n \"aws-sdk\": \"infra-platform-aws-sdk\",\n \"cloudflare-workers\": \"infra-platform-cloudflare-workers\",\n netlify: \"infra-platform-netlify\",\n vercel: \"infra-platform-vercel\",\n \"stack-detect\": \"meta-config-stack-detect\",\n \"composable-components\": \"meta-design-composable-components\",\n \"expressive-typescript\": \"meta-design-expressive-typescript\",\n \"research-methodology\": \"meta-methodology-research-methodology\",\n \"ai-planning\": \"meta-planning-ai-planning\",\n \"api-planning\": \"meta-planning-api-planning\",\n \"cli-planning\": \"meta-planning-cli-planning\",\n \"web-planning\": \"meta-planning-web-planning\",\n \"ai-reviewing\": \"meta-reviewing-ai-reviewing\",\n \"api-reviewing\": \"meta-reviewing-api-reviewing\",\n \"cli-reviewing\": \"meta-reviewing-cli-reviewing\",\n \"infra-reviewing\": \"meta-reviewing-infra-reviewing\",\n reviewing: \"meta-reviewing-reviewing\",\n \"web-reviewing\": \"meta-reviewing-web-reviewing\",\n \"gesture-handler\": \"mobile-animation-gesture-handler\",\n reanimated: \"mobile-animation-reanimated\",\n skia: \"mobile-animation-skia\",\n tasks: \"mobile-background-tasks\",\n \"vision-camera\": \"mobile-camera-vision-camera\",\n \"app-links\": \"mobile-deep-linking-app-links\",\n eas: \"mobile-deployment-eas\",\n expo: \"mobile-framework-expo\",\n \"react-native\": \"mobile-framework-react-native\",\n \"ble-nfc\": \"mobile-hardware-ble-nfc\",\n \"expo-router\": \"mobile-navigation-expo-router\",\n \"react-navigation\": \"mobile-navigation-react-navigation\",\n push: \"mobile-notifications-push\",\n \"react-native-performance\": \"mobile-performance-react-native\",\n \"react-native-security\": \"mobile-security-react-native\",\n mmkv: \"mobile-storage-mmkv\",\n \"sqlite-powersync\": \"mobile-storage-sqlite-powersync\",\n watermelondb: \"mobile-storage-watermelondb\",\n nativewind: \"mobile-styling-nativewind\",\n unistyles: \"mobile-styling-unistyles\",\n detox: \"mobile-testing-detox\",\n maestro: \"mobile-testing-maestro\",\n \"react-native-paper\": \"mobile-ui-components-react-native-paper\",\n tamagui: \"mobile-ui-components-tamagui\",\n nx: \"shared-monorepo-nx\",\n \"pnpm-workspaces\": \"shared-monorepo-pnpm-workspaces\",\n turborepo: \"shared-monorepo-turborepo\",\n \"auth-security\": \"shared-security-auth-security\",\n biome: \"shared-tooling-biome\",\n changesets: \"shared-tooling-changesets\",\n \"eslint-prettier\": \"shared-tooling-eslint-prettier\",\n \"git-hooks\": \"shared-tooling-git-hooks\",\n \"typescript-config\": \"shared-tooling-typescript-config\",\n \"react-three-fiber\": \"web-3d-react-three-fiber\",\n \"web-accessibility\": \"web-accessibility-web-accessibility\",\n \"css-animations\": \"web-animation-css-animations\",\n \"framer-motion\": \"web-animation-framer-motion\",\n \"view-transitions\": \"web-animation-view-transitions\",\n \"graphql-apollo\": \"web-data-fetching-graphql-apollo\",\n \"graphql-urql\": \"web-data-fetching-graphql-urql\",\n swr: \"web-data-fetching-swr\",\n trpc: \"web-data-fetching-trpc\",\n d3: \"web-dataviz-d3\",\n recharts: \"web-dataviz-recharts\",\n \"dnd-kit\": \"web-dnd-dnd-kit\",\n lexical: \"web-editor-lexical\",\n tiptap: \"web-editor-tiptap\",\n \"error-boundaries\": \"web-error-handling-error-boundaries\",\n \"result-types\": \"web-error-handling-result-types\",\n \"file-upload-patterns\": \"web-files-file-upload-patterns\",\n \"image-handling\": \"web-files-image-handling\",\n \"react-hook-form\": \"web-forms-react-hook-form\",\n \"tanstack-form\": \"web-forms-tanstack-form\",\n \"vee-validate\": \"web-forms-vee-validate\",\n \"zod-validation\": \"web-forms-zod-validation\",\n \"angular-standalone\": \"web-framework-angular-standalone\",\n react: \"web-framework-react\",\n solidjs: \"web-framework-solidjs\",\n svelte: \"web-framework-svelte\",\n \"vue-composition-api\": \"web-framework-vue-composition-api\",\n \"next-intl\": \"web-i18n-next-intl\",\n \"react-intl\": \"web-i18n-react-intl\",\n \"vue-i18n\": \"web-i18n-vue-i18n\",\n leaflet: \"web-maps-leaflet\",\n mapbox: \"web-maps-mapbox\",\n astro: \"web-meta-framework-astro\",\n docusaurus: \"web-meta-framework-docusaurus\",\n nextjs: \"web-meta-framework-nextjs\",\n nuxt: \"web-meta-framework-nuxt\",\n qwik: \"web-meta-framework-qwik\",\n remix: \"web-meta-framework-remix\",\n sveltekit: \"web-meta-framework-sveltekit\",\n vitepress: \"web-meta-framework-vitepress\",\n msw: \"web-mocks-msw\",\n \"web-performance\": \"web-performance-web-performance\",\n \"offline-first\": \"web-pwa-offline-first\",\n \"service-workers\": \"web-pwa-service-workers\",\n \"socket-io\": \"web-realtime-socket-io\",\n sse: \"web-realtime-sse\",\n websockets: \"web-realtime-websockets\",\n \"react-router\": \"web-routing-react-router\",\n \"tanstack-router\": \"web-routing-tanstack-router\",\n \"react-query\": \"web-server-state-react-query\",\n jotai: \"web-state-jotai\",\n mobx: \"web-state-mobx\",\n \"ngrx-signalstore\": \"web-state-ngrx-signalstore\",\n pinia: \"web-state-pinia\",\n \"redux-toolkit\": \"web-state-redux-toolkit\",\n zustand: \"web-state-zustand\",\n cva: \"web-styling-cva\",\n \"design-tokens\": \"web-styling-design-tokens\",\n \"scss-modules\": \"web-styling-scss-modules\",\n tailwind: \"web-styling-tailwind\",\n theming: \"web-styling-theming\",\n \"cypress-e2e\": \"web-testing-cypress-e2e\",\n \"playwright-e2e\": \"web-testing-playwright-e2e\",\n \"react-testing-library\": \"web-testing-react-testing-library\",\n \"visual-regression\": \"web-testing-visual-regression\",\n vitest: \"web-testing-vitest\",\n \"vue-test-utils\": \"web-testing-vue-test-utils\",\n \"component-library\": \"web-tooling-component-library\",\n storybook: \"web-tooling-storybook\",\n vite: \"web-tooling-vite\",\n \"ant-design\": \"web-ui-ant-design\",\n \"base-ui\": \"web-ui-base-ui\",\n \"chakra-ui\": \"web-ui-chakra-ui\",\n \"headless-ui\": \"web-ui-headless-ui\",\n mantine: \"web-ui-mantine\",\n mui: \"web-ui-mui\",\n \"radix-ui\": \"web-ui-radix-ui\",\n \"shadcn-ui\": \"web-ui-shadcn-ui\",\n \"tanstack-table\": \"web-ui-tanstack-table\",\n vuetify: \"web-ui-vuetify\",\n \"date-fns\": \"web-utilities-date-fns\",\n \"native-js\": \"web-utilities-native-js\",\n rxjs: \"web-utilities-rxjs\",\n vueuse: \"web-utilities-vueuse\",\n },\n },\n generatedAt: \"build\",\n} as MergedSkillsMatrix;\n\n// ── Derived Lookup Maps ───────────────────────────────────────\n\nexport const SKILL_IDS_BY_CATEGORY: Record<Category, readonly SkillId[]> = {\n \"ai-infrastructure\": [\n \"ai-infrastructure-huggingface-inference\",\n \"ai-infrastructure-litellm\",\n \"ai-infrastructure-modal\",\n \"ai-infrastructure-ollama\",\n \"ai-infrastructure-replicate\",\n \"ai-infrastructure-together-ai\",\n ],\n \"ai-observability\": [\"ai-observability-langfuse\", \"ai-observability-promptfoo\"],\n \"ai-orchestration\": [\n \"ai-orchestration-langchain\",\n \"ai-orchestration-llamaindex\",\n \"ai-orchestration-vercel-ai-sdk\",\n ],\n \"ai-patterns\": [\"ai-patterns-tool-use-patterns\"],\n \"ai-provider\": [\n \"ai-provider-anthropic-sdk\",\n \"ai-provider-claude-vision\",\n \"ai-provider-cohere-sdk\",\n \"ai-provider-elevenlabs\",\n \"ai-provider-google-gemini-sdk\",\n \"ai-provider-mistral-sdk\",\n \"ai-provider-openai-sdk\",\n \"ai-provider-openai-whisper\",\n ],\n \"api-analytics\": [\n \"api-analytics-posthog-analytics\",\n \"api-analytics-setup-posthog\",\n \"api-flags-posthog-flags\",\n ],\n \"api-api\": [\n \"api-framework-elysia\",\n \"api-framework-express\",\n \"api-framework-fastify\",\n \"api-framework-hono\",\n \"api-framework-nestjs\",\n ],\n \"api-auth\": [\"api-auth-better-auth-drizzle-hono\", \"api-auth-clerk\", \"api-auth-nextauth\"],\n \"api-baas\": [\"api-baas-appwrite\", \"api-baas-firebase\", \"api-baas-supabase\"],\n \"api-caching\": [\"api-caching-strategies\"],\n \"api-cms\": [\"api-cms-payload\", \"api-cms-sanity\", \"api-cms-strapi\"],\n \"api-commerce\": [\"api-commerce-stripe\"],\n \"api-db-host\": [\n \"api-baas-neon\",\n \"api-baas-planetscale\",\n \"api-baas-turso\",\n \"api-database-vercel-postgres\",\n ],\n \"api-document\": [\n \"api-database-edgedb\",\n \"api-database-mongodb\",\n \"api-database-mongoose\",\n \"api-database-surrealdb\",\n ],\n \"api-email\": [\"api-email-resend-react-email\", \"api-email-setup-resend\"],\n \"api-graphql\": [\"api-graphql-apollo-server\", \"api-graphql-mercurius\", \"api-graphql-yoga\"],\n \"api-kv\": [\"api-database-redis\", \"api-database-upstash\", \"api-database-vercel-kv\"],\n \"api-messaging\": [\"api-messaging-webhooks\"],\n \"api-observability\": [\n \"api-observability-axiom-pino-sentry\",\n \"api-observability-setup-axiom-pino-sentry\",\n ],\n \"api-orm\": [\n \"api-database-drizzle\",\n \"api-database-knex\",\n \"api-database-prisma\",\n \"api-database-sequelize\",\n \"api-database-typeorm\",\n ],\n \"api-performance\": [\"api-performance-api-performance\"],\n \"api-queue\": [\"api-queue-bullmq\"],\n \"api-search\": [\"api-search-elasticsearch\", \"api-search-meilisearch\", \"api-search-xquik\"],\n \"api-specs\": [\"api-specs-openapi\"],\n \"api-sql-engine\": [\"api-database-cockroachdb\", \"api-database-mysql\", \"api-database-postgresql\"],\n \"api-vector-db\": [\n \"api-vector-db-chroma\",\n \"api-vector-db-pinecone\",\n \"api-vector-db-qdrant\",\n \"api-vector-db-weaviate\",\n ],\n \"cli-framework\": [\"cli-framework-cli-commander\", \"cli-framework-oclif-ink\"],\n \"cli-prompts\": [\"cli-prompts-clack\"],\n \"desktop-backend\": [\"desktop-backend-tauri\"],\n \"desktop-framework\": [\"desktop-framework-electron\", \"desktop-framework-tauri\"],\n \"desktop-ipc\": [\"desktop-ipc-electron\"],\n \"desktop-mobile\": [\"desktop-mobile-tauri\"],\n \"desktop-multiwindow\": [\"desktop-multiwindow-electron\", \"desktop-multiwindow-tauri\"],\n \"desktop-packaging\": [\"desktop-packaging-electron-forge\", \"desktop-packaging-tauri\"],\n \"desktop-plugins\": [\"desktop-plugins-tauri\"],\n \"desktop-security\": [\"desktop-security-electron\", \"desktop-security-tauri\"],\n \"desktop-storage\": [\"desktop-storage-electron\"],\n \"desktop-testing\": [\"desktop-testing-electron\"],\n \"desktop-ui\": [\"desktop-ui-electron\"],\n \"desktop-updates\": [\"desktop-updates-electron-updater\"],\n \"infra-ci-cd\": [\"infra-ci-cd-github-actions\", \"infra-ci-cd-turborepo-ci\"],\n \"infra-config\": [\"infra-config-setup-env\"],\n \"infra-containers\": [\"infra-ci-cd-docker\", \"infra-containers-kubernetes\"],\n \"infra-iac\": [\"infra-iac-pulumi\", \"infra-iac-sst\", \"infra-iac-terraform\"],\n \"infra-platform\": [\n \"infra-platform-aws-sdk\",\n \"infra-platform-cloudflare-workers\",\n \"infra-platform-netlify\",\n \"infra-platform-vercel\",\n ],\n \"meta-design\": [\"meta-design-composable-components\", \"meta-design-expressive-typescript\"],\n \"meta-methodology\": [\"meta-methodology-research-methodology\"],\n \"meta-planning\": [\n \"meta-planning-ai-planning\",\n \"meta-planning-api-planning\",\n \"meta-planning-cli-planning\",\n \"meta-planning-web-planning\",\n ],\n \"meta-reviewing\": [\n \"meta-reviewing-ai-reviewing\",\n \"meta-reviewing-api-reviewing\",\n \"meta-reviewing-cli-reviewing\",\n \"meta-reviewing-infra-reviewing\",\n \"meta-reviewing-reviewing\",\n \"meta-reviewing-web-reviewing\",\n ],\n \"mobile-animation\": [\n \"mobile-animation-gesture-handler\",\n \"mobile-animation-reanimated\",\n \"mobile-animation-skia\",\n ],\n \"mobile-background\": [\"mobile-background-tasks\"],\n \"mobile-camera\": [\"mobile-camera-vision-camera\"],\n \"mobile-deep-linking\": [\"mobile-deep-linking-app-links\"],\n \"mobile-deployment\": [\"mobile-deployment-eas\"],\n \"mobile-framework\": [\"mobile-framework-expo\", \"mobile-framework-react-native\"],\n \"mobile-hardware\": [\"mobile-hardware-ble-nfc\"],\n \"mobile-navigation\": [\"mobile-navigation-expo-router\", \"mobile-navigation-react-navigation\"],\n \"mobile-notifications\": [\"mobile-notifications-push\"],\n \"mobile-performance\": [\"mobile-performance-react-native\"],\n \"mobile-security\": [\"mobile-security-react-native\"],\n \"mobile-storage\": [\n \"mobile-storage-mmkv\",\n \"mobile-storage-sqlite-powersync\",\n \"mobile-storage-watermelondb\",\n ],\n \"mobile-styling\": [\"mobile-styling-nativewind\", \"mobile-styling-unistyles\"],\n \"mobile-testing\": [\"mobile-testing-detox\", \"mobile-testing-maestro\"],\n \"mobile-ui-components\": [\n \"mobile-ui-components-react-native-paper\",\n \"mobile-ui-components-tamagui\",\n ],\n \"shared-lint\": [\"shared-tooling-biome\", \"shared-tooling-eslint-prettier\"],\n \"shared-monorepo\": [\"shared-monorepo-pnpm-workspaces\"],\n \"shared-security\": [\"shared-security-auth-security\"],\n \"shared-task-runner\": [\"shared-monorepo-nx\", \"shared-monorepo-turborepo\"],\n \"shared-tooling\": [\n \"meta-config-stack-detect\",\n \"shared-tooling-changesets\",\n \"shared-tooling-git-hooks\",\n \"shared-tooling-typescript-config\",\n ],\n \"web-3d\": [\"web-3d-react-three-fiber\"],\n \"web-accessibility\": [\"web-accessibility-web-accessibility\"],\n \"web-animation\": [\n \"web-animation-css-animations\",\n \"web-animation-framer-motion\",\n \"web-animation-view-transitions\",\n ],\n \"web-client-state\": [\n \"web-state-jotai\",\n \"web-state-mobx\",\n \"web-state-ngrx-signalstore\",\n \"web-state-pinia\",\n \"web-state-redux-toolkit\",\n \"web-state-zustand\",\n ],\n \"web-dataviz\": [\"web-dataviz-d3\", \"web-dataviz-recharts\"],\n \"web-dnd\": [\"web-dnd-dnd-kit\"],\n \"web-docs\": [\"web-meta-framework-docusaurus\", \"web-meta-framework-vitepress\"],\n \"web-e2e\": [\"web-testing-cypress-e2e\", \"web-testing-playwright-e2e\"],\n \"web-editor\": [\"web-editor-lexical\", \"web-editor-tiptap\"],\n \"web-error-handling\": [\"web-error-handling-error-boundaries\", \"web-error-handling-result-types\"],\n \"web-file-upload\": [\"web-files-file-upload-patterns\"],\n \"web-files\": [\"web-files-image-handling\"],\n \"web-form-library\": [\n \"web-forms-react-hook-form\",\n \"web-forms-tanstack-form\",\n \"web-forms-vee-validate\",\n ],\n \"web-forms\": [\"web-forms-zod-validation\"],\n \"web-framework\": [\n \"web-framework-angular-standalone\",\n \"web-framework-react\",\n \"web-framework-solidjs\",\n \"web-framework-svelte\",\n \"web-framework-vue-composition-api\",\n ],\n \"web-graphql-client\": [\"web-data-fetching-graphql-apollo\", \"web-data-fetching-graphql-urql\"],\n \"web-i18n\": [\"web-i18n-next-intl\", \"web-i18n-react-intl\", \"web-i18n-vue-i18n\"],\n \"web-maps\": [\"web-maps-leaflet\", \"web-maps-mapbox\"],\n \"web-meta-framework\": [\n \"web-meta-framework-astro\",\n \"web-meta-framework-nextjs\",\n \"web-meta-framework-nuxt\",\n \"web-meta-framework-qwik\",\n \"web-meta-framework-remix\",\n \"web-meta-framework-sveltekit\",\n ],\n \"web-mocking\": [\"web-mocks-msw\"],\n \"web-performance\": [\"web-performance-web-performance\"],\n \"web-pwa\": [\"web-pwa-offline-first\", \"web-pwa-service-workers\"],\n \"web-realtime\": [\"web-realtime-socket-io\", \"web-realtime-websockets\"],\n \"web-routing\": [\"web-routing-react-router\", \"web-routing-tanstack-router\"],\n \"web-rpc\": [\"web-data-fetching-trpc\"],\n \"web-server-state\": [\"web-data-fetching-swr\", \"web-server-state-react-query\"],\n \"web-streaming\": [\"web-realtime-sse\"],\n \"web-styling\": [\n \"web-styling-cva\",\n \"web-styling-design-tokens\",\n \"web-styling-scss-modules\",\n \"web-styling-tailwind\",\n \"web-styling-theming\",\n ],\n \"web-testing\": [\n \"web-testing-react-testing-library\",\n \"web-testing-visual-regression\",\n \"web-testing-vitest\",\n \"web-testing-vue-test-utils\",\n ],\n \"web-tooling\": [\"web-tooling-component-library\", \"web-tooling-storybook\", \"web-tooling-vite\"],\n \"web-ui-components\": [\n \"web-ui-base-ui\",\n \"web-ui-headless-ui\",\n \"web-ui-radix-ui\",\n \"web-ui-tanstack-table\",\n ],\n \"web-ui-kit\": [\n \"web-ui-ant-design\",\n \"web-ui-chakra-ui\",\n \"web-ui-mantine\",\n \"web-ui-mui\",\n \"web-ui-shadcn-ui\",\n \"web-ui-vuetify\",\n ],\n \"web-utilities\": [\n \"web-utilities-date-fns\",\n \"web-utilities-native-js\",\n \"web-utilities-rxjs\",\n \"web-utilities-vueuse\",\n ],\n} as Record<Category, readonly SkillId[]>;\n\nexport const CATEGORIES_BY_DOMAIN: Record<Domain, readonly Category[]> = {\n ai: [\"ai-infrastructure\", \"ai-observability\", \"ai-orchestration\", \"ai-patterns\", \"ai-provider\"],\n api: [\n \"api-analytics\",\n \"api-api\",\n \"api-auth\",\n \"api-baas\",\n \"api-caching\",\n \"api-cms\",\n \"api-commerce\",\n \"api-db-host\",\n \"api-document\",\n \"api-email\",\n \"api-graphql\",\n \"api-kv\",\n \"api-messaging\",\n \"api-observability\",\n \"api-orm\",\n \"api-performance\",\n \"api-queue\",\n \"api-search\",\n \"api-specs\",\n \"api-sql-engine\",\n \"api-vector-db\",\n ],\n cli: [\"cli-framework\", \"cli-prompts\"],\n desktop: [\n \"desktop-backend\",\n \"desktop-framework\",\n \"desktop-ipc\",\n \"desktop-mobile\",\n \"desktop-multiwindow\",\n \"desktop-packaging\",\n \"desktop-plugins\",\n \"desktop-security\",\n \"desktop-storage\",\n \"desktop-testing\",\n \"desktop-ui\",\n \"desktop-updates\",\n ],\n infra: [\"infra-ci-cd\", \"infra-config\", \"infra-containers\", \"infra-iac\", \"infra-platform\"],\n meta: [\"meta-design\", \"meta-methodology\", \"meta-planning\", \"meta-reviewing\"],\n mobile: [\n \"mobile-animation\",\n \"mobile-background\",\n \"mobile-camera\",\n \"mobile-deep-linking\",\n \"mobile-deployment\",\n \"mobile-framework\",\n \"mobile-hardware\",\n \"mobile-navigation\",\n \"mobile-notifications\",\n \"mobile-performance\",\n \"mobile-security\",\n \"mobile-storage\",\n \"mobile-styling\",\n \"mobile-testing\",\n \"mobile-ui-components\",\n ],\n shared: [\n \"shared-lint\",\n \"shared-monorepo\",\n \"shared-security\",\n \"shared-task-runner\",\n \"shared-tooling\",\n ],\n web: [\n \"web-3d\",\n \"web-accessibility\",\n \"web-animation\",\n \"web-client-state\",\n \"web-dataviz\",\n \"web-dnd\",\n \"web-docs\",\n \"web-e2e\",\n \"web-editor\",\n \"web-error-handling\",\n \"web-file-upload\",\n \"web-files\",\n \"web-form-library\",\n \"web-forms\",\n \"web-framework\",\n \"web-graphql-client\",\n \"web-i18n\",\n \"web-maps\",\n \"web-meta-framework\",\n \"web-mocking\",\n \"web-performance\",\n \"web-pwa\",\n \"web-realtime\",\n \"web-routing\",\n \"web-rpc\",\n \"web-server-state\",\n \"web-streaming\",\n \"web-styling\",\n \"web-testing\",\n \"web-tooling\",\n \"web-ui-components\",\n \"web-ui-kit\",\n \"web-utilities\",\n ],\n} as Record<Domain, readonly Category[]>;\n","// The validation boundary for `BUILT_IN_MATRIX` — the one catalogue this package\n// vendors — and for everything the read models build on it.\n//\n// These schemas describe only what the editor actually reads, not the full CLI types.\n// Unknown keys are stripped, so the vendored data can grow fields without touching this file.\n// What they do catch is the case that matters: a regenerated catalog that dropped or renamed\n// something we depend on. That fails here, loudly, instead of rendering a blank table.\n//\n// The narrowing is what makes it the VENDORED boundary rather than a general\n// one: every id is held against a generated vocabulary, so a catalogue whose\n// ids came from somewhere else is rejected by construction. That other case is\n// `matrixSchema` in `matrix-schema.ts`, which describes any marketplace's\n// catalogue and is the schema a fetched `catalog.json` is parsed with.\n\nimport { z } from \"zod\"\nimport {\n AGENT_NAMES,\n CATEGORIES,\n DOMAINS,\n SKILL_IDS,\n} from \"./vendor/generated/source-types\"\n\nexport const domainIdSchema = z.enum(DOMAINS)\n\n// The generated vocabularies, as the boundary's own alphabet. Ids validated\n// against them arrive downstream already narrowed, which is what spares every\n// read model from casting a `string` back into the union it came from.\nconst skillIdSchema = z.enum(SKILL_IDS)\nconst categorySchema = z.enum(CATEGORIES)\nconst agentNameSchema = z.enum(AGENT_NAMES)\n\nexport const categoryDefinitionSchema = z.object({\n id: categorySchema,\n displayName: z.string(),\n description: z.string(),\n // Optional in the CLI's type. Present on all 89 built-in categories today; a category without\n // one cannot be placed in the UI, so the read model drops it rather than failing the whole boot.\n domain: domainIdSchema.exactOptional(),\n exclusive: z.boolean(),\n order: z.number(),\n})\n\nconst skillRelationSchema = z.object({\n skillId: skillIdSchema,\n reason: z.string(),\n})\n\nconst skillRequirementSchema = z.object({\n skillIds: z.array(skillIdSchema),\n needsAny: z.boolean(),\n reason: z.string(),\n})\n\nexport const resolvedSkillSchema = z.object({\n id: skillIdSchema,\n slug: z.string(),\n displayName: z.string(),\n description: z.string(),\n // The sentence a compiled sub-agent reads as its cue to load the skill. Optional\n // on the CLI's `SkillCore`, so a catalogue entry without one falls back to its\n // category — but a schema that omits the field STRIPS it, which is the same value\n // arriving by a route nothing can tell apart from the skill stating nothing.\n usageGuidance: z.string().exactOptional(),\n category: categorySchema,\n conflictsWith: z.array(skillRelationSchema),\n discourages: z.array(skillRelationSchema),\n requires: z.array(skillRequirementSchema),\n})\n\nexport const resolvedStackSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string(),\n // agent id → category id → skill ids. Partial because a stack names the few\n // agents it staffs, not the whole roster; the category keys are the one level\n // nothing here reads, so they stay unvalidated strings.\n skills: z.partialRecord(\n agentNameSchema,\n z.record(z.string(), z.array(skillIdSchema))\n ),\n allSkillIds: z.array(skillIdSchema),\n philosophy: z.string(),\n // Never populated by the CLI today; the stack rail groups by it when it appears.\n group: z.string().exactOptional(),\n})\n\nexport const builtInMatrixSchema = z.object({\n // Stamped into every seed payload so a consumer can explain skipped ids.\n version: z.string(),\n categories: z.record(z.string(), categoryDefinitionSchema),\n skills: z.record(z.string(), resolvedSkillSchema),\n suggestedStacks: z.array(resolvedStackSchema),\n})\n\nexport type BuiltInMatrix = z.infer<typeof builtInMatrixSchema>\nexport type ParsedSkill = z.infer<typeof resolvedSkillSchema>\nexport type ParsedCategory = z.infer<typeof categoryDefinitionSchema>\nexport type ParsedStack = z.infer<typeof resolvedStackSchema>\n","import { BUILT_IN_MATRIX } from \"../vendor/generated/matrix\"\nimport { builtInMatrixSchema } from \"../built-in-matrix\"\n\n// The vendored matrix, validated once. Parsing the whole catalog is measurably slow, so every\n// read-model module shares this rather than calling builtInMatrixSchema.parse itself.\nexport const MATRIX = builtInMatrixSchema.parse(BUILT_IN_MATRIX)\n\nexport const MATRIX_VERSION = MATRIX.version\n","import {\n SKILL_IDS,\n type Domain,\n type SkillId,\n} from \"../vendor/generated/source-types\"\nimport type { Matrix, MatrixCategory, MatrixSkill } from \"../matrix-schema\"\nimport { groupBy } from \"./collections\"\nimport { MATRIX } from \"./source\"\nimport {\n DOMAIN_DESCRIPTIONS,\n DOMAIN_LABELS,\n compareDomains,\n isDomain,\n} from \"./domains\"\n\n// Ids are `string` throughout, and that is the point rather than a loosening.\n// A catalogue is no longer only the vendored one: the editor fetches a\n// marketplace's `catalog.json` and builds these same read models over it, and a\n// marketplace's ids are its own — `SkillId` would reject every one of them by\n// construction. The vendored unions still narrow what the VENDORED artefact is\n// allowed to contain, in `built-in-matrix.ts`, which is the boundary that\n// question belongs to.\n//\n// `Domain` is the exception and stays closed, because it is not the\n// catalogue's vocabulary — it is the UI's. Nine domains have labels, an order\n// and a filter chip, so a category naming a tenth has nowhere to render; it is\n// dropped exactly as one naming no domain already was.\n\n// One dependency group: `needsAny` picks between \"all of these\" and \"one of\n// these\". `reason` is authored upstream (\"SvelteKit is built on Svelte\").\nexport type SkillRequirement = {\n skillIds: string[]\n needsAny: boolean\n reason: string\n}\n\nexport type CatalogSkill = {\n id: string\n slug: string\n displayName: string\n description: string\n categoryId: string\n domainId: Domain\n // Selecting this skill hard-excludes these.\n conflictsWith: string[]\n // Soft conflict — warn, do not disable.\n discourages: string[]\n // What this skill is built on. The only place a cross-category\n // incompatibility is expressed: SvelteKit requires Svelte, so picking React\n // — which Svelte conflicts with — puts SvelteKit out of reach.\n requires: SkillRequirement[]\n}\n\nexport type CatalogCategory = {\n id: string\n displayName: string\n description: string\n domainId: Domain\n // Only one skill may be picked. Drives the `pick one` tag and auto-collapse.\n exclusive: boolean\n skills: CatalogSkill[]\n}\n\nexport type CatalogDomain = {\n id: Domain\n label: string\n description: string\n categories: CatalogCategory[]\n skillCount: number\n}\n\nexport type Catalog = {\n domains: CatalogDomain[]\n // Both indexes hold the ids this catalogue ships and nothing else: a category\n // with no placeable domain never reaches them, so even a known id can miss —\n // and once the catalogue can be a marketplace's, so can an id from another\n // one. Keyed by `string` rather than by a union, which under\n // `noUncheckedIndexedAccess` is what already types every read as \"or nothing\".\n skillsById: Record<string, CatalogSkill>\n categoriesById: Record<string, CatalogCategory>\n skillCount: number\n}\n\nconst toCatalogSkill = (\n skill: MatrixSkill,\n domainId: Domain\n): CatalogSkill => ({\n id: skill.id,\n slug: skill.slug,\n displayName: skill.displayName,\n description: skill.description,\n categoryId: skill.category,\n domainId,\n conflictsWith: skill.conflictsWith.map((relation) => relation.skillId),\n discourages: skill.discourages.map((relation) => relation.skillId),\n requires: skill.requires.map((requirement) => ({\n skillIds: requirement.skillIds,\n needsAny: requirement.needsAny,\n reason: requirement.reason,\n })),\n})\n\ntype PlaceableCategory = MatrixCategory & { domain: Domain }\n\n// Categories the UI can place. A category has nowhere to render when it names\n// no domain, and equally when it names one the UI has never heard of — a\n// marketplace is free to invent a category id but not a domain, because a\n// domain is a labelled section with an order and a filter chip.\nconst placeableCategories = (categories: Record<string, MatrixCategory>) =>\n Object.values(categories).filter(\n (category): category is PlaceableCategory =>\n category.domain !== undefined && isDomain(category.domain)\n )\n\n// Domain order first, then the category order authored upstream.\nconst byDomainThenAuthoredOrder = (\n a: PlaceableCategory,\n b: PlaceableCategory\n) => compareDomains(a.domain, b.domain) || a.order - b.order\n\nconst toCatalogCategory = (\n category: PlaceableCategory,\n skills: MatrixSkill[]\n): CatalogCategory => ({\n id: category.id,\n displayName: category.displayName,\n description: category.description,\n domainId: category.domain,\n exclusive: category.exclusive,\n skills: skills\n .map((skill) => toCatalogSkill(skill, category.domain))\n .sort((a, b) => a.displayName.localeCompare(b.displayName)),\n})\n\nconst toCatalogDomain = (\n id: Domain,\n categories: CatalogCategory[]\n): CatalogDomain => ({\n id,\n label: DOMAIN_LABELS[id],\n description: DOMAIN_DESCRIPTIONS[id],\n categories,\n skillCount: categories.reduce(\n (total, category) => total + category.skills.length,\n 0\n ),\n})\n\n/**\n * The read model, over any catalogue in the wire shape.\n *\n * Exported because the vendored matrix is no longer the only one: the editor\n * fetches a marketplace's `catalog.json`, parses it with `matrixSchema`, and\n * builds exactly this — same derivation, same sorting, same placement rules, so\n * a marketplace's grid cannot render by a different set of rules than the\n * public one's.\n */\nexport const buildCatalog = (matrix: Matrix): Catalog => {\n const skillsByCategory = groupBy(\n Object.values(matrix.skills),\n (skill) => skill.category\n )\n\n const categories = placeableCategories(matrix.categories)\n .sort(byDomainThenAuthoredOrder)\n .map((category) =>\n toCatalogCategory(category, skillsByCategory.get(category.id) ?? [])\n )\n\n const domains = [...groupBy(categories, (category) => category.domainId)]\n .sort(([a], [b]) => compareDomains(a, b))\n .map(([id, domainCategories]) => toCatalogDomain(id, domainCategories))\n\n const allSkills = categories.flatMap((category) => category.skills)\n\n return {\n domains,\n skillsById: byId(allSkills),\n categoriesById: byId(categories),\n skillCount: allSkills.length,\n }\n}\n\n// `indexById`'s open-vocabulary twin. That one keys by a finite union and is\n// therefore `Partial`; these ids are `string`, so `noUncheckedIndexedAccess`\n// already says a read may miss and no cast is needed to say it again.\nconst byId = <T extends { id: string }>(items: T[]): Record<string, T> =>\n Object.fromEntries(items.map((item) => [item.id, item]))\n\n/** The vendored public catalogue — what an app nobody has pointed anywhere shows. */\nexport const CATALOG = buildCatalog(MATRIX)\n\n/**\n * The catalogue asked with an open id.\n *\n * The question reaching it is not always an id the catalogue carries: the\n * editor mints `github:owner/repo` ids for skills added mid-session, a saved\n * configuration can name one a later catalogue dropped, and a configuration\n * built against one marketplace can be asked of another. All three are answered\n * — `undefined` — rather than rejected, which is what keeps the guards at those\n * call sites doing real work.\n */\nexport const createSkillLookup =\n (catalog: Catalog) =>\n (skillId: string): CatalogSkill | undefined =>\n catalog.skillsById[skillId]\n\n/** The lookup bound to the vendored catalogue. */\nexport const skillById = createSkillLookup(CATALOG)\n\nconst SHIPPED_IDS = new Set<string>(SKILL_IDS)\n\n/**\n * Whether this id is one the VENDORED catalogue ships.\n *\n * Not \"does some catalogue carry it\" — `skillById` answers that, of whichever\n * catalogue it is bound to. This is the narrower question, and the only surface\n * that needs it is a table authored against the shipped ids: a marketplace's\n * skill cannot have a row in one by construction, so it is outside the table\n * rather than left out of it.\n */\nexport const isShippedSkillId = (skillId: string): skillId is SkillId =>\n SHIPPED_IDS.has(skillId)\n","// AUTO-GENERATED from packages/cli/src/agents/*/*/metadata.yaml in this repo.\n// Do not edit manually — run `bun run generate` in packages/matrix.\n// Fills the AGENT_DEFINITIONS gap the shared matrix package left open.\n\nimport type { AgentName } from \"../vendor/generated/source-types\"\nimport type { AgentIsolation, CacheTtl, EffortLevel, ModelName, PermissionMode } from \"../vendor/matrix\"\n\n/** Agent metadata as shipped by the CLI's per-agent metadata.yaml files. */\nexport type GeneratedAgentDefinition = {\n id: AgentName\n title: string\n description: string\n model?: ModelName\n effort?: EffortLevel\n tools: string[]\n disallowedTools?: string[]\n permissionMode?: PermissionMode\n /** Runs the agent in a git worktree of its own. Carried so a browser render matches the CLI's. */\n isolation?: AgentIsolation\n experimental?: { cacheTtl?: CacheTtl }\n outputFormat?: string\n /** Agent role, from the CLI's src/agents/<flavor>/ directory. */\n flavor: string\n /** Path relative to the CLI's src/agents/. */\n path: string\n}\n\nexport const AGENT_DEFINITIONS = {\n \"agent-summoner\": {\n \"id\": \"agent-summoner\",\n \"title\": \"Agent Summoner Agent\",\n \"description\": \"Expert in creating and improving Claude Code sub-agents - knows the six-file agent source layout, the compile template and the frontmatter decisions - invoke to author a new agent, analyse an existing one, or decide its model and tools\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"meta\",\n \"path\": \"meta/agent-summoner\",\n },\n \"ai-developer\": {\n \"id\": \"ai-developer\",\n \"title\": \"AI Developer Agent\",\n \"description\": \"Implements AI features from specs - RAG pipelines, agent loops, tool calling, prompt engineering, streaming responses, embedding workflows, multi-model orchestration - surgical execution following existing patterns\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"developer\",\n \"path\": \"developer/ai-developer\",\n },\n \"ai-researcher\": {\n \"id\": \"ai-researcher\",\n \"title\": \"AI Researcher Agent\",\n \"description\": \"Read-only AI codebase research specialist - discovers prompt templates and prompt-assembly code, catalogs model and provider SDK usage, maps RAG and embedding pipelines and vector stores, documents tool-calling schemas and agentic loops, finds eval setups, token budgeting, streaming and caching patterns - produces structured findings for ai-developer and the pm - invoke for AI research before implementation\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"researcher\",\n \"path\": \"researcher/ai-researcher\",\n },\n \"ai-tester\": {\n \"id\": \"ai-tester\",\n \"title\": \"AI Tester Agent\",\n \"description\": \"Tests AI features - mocks LLM and provider calls at deterministic seams, unit-tests prompt assembly and context construction, validates tool-call and structured-output schemas, covers retry/fallback/rate-limit/streaming paths, asserts token and cost budgets, writes prompt regression snapshots, and builds eval harnesses with golden datasets kept out of CI - invoke BEFORE or AFTER ai-developer implements features\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"tester\",\n \"path\": \"tester/ai-tester\",\n },\n \"api-developer\": {\n \"id\": \"api-developer\",\n \"title\": \"API Developer Agent\",\n \"description\": \"Implements backend features from detailed specs - API routes, database operations, server utilities, authentication, middleware - surgical execution following existing patterns - invoke AFTER the pm creates the spec\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"developer\",\n \"path\": \"developer/api-developer\",\n },\n \"api-researcher\": {\n \"id\": \"api-researcher\",\n \"title\": \"API Researcher Agent\",\n \"description\": \"Read-only backend research specialist - discovers API route patterns, understands database schemas and ORM patterns, catalogs middleware and authentication flows, finds similar service implementations - produces structured findings for api-developer - invoke for backend research before implementation\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"researcher\",\n \"path\": \"researcher/api-researcher\",\n },\n \"api-tester\": {\n \"id\": \"api-tester\",\n \"title\": \"API Tester Agent\",\n \"description\": \"Tests backend features - API endpoint integration tests, database operation tests, auth flow tests, middleware chain tests, error response validation - invoke BEFORE or AFTER api-developer implements features\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"tester\",\n \"path\": \"tester/api-tester\",\n },\n \"cli-developer\": {\n \"id\": \"cli-developer\",\n \"title\": \"CLI Developer Agent\",\n \"description\": \"Implements CLI features from detailed specs - CLI commands, interactive prompts, option parsing, config hierarchies, exit codes - surgical execution following existing patterns - invoke AFTER pm creates spec\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"developer\",\n \"path\": \"developer/cli-developer\",\n },\n \"cli-researcher\": {\n \"id\": \"cli-researcher\",\n \"title\": \"CLI Researcher Agent\",\n \"description\": \"Read-only CLI research specialist - discovers command registration and structure patterns, catalogs interactive prompt and TUI component conventions, understands flag parsing and config hierarchies, maps exit-code, error-handling and output-formatting conventions, finds testing seams - produces structured findings for cli-developer and the pm - invoke for CLI research before implementation\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"researcher\",\n \"path\": \"researcher/cli-researcher\",\n },\n \"cli-tester\": {\n \"id\": \"cli-tester\",\n \"title\": \"CLI Tester Agent\",\n \"description\": \"Tests CLI applications - wizard flows, commands, keyboard interactions, file system outputs - invoke BEFORE or AFTER cli-developer implements features\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"tester\",\n \"path\": \"tester/cli-tester\",\n },\n \"codex-keeper\": {\n \"id\": \"codex-keeper\",\n \"title\": \"Codex Keeper Agent\",\n \"description\": \"Creates AI-focused reference documentation (architecture, types, store maps, commands) that helps other agents understand where and how to implement features. Works incrementally, tracking progress over time.\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Glob\",\"Grep\",\"Bash\"],\n \"flavor\": \"meta\",\n \"path\": \"meta/codex-keeper\",\n },\n \"convention-keeper\": {\n \"id\": \"convention-keeper\",\n \"title\": \"Convention Keeper Agent\",\n \"description\": \"Reviews accumulated findings from sub-agent work, cross-references against existing standards docs, and proposes targeted documentation updates to prevent recurrence of anti-patterns\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"meta\",\n \"path\": \"meta/convention-keeper\",\n },\n \"pm\": {\n \"id\": \"pm\",\n \"title\": \"PM and Architect Agent\",\n \"description\": \"Creates implementation specs for any feature - frontend, backend, CLI, and AI alike - by researching the codebase's real patterns and naming the ones to follow, with fenced scope and verifiable success criteria; domain planning frameworks arrive via meta-planning skills - invoke BEFORE a developer for any new feature\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"planning\",\n \"path\": \"planning/pm\",\n },\n \"reviewer\": {\n \"id\": \"reviewer\",\n \"title\": \"Reviewer Agent\",\n \"description\": \"Reviews any diff - web, API, CLI, AI, and infrastructure code alike - one severity-disciplined quality gate for correctness, security, and convention adherence; domain-specific checklists arrive via meta-reviewing skills\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"reviewer\",\n \"path\": \"reviewer/reviewer\",\n },\n \"skill-summoner\": {\n \"id\": \"skill-summoner\",\n \"title\": \"Skill Summoner Agent\",\n \"description\": \"Creates and improves every skill this product authors, technology or methodology alike - researches current practice from official documentation and real codebases, compares it against the standards the project already holds, and brings the differences back as a decision - use to author a new skill or improve an existing one\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"WebSearch\",\"WebFetch\"],\n \"flavor\": \"meta\",\n \"path\": \"meta/skill-summoner\",\n },\n \"web-developer\": {\n \"id\": \"web-developer\",\n \"title\": \"Web Developer Agent\",\n \"description\": \"Implements frontend features from detailed specs - UI components, TypeScript, styling, client state - surgical execution following existing patterns - invoke AFTER the pm creates the spec\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"developer\",\n \"path\": \"developer/web-developer\",\n },\n \"web-researcher\": {\n \"id\": \"web-researcher\",\n \"title\": \"Web Researcher Agent\",\n \"description\": \"Read-only frontend research specialist - discovers UI component patterns, catalogs design systems, understands styling methodology and tokens, finds similar component implementations - produces structured findings for web-developer - invoke for frontend research before implementation\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"researcher\",\n \"path\": \"researcher/web-researcher\",\n },\n \"web-tester\": {\n \"id\": \"web-tester\",\n \"title\": \"Web Tester Agent\",\n \"description\": \"Writes tests BEFORE implementation - all test types (*.test.*, *.spec.*, E2E) - Tester red-green-refactor - invoke BEFORE developer implements feature\",\n \"model\": \"opus\",\n \"tools\": [\"Read\",\"Write\",\"Edit\",\"Grep\",\"Glob\",\"Bash\"],\n \"flavor\": \"tester\",\n \"path\": \"tester/web-tester\",\n },\n} as const satisfies Record<AgentName, GeneratedAgentDefinition>\n","// The validation boundary for `AGENT_DEFINITIONS` — the built-in sub-agent\n// roster, generated from the CLI's per-agent `metadata.yaml` files.\n//\n// It sits beside `built-in-matrix.ts` rather than inside it because the roster\n// is not part of the matrix: `MergedSkillsMatrix` carries categories, skills\n// and stacks, and the agents are a second generated artefact with a second\n// consumer (`read-model/sub-agents.ts`). The two boundaries narrow against the\n// same generated vocabularies and answer different questions.\n\nimport { z } from \"zod\"\nimport { AGENT_NAMES } from \"./vendor/generated/source-types\"\nimport { MODEL_NAMES } from \"./vendor/matrix\"\n\nconst agentNameSchema = z.enum(AGENT_NAMES)\nconst modelNameSchema = z.enum(MODEL_NAMES)\n\nexport const agentDefinitionSchema = z.object({\n id: agentNameSchema,\n title: z.string(),\n description: z.string(),\n model: modelNameSchema.exactOptional(),\n tools: z.array(z.string()),\n // Not narrowed here: which roles are sayable is authored in the read model's\n // preload table — so the check lives where the list does, in `flavorOf`,\n // rather than the list being imported back into the boundary.\n flavor: z.string(),\n})\n\nexport const agentDefinitionsSchema = z.record(\n z.string(),\n agentDefinitionSchema\n)\n\nexport type ParsedAgentDefinition = z.infer<typeof agentDefinitionSchema>\n","// Vendored byte-for-byte into packages/matrix/src/vendor/ by scripts/generate-matrix-package.ts.\n// ANY edit here — a comment-only one included — obliges `bun run generate:matrix` in packages/cli;\n// `generate:matrix:check` is the gate.\n\nimport type { CategoryPath, SkillSlug, SkillId } from \"./skills\";\nimport type { AgentName } from \"./agents\";\n\nexport type { Category, Domain } from \"./generated/source-types\";\nexport { CATEGORIES, DOMAINS } from \"./generated/source-types\";\n\n// Import locally for use within this file\nimport type { Category, Domain } from \"./generated/source-types\";\n\n/** Claude model selectors for agent configuration */\nexport const MODEL_NAMES = [\"sonnet\", \"opus\", \"haiku\", \"fable\", \"inherit\"] as const;\nexport type ModelName = (typeof MODEL_NAMES)[number];\n\n/** Reasoning effort levels for agent configuration */\nexport const EFFORT_NAMES = [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\nexport type EffortLevel = (typeof EFFORT_NAMES)[number];\n\n/** Agent permission modes for Claude Code tool access */\nexport const PERMISSION_MODES = [\n \"default\",\n \"acceptEdits\",\n \"dontAsk\",\n \"bypassPermissions\",\n \"plan\",\n \"delegate\",\n] as const;\nexport type PermissionMode = (typeof PERMISSION_MODES)[number];\n\n/**\n * The one isolation mode Claude Code's sub-agent frontmatter documents.\n *\n * Beside the other frontmatter vocabulary rather than in `agents.ts`, because this file is the half\n * `@workspace/matrix` vendors — and a browser rendering a compiled agent has to spell `isolation`\n * the same way the CLI does or the two front doors emit different frontmatter for the same agent.\n *\n * The absent case is not a member: an agent with no `isolation` shares the session's working tree,\n * and that is the default the key opts out of.\n */\nexport const AGENT_ISOLATIONS = [\"worktree\"] as const;\nexport type AgentIsolation = (typeof AGENT_ISOLATIONS)[number];\n\n/**\n * How long a sub-agent's prompt-cache entries live.\n *\n * The one setting that makes a stable prompt prefix pay: a compiled agent's body is its system\n * prompt, and everything above the trailing volatile block is byte-identical between invocations,\n * so a longer TTL is what lets the second invocation reuse the first one's cache rather than\n * rebuilding it.\n *\n * **Emitted only when an agent declares it, and deliberately never defaulted.** `5m` is Claude\n * Code's own default; `1h` bills cache WRITES at a higher rate, so a generator that set it for\n * every agent it wrote would raise the bill of everyone who installed one without being asked —\n * and it is ignored outright while a subscription runs on usage credits, so the cost would\n * sometimes buy nothing. Whether the trade is worth it depends on how the agent is used, which is\n * the installer's knowledge rather than the author's.\n */\nexport const CACHE_TTLS = [\"5m\", \"1h\"] as const;\nexport type CacheTtl = (typeof CACHE_TTLS)[number];\n\n/**\n * Category definitions indexed by category ID.\n * Partial because not every Category has a category definition (e.g., a marketplace\n * may only define a subset of all possible categories).\n */\nexport type CategoryMap = Partial<Record<Category, CategoryDefinition>>;\n\n/**\n * Full domain selections used throughout the wizard pipeline (store, components, result).\n *\n * Structure: `{ domain: { category: [skillId, ...] } }`\n *\n * - Outer Partial: not all domains need selections (user may skip \"mobile\" entirely)\n * - Inner Partial: within a domain, only some categories may have selections\n * - SkillId[]: a category can have multiple skills unless `CategoryDefinition.exclusive` is true\n */\nexport type DomainSelections = Partial<Record<Domain, Partial<Record<Category, SkillId[]>>>>;\n\n/** Single category definition from skill-categories.ts */\nexport type CategoryDefinition = {\n id: Category;\n displayName: string;\n description: string;\n /** Domain for wizard domain filtering */\n domain?: Domain;\n /** If true, only one skill can be selected in this category (radio behavior). */\n exclusive: boolean;\n /** Display order within domain (lower = earlier) */\n order: number;\n icon?: string;\n};\n\n/** Relationship rules between skills from skill-rules.ts */\nexport type RelationshipDefinitions = {\n /** Selecting one disables the others */\n conflicts: ConflictRule[];\n /** Selecting one shows warning for others but doesn't disable */\n discourages: DiscourageRule[];\n /** Skill A requires skill B to be selected first */\n requires: RequireRule[];\n /** Groups of interchangeable skills for the same purpose */\n alternatives: AlternativeGroup[];\n};\n\n/** Base shape for skill-group rules: a set of related slugs plus a reason */\nexport type SkillGroupRule = {\n /** Skill slugs (resolved to canonical IDs by matrix-loader) */\n skills: SkillSlug[];\n reason: string;\n};\n\n/** Mutual exclusion rule - selecting any one skill disables ALL others */\nexport type ConflictRule = SkillGroupRule;\n\n/** Soft conflict rule - selecting any one shows a warning for ALL others */\nexport type DiscourageRule = SkillGroupRule;\n\n/** Dependency rule - skill A requires skill B to be selected first */\nexport type RequireRule = {\n skill: SkillSlug;\n /** Skill slugs that must be selected before this one */\n needs: SkillSlug[];\n /**\n * If true, only ONE of the `needs` skills is required (OR logic).\n * If false/undefined, ALL are required (AND logic).\n * @default false\n */\n needsAny?: boolean;\n reason: string;\n};\n\n/** Group of interchangeable skills serving the same purpose */\nexport type AlternativeGroup = {\n purpose: string;\n skills: SkillSlug[];\n};\n\n/** Parsed configuration from skill-rules.ts */\nexport type SkillRulesConfig = {\n version: string;\n /** Aggregate relationship rules between skills */\n relationships: RelationshipDefinitions;\n};\n\n/**\n * Slug -> canonical skill ID. Partial because only extracted skills are present.\n *\n * One direction, not two. A reverse `idToSlug` was carried here until 2026-08-23 and had **zero\n * readers anywhere** — every occurrence was a write, and the only thing consuming it was the\n * duplicate-slug asymmetry it made possible. A map nothing reads cannot be out of step with the\n * one that is read, so deleting it retires that whole class rather than guarding it.\n */\nexport type SkillSlugMap = {\n /** Forward: slug -> canonical skill ID */\n slugToId: Partial<Record<SkillSlug, SkillId>>;\n};\n\n/**\n * Output of mergeMatrixWithSkills() combining skill-categories.ts + skill-rules.ts with extracted metadata.\n * This is the primary read model consumed by the wizard and CLI commands.\n */\nexport type MergedSkillsMatrix = {\n version: string;\n categories: CategoryMap;\n /** Indexed by full skill ID for O(1) lookup */\n skills: Partial<Record<SkillId, ResolvedSkill>>;\n /** Stacks with all skill aliases resolved to canonical IDs */\n suggestedStacks: ResolvedStack[];\n /** Bidirectional slug <-> ID mapping */\n slugMap: SkillSlugMap;\n /**\n * Slugs the relationship rules name that no skill in this matrix carries.\n * Absent when every reference resolved. Resolution drops such a reference and\n * warns; carrying the list is what lets `checkMatrixHealth` report the typo\n * against the source that shipped it rather than only logging it.\n */\n unresolvedSlugs?: SkillSlug[];\n /** Explicit domain definitions from agent metadata files */\n agentDefinedDomains?: Partial<Record<AgentName, Domain>>;\n /** ISO timestamp of when this matrix was generated */\n generatedAt: string;\n};\n\n/**\n * Identity/description fields shared by ExtractedSkillMetadata (pre-merge) and\n * ResolvedSkill (post-merge). Both types are `SkillCore & { extras }`; extracting\n * the common shape keeps the two skill surfaces in sync. Purely structural — no\n * runtime change (the intersection is equivalent to the flattened object).\n */\nexport type SkillCore = {\n id: SkillId;\n /** Kebab-case short key for alias resolution, search, and relationship rules (e.g., \"react\") */\n slug: SkillSlug;\n /** Title-cased label for UI display (e.g., \"React\", \"Apollo Client\") */\n displayName: string;\n description: string;\n /** When an AI agent should invoke this skill (decision criteria) */\n usageGuidance?: string;\n /** Matches key in matrix.categories; determines which wizard category grid this skill appears in */\n category: CategoryPath;\n /** Author handle (e.g., \"@vince\") from metadata.yaml */\n author: string;\n /** Relative path from src/ to the skill directory */\n path: string;\n /** True if from .claude/skills/ (user-defined local skill) */\n local?: boolean;\n /** Absolute path to local skill directory */\n localPath?: string;\n /** True if this skill was created outside the CLI's built-in vocabulary */\n custom?: boolean;\n};\n\n/**\n * Single skill with all computed relationships resolved for CLI rendering.\n * Produced by mergeMatrixWithSkills() after resolving aliases, relationships, and sources.\n */\nexport type ResolvedSkill = SkillCore & {\n /** Selecting this skill disables these others (hard exclusion) */\n conflictsWith: SkillRelation[];\n /** Skills that THIS skill requires (must select first) */\n requires: SkillRequirement[];\n /** Other skills that serve the same purpose (informational, not enforced) */\n alternatives: SkillAlternative[];\n /** Selecting this skill shows a warning for these others (soft conflict) */\n discourages: SkillRelation[];\n /** All known sources that provide this skill (populated by multi-source-loader) */\n availableSources?: SkillSource[];\n /** Currently active/installed source (if any) */\n activeSource?: SkillSource;\n};\n\n/** Skill-to-skill relationship with reason */\nexport type SkillRelation = {\n skillId: SkillId;\n reason: string;\n};\n\n/** Resolved skill dependency with AND/OR logic */\nexport type SkillRequirement = {\n skillIds: SkillId[];\n /**\n * If true, only ONE of skillIds is needed (OR).\n * If false, ALL are needed (AND).\n *\n * Always present. The absence this field could have carried is resolved one step upstream:\n * `resolveRelationships` in `lib/matrix/skill-resolution.ts` writes\n * `rule.needsAny ?? false` from the optional {@link RequireRule.needsAny}, so nothing\n * downstream of resolution ever meets an unset value.\n */\n needsAny: boolean;\n reason: string;\n};\n\n/** Alternative skill that serves the same purpose */\nexport type SkillAlternative = {\n skillId: SkillId;\n purpose: string;\n};\n\n/** Stack with resolved skill IDs and agent mappings */\nexport type ResolvedStack = {\n id: string;\n name: string;\n description: string;\n /** Skill selections with resolved full skill IDs by category */\n skills: Partial<Record<AgentName, Partial<Record<Category, SkillId[]>>>>;\n /** Flat list of all skill IDs in this stack */\n allSkillIds: SkillId[];\n philosophy: string;\n /** UI grouping label for the stack selection screen (e.g., \"React\", \"CLI\") */\n group?: string;\n};\n\n/** Short alias used for category-level search (e.g., \"react\", \"zustand\") */\nexport type SkillAlias = string;\n\n/** Source type classification for skill provenance (where the skill comes from) */\nexport const SKILL_SOURCE_TYPES = [\"public\", \"private\", \"local\"] as const;\nexport type SkillSourceType = (typeof SKILL_SOURCE_TYPES)[number];\n\n/**\n * How a project's skills are installed: fully ejected, fully plugin-based, or a\n * mix of both. Derived at runtime from SkillConfig.origin (see deriveInstallMode).\n */\nexport type InstallMode = \"eject\" | \"plugin\" | \"mixed\";\n\n/** A single source from which a skill can be obtained */\nexport type SkillSource = {\n /** Source identifier: \"public\", marketplace name, \"local\" */\n name: string;\n type: SkillSourceType;\n /** Source URL for remote sources (e.g., \"github:acme-corp/claude-skills\") */\n url?: string;\n /** Whether this source's version is currently installed on disk */\n installed: boolean;\n /** How the skill was installed on disk (separate from provenance) — a single skill is never \"mixed\" */\n installMode?: Exclude<InstallMode, \"mixed\">;\n /** True for the primary marketplace source (scoped or default public). Set by multi-source-loader. */\n primary?: boolean;\n};\n\n/** Advisory visual state for a skill option in the wizard UI */\nexport type OptionState =\n | { status: \"normal\" }\n | { status: \"discouraged\"; reason: string }\n | { status: \"incompatible\"; reason: string };\n\n/**\n * Skill option as displayed in the wizard, computed based on current selections.\n * Recomputed by matrix-resolver on every selection change.\n */\nexport type SkillOption = {\n id: SkillId;\n /** True if this skill is currently selected by the user */\n selected: boolean;\n /** True when this skill is selected but has unmet dependency requirements */\n hasUnmetRequirements: boolean;\n /** Explains which requirements are unmet (only set when hasUnmetRequirements is true) */\n unmetRequirementsReason?: string;\n};\n\n/** Result of validating the current skill selections */\nexport type SelectionValidation = {\n valid: boolean;\n errors: ValidationError[];\n};\n\n/** Advisory validation error (non-blocking) */\nexport type ValidationError = {\n type: \"conflict\" | \"missingRequirement\" | \"categoryExclusive\";\n message: string;\n skills: SkillId[];\n};\n\n/**\n * Skill metadata extracted from SKILL.md frontmatter + metadata.yaml before matrix merge.\n *\n * Relationship fields (conflictsWith, requires, etc.) are resolved from\n * centralized group-based declarations in skill-rules.ts — not from individual skill metadata.\n */\nexport type ExtractedSkillMetadata = SkillCore & {\n /** Directory path for filesystem access, e.g. \"web/framework/react\" */\n directoryPath: string;\n /** Domain this skill belongs to (e.g., \"web\", \"api\", \"cli\") */\n domain: Domain;\n};\n","import { AGENT_DEFINITIONS } from \"../generated/agents\"\nimport {\n SKILL_IDS,\n type AgentName,\n type Domain,\n type SkillId,\n} from \"../vendor/generated/source-types\"\nimport { CATALOG } from \"./catalog\"\nimport { agentDomainOf } from \"./domains\"\n\n// The one place that answers \"does this skill arrive preloaded on this agent?\".\n// Both surfaces resolve against it — the editor's default assignments and the\n// CLI's config generator — so the same pick lands the same way on either side.\n//\n// A table hit is necessary but not sufficient: the owner's domain-affinity\n// ruling gates the default, so a role row only preloads on the skill's own\n// domain's agents. Shared skills have no home domain to gate to, and meta\n// skills' rows pass as authored — those two read the row alone.\n//\n// Hand-written and browser-safe: no filesystem, no I/O, nothing Node-only, at\n// import time or ever. The editor bundles this module.\n\n/** What a compiled agent does with a skill it carries. */\nexport type LoadState = \"lazy\" | \"preloaded\"\n\n/**\n * Every role the roster carries, in the order the table lists them. Naming one\n * in an entry preloads that skill on all of that role's agents — `developer`\n * covers web, api, ai and cli alike. `satisfies` binds each one to a role the\n * roster actually has; `flavorOf` below covers the other direction, a roster\n * role this list does not name.\n */\nexport const ROLE_FLAVORS = [\n \"developer\",\n \"planning\",\n \"researcher\",\n \"reviewer\",\n \"tester\",\n \"meta\",\n] as const satisfies readonly (typeof AGENT_DEFINITIONS)[AgentName][\"flavor\"][]\n\n// The listable roles, and nothing else. Anchored to the list above rather than\n// to the roster, so what an entry may say is authored here and the generated\n// agent data is checked against it — not the other way round.\nexport type RoleFlavor = (typeof ROLE_FLAVORS)[number]\n\n/**\n * A list of what IS preloaded: skill → the roles that carry it eagerly. Sparse\n * on purpose, so absence is lazy — the same thing a missing flag means in an\n * emitted config. There is deliberately no way to write \"lazy\" here; a second\n * spelling of the default is a second thing to disagree with it.\n */\nexport type PreloadDefaults = Readonly<\n Partial<Record<SkillId, readonly RoleFlavor[]>>\n>\n\nexport type ResolveLoadStateInput = {\n skillId: SkillId\n agentId: AgentName\n /** The author's word — a curated stack flag, or the user's saved config. */\n explicit?: LoadState\n}\n\n/**\n * The shipped table, authored per skill: the role flavors that carry it\n * eagerly. Grouped by domain, and read as \"what this role reaches for in most\n * of its sessions\" — a skill that matters occasionally is worth loading when\n * it does, not in every prompt. Setup skills are absent by rule: setting a\n * project up is one session, never most of them.\n *\n * The `reviewer` flavor is narrower still, by the owner's ruling: the\n * framework a diff is written in and the review process itself, and nothing\n * else. What to look for in ONE diff — a database's pitfalls, a security list\n * — reaches the reviewer lazily and arrives per diff through the\n * `meta-reviewing-*` checklists, which is why none of them carries a row.\n *\n * The `planning` flavor is narrowed the same way, one kind wider: the PM needs\n * to know WHAT the project is built with in most of its spec sessions, so the\n * framework and the state kind — where the app keeps its state — stay. The\n * depth beneath them is a different question: which database, which UI\n * library, how to make any of them fast or accessible. That arrives when the\n * spec touches it, so those rows name the builders and the researcher and\n * stop there. Consolidated, the planner is domainless like the reviewer, so\n * these rows land on it whatever domain they belong to — a full-stack spec is\n * one agent's work.\n *\n * The AI domain expresses that same breadth under other names, by the owner's\n * 2026-08-07 ruling: the catalog gives it no framework category at all, and an\n * AI project is built on the provider SDK it calls plus the orchestration\n * framework it calls it through — so those two kinds carry the planner the way\n * a framework does. The capability skills sharing the provider category —\n * speech, vision, transcription — are what a feature reaches for rather than\n * what the project runs on, and stay absent like any other occasional body.\n *\n * One skill per line, which is why the formatter is held off below: at 80\n * columns Prettier gives each five-role entry seven lines, turning a 144-row\n * table into 600 and a one-role change into a seven-line diff.\n */\n// prettier-ignore\nexport const PRELOAD_DEFAULTS: PreloadDefaults = {\n // Web — frameworks, the concerns built on them, and the tests\n \"web-framework-angular-standalone\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-framework-react\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-framework-solidjs\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-framework-svelte\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-framework-vue-composition-api\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-meta-framework-astro\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-meta-framework-docusaurus\": [\"developer\", \"planning\", \"researcher\", \"reviewer\"],\n \"web-meta-framework-nextjs\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-meta-framework-nuxt\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-meta-framework-qwik\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-meta-framework-remix\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-meta-framework-sveltekit\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"web-meta-framework-vitepress\": [\"developer\", \"planning\", \"researcher\", \"reviewer\"],\n \"web-state-jotai\": [\"developer\", \"planning\", \"researcher\"],\n \"web-state-mobx\": [\"developer\", \"planning\", \"researcher\"],\n \"web-state-ngrx-signalstore\": [\"developer\", \"planning\", \"researcher\"],\n \"web-state-pinia\": [\"developer\", \"planning\", \"researcher\"],\n \"web-state-redux-toolkit\": [\"developer\", \"planning\", \"researcher\"],\n \"web-state-zustand\": [\"developer\", \"planning\", \"researcher\"],\n \"web-data-fetching-graphql-apollo\": [\"developer\", \"planning\", \"researcher\"],\n \"web-data-fetching-graphql-urql\": [\"developer\", \"planning\", \"researcher\"],\n \"web-data-fetching-swr\": [\"developer\", \"planning\", \"researcher\"],\n \"web-data-fetching-trpc\": [\"developer\", \"planning\", \"researcher\"],\n \"web-server-state-react-query\": [\"developer\", \"planning\", \"researcher\"],\n \"web-forms-react-hook-form\": [\"developer\"],\n \"web-forms-tanstack-form\": [\"developer\"],\n \"web-forms-vee-validate\": [\"developer\"],\n \"web-forms-zod-validation\": [\"developer\", \"researcher\"],\n \"web-styling-cva\": [\"developer\", \"researcher\"],\n \"web-styling-design-tokens\": [\"developer\", \"researcher\"],\n \"web-styling-scss-modules\": [\"developer\", \"researcher\"],\n \"web-styling-tailwind\": [\"developer\", \"researcher\"],\n \"web-ui-ant-design\": [\"developer\", \"researcher\"],\n \"web-ui-base-ui\": [\"developer\", \"researcher\"],\n \"web-ui-chakra-ui\": [\"developer\", \"researcher\"],\n \"web-ui-headless-ui\": [\"developer\", \"researcher\"],\n \"web-ui-mantine\": [\"developer\", \"researcher\"],\n \"web-ui-mui\": [\"developer\", \"researcher\"],\n \"web-ui-radix-ui\": [\"developer\", \"researcher\"],\n \"web-ui-shadcn-ui\": [\"developer\", \"researcher\"],\n \"web-ui-vuetify\": [\"developer\", \"researcher\"],\n \"web-performance-web-performance\": [\"developer\", \"researcher\"],\n \"web-accessibility-web-accessibility\": [\"developer\", \"researcher\"],\n \"web-routing-react-router\": [\"developer\"],\n \"web-routing-tanstack-router\": [\"developer\"],\n \"web-error-handling-result-types\": [\"developer\"],\n \"web-i18n-next-intl\": [\"developer\"],\n \"web-i18n-react-intl\": [\"developer\"],\n \"web-i18n-vue-i18n\": [\"developer\"],\n \"web-pwa-offline-first\": [\"developer\", \"researcher\"],\n \"web-mocks-msw\": [\"tester\"],\n \"web-testing-cypress-e2e\": [\"tester\"],\n \"web-testing-playwright-e2e\": [\"tester\"],\n \"web-testing-react-testing-library\": [\"tester\"],\n \"web-testing-visual-regression\": [\"tester\"],\n \"web-testing-vitest\": [\"tester\"],\n \"web-testing-vue-test-utils\": [\"tester\"],\n \"web-utilities-native-js\": [\"developer\"],\n \"web-utilities-vueuse\": [\"developer\"],\n\n // API — frameworks, data, auth, and the safety around them\n \"api-framework-express\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"api-framework-fastify\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"api-framework-hono\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"api-framework-nestjs\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"api-framework-elysia\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"api-auth-better-auth-drizzle-hono\": [\"developer\", \"researcher\"],\n \"api-auth-clerk\": [\"developer\"],\n \"api-auth-nextauth\": [\"developer\"],\n \"api-baas-appwrite\": [\"developer\", \"researcher\"],\n \"api-baas-firebase\": [\"developer\", \"researcher\"],\n \"api-baas-neon\": [\"developer\", \"researcher\"],\n \"api-baas-planetscale\": [\"developer\", \"researcher\"],\n \"api-baas-supabase\": [\"developer\", \"researcher\"],\n \"api-baas-turso\": [\"developer\", \"researcher\"],\n \"api-database-cockroachdb\": [\"developer\", \"researcher\"],\n \"api-database-drizzle\": [\"developer\", \"researcher\"],\n \"api-database-edgedb\": [\"developer\", \"researcher\"],\n \"api-database-knex\": [\"developer\", \"researcher\"],\n \"api-database-mongodb\": [\"developer\", \"researcher\"],\n \"api-database-mongoose\": [\"developer\", \"researcher\"],\n \"api-database-mysql\": [\"developer\", \"researcher\"],\n \"api-database-postgresql\": [\"developer\", \"researcher\"],\n \"api-database-prisma\": [\"developer\", \"researcher\"],\n \"api-database-redis\": [\"developer\", \"researcher\"],\n \"api-database-sequelize\": [\"developer\", \"researcher\"],\n \"api-database-surrealdb\": [\"developer\", \"researcher\"],\n \"api-database-typeorm\": [\"developer\", \"researcher\"],\n \"api-database-upstash\": [\"developer\", \"researcher\"],\n \"api-database-vercel-kv\": [\"developer\", \"researcher\"],\n \"api-database-vercel-postgres\": [\"developer\", \"researcher\"],\n \"api-graphql-apollo-server\": [\"developer\", \"researcher\", \"tester\"],\n \"api-graphql-mercurius\": [\"developer\", \"researcher\", \"tester\"],\n \"api-graphql-yoga\": [\"developer\", \"researcher\", \"tester\"],\n \"api-performance-api-performance\": [\"developer\", \"researcher\"],\n \"api-specs-openapi\": [\"developer\"],\n \"api-observability-axiom-pino-sentry\": [\"developer\"],\n\n // Mobile\n \"mobile-framework-react-native\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"mobile-framework-expo\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"mobile-navigation-expo-router\": [\"developer\"],\n \"mobile-navigation-react-navigation\": [\"developer\"],\n \"mobile-styling-nativewind\": [\"developer\", \"researcher\"],\n \"mobile-styling-unistyles\": [\"developer\", \"researcher\"],\n \"mobile-ui-components-react-native-paper\": [\"developer\", \"researcher\"],\n \"mobile-ui-components-tamagui\": [\"developer\", \"researcher\"],\n \"mobile-storage-sqlite-powersync\": [\"developer\", \"researcher\"],\n \"mobile-storage-watermelondb\": [\"developer\", \"researcher\"],\n \"mobile-performance-react-native\": [\"developer\", \"researcher\"],\n \"mobile-testing-detox\": [\"tester\"],\n \"mobile-testing-maestro\": [\"tester\"],\n\n // Desktop\n \"desktop-framework-electron\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"desktop-framework-tauri\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"desktop-backend-tauri\": [\"developer\", \"researcher\"],\n \"desktop-ipc-electron\": [\"developer\", \"researcher\"],\n \"desktop-security-tauri\": [\"developer\", \"researcher\"],\n \"desktop-plugins-tauri\": [\"developer\"],\n \"desktop-testing-electron\": [\"tester\"],\n \"desktop-storage-electron\": [\"developer\", \"researcher\"],\n\n // AI — the provider and the orchestration around it are what the project is\n // built on, so they carry the planner too; evals and tracing test\n \"ai-infrastructure-huggingface-inference\": [\"developer\", \"researcher\"],\n \"ai-infrastructure-ollama\": [\"developer\", \"researcher\"],\n \"ai-infrastructure-replicate\": [\"developer\", \"researcher\"],\n \"ai-infrastructure-together-ai\": [\"developer\", \"researcher\"],\n \"ai-observability-langfuse\": [\"tester\"],\n \"ai-observability-promptfoo\": [\"tester\"],\n \"ai-orchestration-langchain\": [\"developer\", \"planning\", \"researcher\"],\n \"ai-orchestration-llamaindex\": [\"developer\", \"planning\", \"researcher\"],\n \"ai-orchestration-vercel-ai-sdk\": [\"developer\", \"planning\", \"researcher\"],\n \"ai-patterns-tool-use-patterns\": [\"developer\", \"researcher\"],\n \"ai-provider-anthropic-sdk\": [\"developer\", \"planning\", \"researcher\"],\n \"ai-provider-cohere-sdk\": [\"developer\", \"planning\", \"researcher\"],\n \"ai-provider-google-gemini-sdk\": [\"developer\", \"planning\", \"researcher\"],\n \"ai-provider-mistral-sdk\": [\"developer\", \"planning\", \"researcher\"],\n \"ai-provider-openai-sdk\": [\"developer\", \"planning\", \"researcher\"],\n\n // CLI — the framework and its prompts are the whole surface\n \"cli-framework-cli-commander\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"cli-framework-oclif-ink\": [\"developer\", \"planning\", \"researcher\", \"reviewer\", \"tester\"],\n \"cli-prompts-clack\": [\"developer\", \"researcher\", \"tester\"],\n\n // Infra — deployment is occasional, so almost nothing preloads\n \"infra-platform-cloudflare-workers\": [\"developer\"],\n\n // Meta — the review PROCESS is every review session's material; the domain\n // checklists are one diff's, so they carry no row and arrive per diff\n \"meta-design-composable-components\": [\"developer\"],\n \"meta-design-expressive-typescript\": [\"developer\", \"meta\"],\n \"meta-methodology-research-methodology\": [\"researcher\", \"meta\"],\n \"meta-reviewing-reviewing\": [\"reviewer\"],\n\n // Shared — carried across every implementation domain\n \"shared-security-auth-security\": [\"developer\", \"researcher\"],\n}\n\nconst KNOWN_SKILL_IDS = new Set<string>(SKILL_IDS)\nconst KNOWN_AGENT_IDS = new Set<string>(Object.keys(AGENT_DEFINITIONS))\nconst LISTABLE_FLAVORS = new Set<string>(ROLE_FLAVORS)\n\nconst assertKnownSkill = (skillId: SkillId) => {\n if (!KNOWN_SKILL_IDS.has(skillId))\n throw new Error(`Skill not found: ${skillId}`)\n}\n\nconst assertKnownAgent = (agentId: AgentName) => {\n if (!KNOWN_AGENT_IDS.has(agentId))\n throw new Error(`Agent not found: ${agentId}`)\n}\n\nconst isRoleFlavor = (flavor: string): flavor is RoleFlavor =>\n LISTABLE_FLAVORS.has(flavor)\n\n// A role the roster carries and `ROLE_FLAVORS` does not name is a role no\n// entry can be written for. Resolving it to lazy would read like a table that\n// left it out on purpose, so it is an error like any other unknown id.\n//\n// Exported because the read model's `SubAgent` carries a `RoleFlavor` too, and\n// two spellings of \"is this role sayable?\" is one more than the answer needs.\nexport const flavorOf = (agentId: AgentName): RoleFlavor => {\n const flavor = AGENT_DEFINITIONS[agentId].flavor\n // `String` because the guard narrows this branch to `never`: today's generated\n // roster names no flavor `ROLE_FLAVORS` lacks, so the two unions coincide and\n // the failure is unreachable *as typed*. Regenerating the roster with a new\n // flavor is what makes it reachable, which is the case worth naming — so the\n // message keeps the value rather than the branch being deleted for saying\n // something the current data makes true.\n if (!isRoleFlavor(flavor))\n throw new Error(\n `Role flavor not found: ${String(flavor)} (agent: ${agentId})`\n )\n\n return flavor\n}\n\n// Sparse both ways: a skill with no entry names no role, and an entry names\n// only the roles that carry it eagerly.\nconst listsFlavor = (\n listedFlavors: readonly RoleFlavor[] | undefined,\n flavor: RoleFlavor\n) => listedFlavors !== undefined && listedFlavors.includes(flavor)\n\n// The union knows the id, so a catalog with no domain for it is generated data\n// out of step with itself — an error like an unlistable flavor, not a lazy.\nconst domainOfSkill = (skillId: SkillId): Domain => {\n const skill = CATALOG.skillsById[skillId]\n if (!skill) throw new Error(`Skill domain not found: ${skillId}`)\n\n return skill.domainId\n}\n\n// A role agent with no domain prefix — the consolidated `reviewer` and `pm`.\n// Their ids trapdoor into the meta GROUP for display, but their roles serve\n// every implementation domain, which is exactly why they carry no prefix.\nconst isDomainlessRoleAgent = (agentId: AgentName): boolean =>\n agentDomainOf(agentId) === \"meta\" &&\n AGENT_DEFINITIONS[agentId].flavor !== \"meta\"\n\n// The domain-affinity gate on the default tier: a role row speaks for the\n// skill's own domain's agents. `shared` belongs to every implementation\n// domain, and a meta row names its flavors deliberately — both pass; a\n// cross-domain pair fails even on a role match, because an api developer is\n// not a web developer. A domainless role agent has no domain to fail the\n// match on, so its preloads are exactly the rows as authored.\nconst hasDomainAffinity = (skillDomain: Domain, agentId: AgentName): boolean =>\n skillDomain === \"shared\" ||\n skillDomain === \"meta\" ||\n skillDomain === agentDomainOf(agentId) ||\n isDomainlessRoleAgent(agentId)\n\n/**\n * Binds a resolver to a table. An explicit flag wins, then the gated table,\n * then lazy — but an id that does not exist is an error either way, since\n * taking the flag first is exactly how a typo in a saved config would go\n * unread.\n */\nexport const createLoadStateResolver =\n (defaults: PreloadDefaults) =>\n ({ skillId, agentId, explicit }: ResolveLoadStateInput): LoadState => {\n assertKnownSkill(skillId)\n assertKnownAgent(agentId)\n\n if (explicit !== undefined) return explicit\n\n return listsFlavor(defaults[skillId], flavorOf(agentId)) &&\n hasDomainAffinity(domainOfSkill(skillId), agentId)\n ? \"preloaded\"\n : \"lazy\"\n }\n\n/** The resolver both surfaces read: `PRELOAD_DEFAULTS`, bound. */\nexport const resolveLoadState = createLoadStateResolver(PRELOAD_DEFAULTS)\n","import { AGENT_DEFINITIONS } from \"../generated/agents\"\nimport {\n AGENT_NAMES,\n type AgentName,\n type Domain,\n} from \"../vendor/generated/source-types\"\nimport type { ModelName } from \"../vendor/matrix\"\nimport {\n agentDefinitionsSchema,\n type ParsedAgentDefinition,\n} from \"../built-in-agents\"\nimport { groupBy, indexById } from \"./collections\"\nimport { DOMAIN_LABELS, agentDomainOf, compareDomains } from \"./domains\"\nimport { flavorOf, type RoleFlavor } from \"./preload-defaults\"\n\nexport type SubAgent = {\n id: AgentName\n // Label inside its domain group — \"Developer\" for `web-developer`.\n label: string\n title: string\n description: string\n model?: ModelName\n domainId: Domain\n flavor: RoleFlavor\n}\n\nexport type SubAgentGroup = {\n domainId: Domain\n label: string\n agents: SubAgent[]\n}\n\n// Role fragments that are initialisms, so `pm` reads \"PM\" and not \"Pm\".\nconst ACRONYMS = new Set([\"pm\", \"ai\", \"api\", \"cli\", \"ui\", \"ux\", \"qa\"])\n\nconst titleCase = (words: string) =>\n words\n .split(\"-\")\n .map((word) =>\n ACRONYMS.has(word)\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join(\" \")\n\n// `web-researcher` → \"Researcher\"; `codex-keeper` → \"Codex Keeper\".\nconst labelOf = (agentId: string, domainId: Domain) =>\n agentId.startsWith(`${domainId}-`)\n ? titleCase(agentId.slice(domainId.length + 1))\n : titleCase(agentId)\n\nconst toSubAgent = (definition: ParsedAgentDefinition): SubAgent => {\n const domainId = agentDomainOf(definition.id)\n return {\n id: definition.id,\n label: labelOf(definition.id, domainId),\n title: definition.title,\n description: definition.description,\n ...(definition.model !== undefined && { model: definition.model }),\n domainId,\n // The same string the definition carries, read back through the preload\n // table's list of sayable roles — a role no entry could name is an error\n // there, so it is one here rather than a flavor nothing routes on.\n flavor: flavorOf(definition.id),\n }\n}\n\nconst toSubAgentGroup = (\n domainId: Domain,\n agents: SubAgent[]\n): SubAgentGroup => ({\n domainId,\n label: DOMAIN_LABELS[domainId],\n agents: agents.sort((a, b) => a.label.localeCompare(b.label)),\n})\n\nconst buildSubAgentGroups = (): SubAgentGroup[] => {\n const agents = Object.values(\n agentDefinitionsSchema.parse(AGENT_DEFINITIONS)\n ).map(toSubAgent)\n\n return [...groupBy(agents, (agent) => agent.domainId)]\n .sort(([a], [b]) => compareDomains(a, b))\n .map(([domainId, domainAgents]) => toSubAgentGroup(domainId, domainAgents))\n}\n\nexport const SUB_AGENT_GROUPS = buildSubAgentGroups()\n\nexport const SUB_AGENTS_BY_ID: Partial<Record<AgentName, SubAgent>> = indexById(\n SUB_AGENT_GROUPS.flatMap((group) => group.agents)\n)\n\nconst ROSTER_IDS = new Set<string>(AGENT_NAMES)\n\nconst isAgentName = (agentId: string): agentId is AgentName =>\n ROSTER_IDS.has(agentId)\n\n/**\n * The roster asked with an open id — the counterpart to `skillById`. The roster\n * itself is closed, but the surfaces reading it hold ids as plain strings (a\n * saved configuration, a persisted assignment), and one the CLI has since\n * retired is an answer rather than a crash.\n */\nexport const subAgentById = (agentId: string): SubAgent | undefined =>\n isAgentName(agentId) ? SUB_AGENTS_BY_ID[agentId] : undefined\n","import type { AgentName, SkillId } from \"../vendor/generated/source-types\"\nimport { isShippedSkillId, skillById, type CatalogSkill } from \"./catalog\"\nimport {\n PRELOAD_DEFAULTS,\n createLoadStateResolver,\n type LoadState,\n type PreloadDefaults,\n type RoleFlavor,\n} from \"./preload-defaults\"\nimport { SUB_AGENT_GROUPS, type SubAgent } from \"./sub-agents\"\n\n// The one place that answers \"which sub-agents does a freshly picked skill\n// reach, and how does each of them load it?\". Both surfaces resolve against it\n// — the editor's default assignments and the CLI's config generator — so the\n// owner's relevance ruling (\"only add skills to subagents that will reasonably\n// use it\") has exactly one spelling. No broadcast, not even lazy: a sub-agent\n// carries only skills it would reasonably use.\n//\n// Hand-written and browser-safe: no filesystem, no I/O, nothing Node-only, at\n// import time or ever. The editor bundles this module.\n\n/** One sub-agent a skill reaches, and how it arrives there. */\nexport type AssignmentTarget = {\n agentId: AgentName\n load: LoadState\n}\n\n/**\n * What targeting reads of a skill, and the whole of it: the domain it belongs\n * to, the category it sits in, and the id the shipped tables are keyed by.\n * `CatalogSkill` satisfies it, so an id alone still resolves through the\n * catalog — but a skill from another marketplace, whose id carries that\n * marketplace's namespace and is therefore in no catalog-keyed table, states\n * the taxonomy its own metadata carries and is placed on that.\n */\nexport type SkillTaxonomy = {\n id: string\n domainId: CatalogSkill[\"domainId\"]\n categoryId: CatalogSkill[\"categoryId\"]\n}\n\n// The roster in display order — domain groups first, agents by label within\n// each — so both surfaces list a skill's reach the same way.\nconst ROSTER: readonly SubAgent[] = SUB_AGENT_GROUPS.flatMap(\n (group) => group.agents\n)\n\n// A role agent with no domain prefix — the consolidated `reviewer` and `pm`.\n// Their ids trapdoor into the meta GROUP for display, but their roles are\n// cross-domain by nature: any implementation domain's diff is the reviewer's\n// material, and any domain's feature is the planner's.\nconst isCrossDomainRoleAgent = (agent: SubAgent) =>\n agent.domainId === \"meta\" && agent.flavor !== \"meta\"\n\n// An implementation-domain skill reaches its own domain's agents plus the\n// cross-domain role agents — the reviewer reviews web and api diffs alike and\n// the PM specs both, so web and api skills alike must be able to reach them.\nconst implementationDomainReach = (domainId: CatalogSkill[\"domainId\"]) =>\n ROSTER.filter(\n (agent) => agent.domainId === domainId || isCrossDomainRoleAgent(agent)\n )\n\n// A role's craft: the categories its agents reach with or without a row, keyed\n// by the flavor whose craft it is. One map rather than a rule per role, so a\n// second flavor earning a craft is an entry here and nothing else.\n//\n// The reviewer's own reviewing craft is one: the process skill preloads by\n// row, the domain checklists carry no row at all — lazy by absence, per the\n// owner's loading design — yet must still reach the reviewer, because being\n// listed in its activation protocol and loaded per-diff is what they are for.\n// The design craft is the other, by the owner's 2026-08-06 ruling: how code is\n// meant to read is what a diff is judged against.\n//\n// The planner's crafts are the same two shapes one role over. The methodology\n// craft is the 2026-08-07 ruling's: how research is run is what a spec's\n// evidence is gathered by. The planning playbooks are the reviewing\n// checklists': row-less per-spec material, listed in the activation protocol\n// and loaded when the spec touches their artifact classes. Each names a domain\n// in its slug, but the planner it reaches is domainless — one PM specs web and\n// api features alike — so the category is the whole rule, as it is for the\n// reviewer's checklists.\n//\n// The meta agents' craft is the design and methodology bodies, by the owner's\n// 2026-08-30 ruling (CLI-846). Before it they had NO entry here and no row named\n// their flavor, which meant `metaSkillReach` admitted them for nothing: four of\n// eighteen agents sat outside the default system entirely and no pick could\n// reach them. They take the two bodies that are nobody's role in particular —\n// how code is meant to read, and how research is run — because that is what a\n// convention-keeper enforces, a codex-keeper documents against and a\n// skill-summoner writes with. The reviewing and planning crafts stay off them\n// deliberately: a diff checklist and a spec playbook are a role's material.\n//\n// A craft reach is targeting alone. Eagerness stays the row's answer, so a\n// craft the rows never name for that flavor arrives lazily — which is how the\n// reviewer receives the design skills its developers preload, and how the PM\n// receives the methodology skill its researchers preload.\nconst CRAFT_CATEGORIES_BY_FLAVOR: Partial<\n Record<RoleFlavor, readonly CatalogSkill[\"categoryId\"][]>\n> = {\n meta: [\"meta-design\", \"meta-methodology\"],\n planning: [\"meta-methodology\", \"meta-planning\"],\n reviewer: [\"meta-reviewing\", \"meta-design\"],\n}\n\nconst isRoleCraftFor = (skill: SkillTaxonomy, agent: SubAgent): boolean => {\n const craft = CRAFT_CATEGORIES_BY_FLAVOR[agent.flavor]\n\n return craft !== undefined && craft.includes(skill.categoryId)\n}\n\n// A meta skill reaches exactly the flavors its authored row names — across\n// implementation domains and the meta agents alike. No row, no agents — except\n// the crafts: a role reaches its own craft categories with or without a row, and\n// since CLI-846 the meta flavor has a craft of its own. Relevance is otherwise\n// the author's to claim.\nconst metaSkillReach = (\n skill: SkillTaxonomy,\n rowFlavors: readonly RoleFlavor[]\n): readonly SubAgent[] => {\n const listedFlavors = new Set<string>(rowFlavors)\n\n return ROSTER.filter(\n (agent) => listedFlavors.has(agent.flavor) || isRoleCraftFor(skill, agent)\n )\n}\n\nconst targetsOf = (\n skill: SkillTaxonomy,\n rowFlavors: readonly RoleFlavor[]\n): readonly SubAgent[] => {\n if (skill.domainId === \"meta\") return metaSkillReach(skill, rowFlavors)\n // Every agent, the meta ones included since CLI-846: what a workspace is built\n // with is the convention-keeper's subject as much as the developer's.\n if (skill.domainId === \"shared\") return ROSTER\n\n return implementationDomainReach(skill.domainId)\n}\n\n// The caller's word when it has one, the catalog's when it does not: the •••\n// panel and a curated stack hold nothing but an id, while a loaded marketplace\n// hands its skills' own metadata straight through.\nconst taxonomyOf = (\n skill: string | SkillTaxonomy\n): SkillTaxonomy | undefined =>\n typeof skill === \"string\" ? skillById(skill) : skill\n\n// The shipped rows are keyed by the shipped catalog's own ids, so only a\n// shipped skill can carry one: another marketplace's id is outside the table by\n// construction rather than left out of it. `undefined` is therefore both\n// answers at once — no such skill, and a skill from somewhere else — because\n// the table treats them identically.\nconst shippedIdOf = (\n catalogued: CatalogSkill | undefined\n): SkillId | undefined =>\n catalogued !== undefined && isShippedSkillId(catalogued.id)\n ? catalogued.id\n : undefined\n\nconst rowFlavorsOf = (\n defaults: PreloadDefaults,\n shippedId: SkillId | undefined\n): readonly RoleFlavor[] =>\n shippedId === undefined ? [] : (defaults[shippedId] ?? [])\n\n/**\n * Binds a resolver to a table: targeting from the skill's domain and category,\n * load per pair from the same table's gated load resolver. A caller holding a\n * skill's taxonomy states it and is answered on it, whichever marketplace the\n * id belongs to; a caller holding only an id is answered from the catalog. An\n * id the catalog does not carry and nobody named a taxonomy for — added from\n * GitHub this session, or stale — reaches nobody: relevance unknown, so callers\n * hand it to manual assignment instead of any default.\n *\n * Eagerness stays the catalog's answer, because the rows are its ids': a\n * marketplace's own skill matches none and arrives lazily, exactly as a catalog\n * skill the table leaves out does.\n */\nexport const createAssignmentResolver = (defaults: PreloadDefaults) => {\n const resolveLoad = createLoadStateResolver(defaults)\n\n return (skill: string | SkillTaxonomy): readonly AssignmentTarget[] => {\n const taxonomy = taxonomyOf(skill)\n if (!taxonomy) return []\n\n // Both the row and the gated load resolver are the shipped catalog's, so a\n // skill it does not carry has neither: no row to be eager by, and no id the\n // load resolver would accept. Lazy, the way absence always reads.\n const shippedId = shippedIdOf(skillById(taxonomy.id))\n const loadOn = (agentId: AgentName): LoadState =>\n shippedId === undefined\n ? \"lazy\"\n : resolveLoad({ skillId: shippedId, agentId })\n\n return targetsOf(taxonomy, rowFlavorsOf(defaults, shippedId)).map(\n (agent) => ({ agentId: agent.id, load: loadOn(agent.id) })\n )\n }\n}\n\n/** The resolver both surfaces read: `PRELOAD_DEFAULTS`, bound. */\nexport const resolveAssignment = createAssignmentResolver(PRELOAD_DEFAULTS)\n","import type { AgentName } from \"../vendor/generated/source-types\"\nimport type { Matrix, MatrixStack } from \"../matrix-schema\"\nimport { resolveAssignment, type AssignmentTarget } from \"./assignment-defaults\"\nimport type { LoadState } from \"./preload-defaults\"\nimport { MATRIX } from \"./source\"\nimport { subAgentById } from \"./sub-agents\"\n\nexport type CatalogStack = {\n id: string\n name: string\n description: string\n philosophy: string\n // Never set by the CLI today. The stack rail renders flat until it is.\n group?: string\n skillCount: number\n}\n\n// What applying a stack means, in terms the config store can consume directly.\n// Deliberately not the store's own shape — this package knows nothing about the app.\nexport type StackExpansion = {\n skillIds: string[]\n // Which sub-agents each skill is assigned to, and how each of them loads it.\n assignmentsBySkill: Record<string, AssignmentTarget[]>\n}\n\nconst toCatalogStack = (stack: MatrixStack): CatalogStack => ({\n id: stack.id,\n name: stack.name,\n description: stack.description,\n philosophy: stack.philosophy,\n ...(stack.group !== undefined && { group: stack.group }),\n skillCount: stack.allSkillIds.length,\n})\n\n/**\n * The stack rail's cells, over any catalogue in the wire shape — the\n * counterpart to `buildCatalog`, and exported for the same reason: a\n * marketplace ships its own stacks and they must render by the same rules.\n */\nexport const buildStacks = (matrix: Matrix): CatalogStack[] =>\n matrix.suggestedStacks.map(toCatalogStack)\n\n/** The vendored public catalogue's stacks. */\nexport const STACKS: CatalogStack[] = buildStacks(MATRIX)\n\n// A stack's skill ids are its marketplace's own, but its AGENT ids are not:\n// marketplaces do not ship sub-agents, so the roster is the vendored one and a\n// stack can only staff an agent that exists. One naming an agent this build has\n// never heard of staffs nobody with it, rather than writing an assignment\n// nothing downstream could render.\nconst rosteredAgents = (stack: MatrixStack) =>\n Object.keys(stack.skills)\n .map((agentId) => subAgentById(agentId))\n .filter((agent) => agent !== undefined)\n .map((agent) => agent.id)\n\n// Inverts the stack's agent → category → skills nesting into skill → agents.\nconst toAgentsBySkill = (stack: MatrixStack): Record<string, AgentName[]> => {\n const agentsBySkill: Record<string, AgentName[]> = {}\n for (const agentId of rosteredAgents(stack)) {\n for (const skillId of Object.values(stack.skills[agentId] ?? {}).flat()) {\n const agents = (agentsBySkill[skillId] ??= [])\n if (!agents.includes(agentId)) agents.push(agentId)\n }\n }\n return agentsBySkill\n}\n\n// The stack names which sub-agents carry a skill; the shared resolver answers\n// how each of them loads it — the same table the CLI writes into config.ts and\n// the same one a hand-picked skill resolves against. Per pair, so a framework\n// preloads on its own domain's agents and arrives lazily on the summoners that\n// also carry it. A pair the resolver does not target has no eagerness to claim.\nconst toLoadByAgent = (skillId: string): Map<string, LoadState> =>\n new Map(\n resolveAssignment(skillId).map(({ agentId, load }) => [agentId, load])\n )\n\nconst toAssignmentsBySkill = (\n stack: MatrixStack\n): Record<string, AssignmentTarget[]> =>\n Object.fromEntries(\n Object.entries(toAgentsBySkill(stack)).map(([skillId, agentIds]) => {\n const loadByAgent = toLoadByAgent(skillId)\n\n return [\n skillId,\n agentIds.map((agentId) => ({\n agentId,\n load: loadByAgent.get(agentId) ?? \"lazy\",\n })),\n ]\n })\n )\n\n/**\n * Binds the expander to a catalogue. A marketplace's stacks name that\n * marketplace's skills, so a stack can only be expanded against the catalogue\n * it came from — asking the public one would strand every id.\n */\nexport const createStackExpander =\n (matrix: Matrix) =>\n (stackId: string): StackExpansion | undefined => {\n const stack = matrix.suggestedStacks.find(\n (candidate) => candidate.id === stackId\n )\n if (!stack) return undefined\n\n return {\n skillIds: stack.allSkillIds,\n assignmentsBySkill: toAssignmentsBySkill(stack),\n }\n }\n\n/** The expander bound to the vendored catalogue. */\nexport const expandStack = createStackExpander(MATRIX)\n","import type { SeedSkill } from \"../seed\"\n\n// How a fresh pick installs before anyone touches it: as a plugin, into the\n// user's own ~/.claude. Spelled once and read by every surface — the editor's\n// fresh skill entry and resting agent scope, and the CLI's seed decode — so\n// \"what does an untouched pick do?\" has exactly one answer instead of the\n// three that used to disagree.\n//\n// Typed against the seed vocabulary because the wire is where the surfaces\n// meet: a default this object could name that a payload could not carry would\n// be a default that cannot travel.\nexport const DEFAULT_SELECTION_OPTIONS = {\n install: \"plugin\",\n scope: \"global\",\n} as const satisfies Pick<SeedSkill, \"install\" | \"scope\">\n","// The selection semantics, implemented once. Both surfaces delegate here —\n// the editor's `derive.ts` and the CLI's `matrix-resolver.ts` /\n// `build-step-logic.ts` — so a verdict is the same verdict wherever it is\n// rendered; `contract/selection-scenarios.ts` is the specification this module\n// answers to, and each side's runner holds its own view layer to the same\n// scenarios.\n//\n// Verdicts are structured rather than worded: this module decides *that* a\n// skill is out of reach and *why*, and each surface renders the why in its own\n// words (\"Needs Svelte\" in the editor, \"requires Svelte which conflicts with\n// current selection\" in the wizard).\n//\n// Parameterized over the catalogue like `createLoadStateResolver`, never\n// closed over one: the CLI judges a merged matrix that carries local skills\n// the shipped catalogue has never heard of, which is also why the ids here are\n// `string` rather than `SkillId`.\n//\n// Hand-written and browser-safe: no filesystem, no I/O, nothing Node-only, at\n// import time or ever. The editor bundles this module.\n\nimport type { Matrix } from \"../matrix-schema\"\nimport { MATRIX } from \"./source\"\n\nexport type SkillRequirementFacts = {\n skillIds: readonly string[]\n /** One of these is enough; otherwise every one is needed. */\n needsAny: boolean\n}\n\n/** What the semantics read about one skill — relationships, not presentation. */\nexport type SelectionSkillFacts = {\n id: string\n categoryId: string\n /** Selecting either side hard-excludes the other; declared on one is enough. */\n conflictsWith: readonly string[]\n /** Soft conflict — warn, never disable. The reason is authored upstream. */\n discourages: readonly { skillId: string; reason: string }[]\n /** What this skill is built on: the closure and the fixpoint both walk it. */\n requires: readonly SkillRequirementFacts[]\n}\n\nexport type SelectionCatalogFacts = {\n skills: readonly SelectionSkillFacts[]\n /** Pick-one categories: a click swaps the sibling out rather than joining it. */\n exclusiveCategoryIds: ReadonlySet<string>\n}\n\n// A verdict is about possibility, never presence: a skill is ruled out only\n// once the selection has made it impossible, never merely because the host it\n// prefers has not been clicked. The `compatibleWith` whitelist stated the\n// second reading and was deleted on the owner's 2026-08-07 ruling (CLI-389\n// phase C) — see `.ai-docs/reference/features/skills-and-matrix.md`.\nexport type IncompatibilityCause =\n // Something the selection reaches conflicts with it outright.\n | { kind: \"conflict\"; skillId: string }\n // A requirement whose named candidates the selection has ruled out —\n // `lostIds` are the ones actually gone, the whole group for a lost choice.\n | {\n kind: \"unreachableRequirement\"\n requirement: SkillRequirementFacts\n lostIds: readonly string[]\n }\n\nexport type SelectionVerdict =\n | { status: \"normal\" }\n | { status: \"discouraged\"; reason: string }\n | { status: \"incompatible\"; cause: IncompatibilityCause }\n\n/** One selection, judged: the sets it settles and the verdicts it implies. */\nexport type SelectionJudgement = {\n /** Selected, plus everything the selection necessarily also chooses. */\n reached: ReadonlySet<string>\n /** Ruled out by that, dependents included, to a fixpoint. */\n outOfReach: ReadonlySet<string>\n /** The closure minus the selection — what was chosen without being clicked. */\n implied: readonly string[]\n /**\n * The verdict a cell renders. Inside a pick-one category an incompatibility\n * is re-judged against the selection a click would produce — the swap drops\n * every same-category member, selected or implied — so a conflict the swap\n * resolves is forgiven and an impossibility it leaves standing keeps its\n * reason.\n */\n verdictOf: (skillId: string) => SelectionVerdict\n /** The verdict before the swap rule — what the selection as it stands says. */\n incompatibilityOf: (skillId: string) => IncompatibilityCause | undefined\n /** The soft warning alone, whatever else the skill's verdict says. */\n discourageReasonOf: (skillId: string) => string | undefined\n}\n\nexport type SelectionSemantics = (\n selection: readonly string[]\n) => SelectionJudgement\n\n// A group offering a choice commits the user to none of the options: \"Pinia\n// needs Vue *or* Nuxt\" cannot say which, so it implies neither.\nconst isAmbiguous = (requirement: SkillRequirementFacts) =>\n requirement.needsAny && requirement.skillIds.length > 1\n\n// The judging material for one verdict pass. The base pass judges the\n// selection as it stands; the swap pass judges the selection a pick-one click\n// would produce.\ntype JudgingSets = {\n reached: ReadonlySet<string>\n outOfReach: ReadonlySet<string>\n}\n\nexport const createSelectionSemantics = (\n catalog: SelectionCatalogFacts\n): SelectionSemantics => {\n const skillsById = new Map(catalog.skills.map((skill) => [skill.id, skill]))\n\n // Conflicts are declared on either side, so the symmetric view is built once\n // and every lookup is one direction.\n const conflictIdsBySkill = new Map<string, Set<string>>()\n const noteConflict = (skillId: string, otherId: string) => {\n const held = conflictIdsBySkill.get(skillId)\n if (held) held.add(otherId)\n else conflictIdsBySkill.set(skillId, new Set([otherId]))\n }\n for (const skill of catalog.skills) {\n for (const otherId of skill.conflictsWith) {\n noteConflict(skill.id, otherId)\n noteConflict(otherId, skill.id)\n }\n }\n\n const mustHold = (skillId: string): SelectionSkillFacts => {\n const skill = skillsById.get(skillId)\n if (!skill) throw new Error(`Skill not found: ${skillId}`)\n return skill\n }\n\n // What choosing this skill necessarily also chooses.\n const directlyImpliedBy = (skillId: string) =>\n (skillsById.get(skillId)?.requires ?? [])\n .filter((requirement) => !isAmbiguous(requirement))\n .flatMap((requirement) => requirement.skillIds)\n\n // What the selection drags in behind it: choosing Next.js is choosing React\n // whether or not React was ever clicked.\n const closureOf = (selection: readonly string[]) => {\n const reached = new Set(selection)\n const frontier = [...reached]\n\n for (let skillId = frontier.pop(); skillId; skillId = frontier.pop()) {\n for (const required of directlyImpliedBy(skillId)) {\n if (reached.has(required)) continue\n reached.add(required)\n frontier.push(required)\n }\n }\n\n return reached\n }\n\n // The first reached skill this one cannot coexist with, if any — reached in\n // selection order, so the verdict names what the user actually picked first.\n const reachedConflictOf = (skillId: string, reached: ReadonlySet<string>) => {\n const conflictIds = conflictIdsBySkill.get(skillId)\n if (!conflictIds) return undefined\n for (const reachedId of reached) {\n if (reachedId !== skillId && conflictIds.has(reachedId)) return reachedId\n }\n return undefined\n }\n\n const lostIdsOf = (\n requirement: SkillRequirementFacts,\n reached: ReadonlySet<string>,\n outOfReach: ReadonlySet<string>\n ) =>\n requirement.skillIds.filter(\n (skillId) => !reached.has(skillId) && outOfReach.has(skillId)\n )\n\n // A group is met while any candidate is still reachable — for `needsAny`,\n // one survivor is enough; otherwise every candidate has to survive.\n const isUnreachable = (\n requirement: SkillRequirementFacts,\n lostIds: readonly string[]\n ) =>\n requirement.needsAny\n ? lostIds.length === requirement.skillIds.length\n : lostIds.length > 0\n\n // First everything conflicting with the reached set, then everything built\n // on what was lost, and so on — Vue goes, then Nuxt, then Pinia. Each round\n // either strands at least one more skill or stops, so this terminates.\n const strandedBeyond = (reached: ReadonlySet<string>) => {\n const outOfReach = new Set<string>()\n for (const skill of catalog.skills) {\n if (!reached.has(skill.id) && reachedConflictOf(skill.id, reached)) {\n outOfReach.add(skill.id)\n }\n }\n\n const hasLostRequirement = (skill: SelectionSkillFacts) =>\n skill.requires.some((requirement) =>\n isUnreachable(requirement, lostIdsOf(requirement, reached, outOfReach))\n )\n\n for (let settled = false; !settled;) {\n settled = true\n\n for (const skill of catalog.skills) {\n if (reached.has(skill.id) || outOfReach.has(skill.id)) continue\n if (hasLostRequirement(skill)) {\n outOfReach.add(skill.id)\n settled = false\n }\n }\n }\n\n return outOfReach\n }\n\n const incompatibilityAgainst = (\n skill: SelectionSkillFacts,\n sets: JudgingSets\n ): IncompatibilityCause | undefined => {\n const conflictId = reachedConflictOf(skill.id, sets.reached)\n if (conflictId) return { kind: \"conflict\", skillId: conflictId }\n\n for (const requirement of skill.requires) {\n const lostIds = lostIdsOf(requirement, sets.reached, sets.outOfReach)\n if (isUnreachable(requirement, lostIds)) {\n return { kind: \"unreachableRequirement\", requirement, lostIds }\n }\n }\n\n return undefined\n }\n\n const discourageAgainst = (\n skill: SelectionSkillFacts,\n sets: JudgingSets\n ): string | undefined => {\n for (const reachedId of sets.reached) {\n if (reachedId === skill.id) continue\n\n const declared = skillsById\n .get(reachedId)\n ?.discourages.find((relation) => relation.skillId === skill.id)\n if (declared) return declared.reason\n\n const declaredBack = skill.discourages.find(\n (relation) => relation.skillId === reachedId\n )\n if (declaredBack) return declaredBack.reason\n }\n return undefined\n }\n\n const verdictAgainst = (\n skill: SelectionSkillFacts,\n sets: JudgingSets\n ): SelectionVerdict => {\n const cause = incompatibilityAgainst(skill, sets)\n if (cause) return { status: \"incompatible\", cause }\n\n const reason = discourageAgainst(skill, sets)\n return reason ? { status: \"discouraged\", reason } : { status: \"normal\" }\n }\n\n return (selection) => {\n const reached = closureOf(selection)\n const base: JudgingSets = {\n reached,\n outOfReach: strandedBeyond(reached),\n }\n\n // The selection a pick-one click would produce: every same-category\n // member drops out of the judging material — selected or implied — and\n // the strandings are recomputed from what survives. Cached per category,\n // since every cell in it swaps against the same remainder.\n const swapSetsByCategory = new Map<string, JudgingSets>()\n const swapSetsFor = (categoryId: string): JudgingSets => {\n const held = swapSetsByCategory.get(categoryId)\n if (held) return held\n\n const outside = (skillId: string) =>\n skillsById.get(skillId)?.categoryId !== categoryId\n const survivingReached = new Set([...reached].filter(outside))\n const sets: JudgingSets = {\n reached: survivingReached,\n outOfReach: strandedBeyond(survivingReached),\n }\n swapSetsByCategory.set(categoryId, sets)\n return sets\n }\n\n return {\n reached,\n outOfReach: base.outOfReach,\n implied: [...reached].filter((skillId) => !selection.includes(skillId)),\n verdictOf: (skillId) => {\n const skill = mustHold(skillId)\n const verdict = verdictAgainst(skill, base)\n\n const swaps =\n verdict.status === \"incompatible\" &&\n catalog.exclusiveCategoryIds.has(skill.categoryId)\n return swaps\n ? verdictAgainst(skill, swapSetsFor(skill.categoryId))\n : verdict\n },\n incompatibilityOf: (skillId) =>\n incompatibilityAgainst(mustHold(skillId), base),\n discourageReasonOf: (skillId) =>\n discourageAgainst(mustHold(skillId), base),\n }\n }\n}\n\n/**\n * The relationships a selection is judged by, read off a catalogue.\n *\n * Exported because a marketplace's conflicts are its own: judging its skills by\n * the public catalogue's facts would find no relationship at all, since it\n * knows neither id. The CLI builds these facts from its own merged matrix\n * instead, which is why the semantics take them rather than reading a module.\n */\nexport const catalogFactsOf = (matrix: Matrix): SelectionCatalogFacts => ({\n skills: Object.values(matrix.skills).map((skill) => ({\n id: skill.id,\n categoryId: skill.category,\n conflictsWith: skill.conflictsWith.map((relation) => relation.skillId),\n discourages: skill.discourages.map((relation) => ({\n skillId: relation.skillId,\n reason: relation.reason,\n })),\n requires: skill.requires.map((requirement) => ({\n skillIds: requirement.skillIds,\n needsAny: requirement.needsAny,\n })),\n })),\n exclusiveCategoryIds: new Set(\n Object.values(matrix.categories)\n .filter((category) => category.exclusive)\n .map((category) => category.id)\n ),\n})\n\n/** The semantics both surfaces read: the shipped catalogue, bound. */\nexport const judgeSelection = createSelectionSemantics(catalogFactsOf(MATRIX))\n","// The selection semantics, written down once, as data.\n//\n// These scenarios were pinned while two implementations answered the same\n// questions — the CLI's `matrix-resolver.ts` plus `build-step-logic.ts`, and\n// the editor's `derive.ts` — and did not always agree. The expectations are\n// the CLI's, which the owner ruled authoritative. Both sides now delegate to\n// `read-model/selection-semantics.ts`, and the scenarios hold that module and\n// each side's rendering of it to one contract instead of to each other.\n//\n// Nothing here imports either implementation, and nothing here is\n// editor-shaped or CLI-shaped: a scenario is a selection against the real\n// catalogue and the outcomes that selection must produce. Each side writes\n// its own runner that maps its API onto these fields.\n//\n// `outOfReach` and `inReach` are *samples*, not the whole catalogue. Listing\n// every skill would pin hundreds of incidental answers that nobody decided and\n// that a regenerated catalogue would churn; each id listed here is one somebody\n// chose, and the `why` says what it is standing for.\n\nimport { CATALOG } from \"../read-model/catalog\"\nimport type { SkillId } from \"../vendor/generated/source-types\"\n\n// The divergences the owner ruled bugs on 2026-08-06, each fixed when the\n// editor moved onto the shared semantics — the label survives as the record of\n// what its scenario was pinned to guard. A further one, found while writing\n// these down, was the CLI forgiving every incompatibility inside a pick-one\n// category; that one was narrowed rather than pinned, and the scenario holding\n// it is an agreement now.\n//\n// A third, `framework-constraint`, is gone rather than fixed: it named the\n// CLI's `compatibleWith` whitelist ruling out a framework-bound skill beside a\n// framework that merely does not host it. The owner ruled on 2026-08-07 that\n// those verdicts are an accepted loss and deleted the field (CLI-389 phase C),\n// which makes both sides answer the one question that survives — *could this\n// still become valid* — and leaves nothing for the label to name. The three\n// scenarios that carried it are agreements below, each recording the ruling.\nexport type SelectionDivergence =\n // The editor never read `discourages`, so a soft warning never appeared.\n | \"discourages\"\n // Inside an exclusive category the editor forgave a conflict only with a\n // *selected* sibling; the CLI forgives any verdict the swap would resolve,\n // whether the sibling was selected or merely implied.\n | \"exclusive-forgiveness\"\n\nexport type SelectionScenario = {\n id: string\n // Phrased as the behaviour a test name would describe.\n title: string\n // What the user has clicked, and only that.\n selection: readonly SkillId[]\n // Everything the selection necessarily also chooses, itself excluded. A\n // group offering a choice commits the user to none of its options.\n implied: readonly SkillId[]\n // Must be surfaced as unavailable against this selection.\n outOfReach: readonly SkillId[]\n // Must stay offerable against this selection.\n inReach: readonly SkillId[]\n // Must be surfaced as a soft warning — never disabled.\n discouraged: readonly SkillId[]\n // `null` on the agreement surface: both implementations already answer this.\n divergence: SelectionDivergence | null\n why: string\n}\n\nconst REACT = \"web-framework-react\"\nconst VUE = \"web-framework-vue-composition-api\"\nconst SVELTE = \"web-framework-svelte\"\nconst ANGULAR = \"web-framework-angular-standalone\"\nconst SOLID = \"web-framework-solidjs\"\nconst NEXTJS = \"web-meta-framework-nextjs\"\nconst REMIX = \"web-meta-framework-remix\"\nconst NUXT = \"web-meta-framework-nuxt\"\nconst SVELTEKIT = \"web-meta-framework-sveltekit\"\nconst ASTRO = \"web-meta-framework-astro\"\nconst REACT_NATIVE = \"mobile-framework-react-native\"\nconst EXPO = \"mobile-framework-expo\"\nconst TAILWIND = \"web-styling-tailwind\"\nconst VITE = \"web-tooling-vite\"\nconst SHADCN = \"web-ui-shadcn-ui\"\nconst RADIX = \"web-ui-radix-ui\"\nconst HEADLESS_UI = \"web-ui-headless-ui\"\nconst MUI = \"web-ui-mui\"\nconst VUETIFY = \"web-ui-vuetify\"\nconst RHF = \"web-forms-react-hook-form\"\nconst VEE_VALIDATE = \"web-forms-vee-validate\"\nconst TANSTACK_FORM = \"web-forms-tanstack-form\"\nconst RTL = \"web-testing-react-testing-library\"\nconst VUE_TEST_UTILS = \"web-testing-vue-test-utils\"\nconst VUEUSE = \"web-utilities-vueuse\"\nconst NEXT_INTL = \"web-i18n-next-intl\"\nconst PINIA = \"web-state-pinia\"\nconst NGRX = \"web-state-ngrx-signalstore\"\nconst PRISMA = \"api-database-prisma\"\nconst DRIZZLE = \"api-database-drizzle\"\nconst SEQUELIZE = \"api-database-sequelize\"\n\nexport const SELECTION_SCENARIOS: readonly SelectionScenario[] = [\n {\n id: \"empty-selection-rules-out-nothing\",\n title: \"offers the whole catalogue while nothing is selected\",\n selection: [],\n implied: [],\n outOfReach: [],\n inReach: [REACT, SVELTE, PINIA, SHADCN, TAILWIND],\n discouraged: [],\n divergence: null,\n why: \"Two skills that cannot coexist are both offerable until one is picked.\",\n },\n {\n id: \"closure-follows-one-requirement\",\n title: \"counts what a selection is built on as chosen\",\n selection: [NEXTJS],\n implied: [REACT],\n outOfReach: [],\n inReach: [RADIX, RHF, HEADLESS_UI, RTL],\n discouraged: [],\n divergence: null,\n why: \"Next.js is built on React, so the React-bound companions are open without React ever being clicked.\",\n },\n {\n id: \"closure-follows-a-chain-of-requirements\",\n title: \"carries the closure through more than one hop\",\n selection: [EXPO],\n implied: [REACT_NATIVE, REACT],\n outOfReach: [VEE_VALIDATE],\n inReach: [REACT_NATIVE],\n discouraged: [],\n divergence: null,\n why: \"Expo needs React Native, which needs React — and Vue's forms go with it.\",\n },\n {\n id: \"closure-takes-only-the-unambiguous-requirement\",\n title: \"implies every member of an all-of group and none of a choice\",\n selection: [SHADCN],\n implied: [TAILWIND],\n outOfReach: [],\n inReach: [TAILWIND, REACT],\n discouraged: [],\n divergence: null,\n why: \"shadcn/ui needs Tailwind outright plus one of the React frameworks; only the first can be named.\",\n },\n {\n id: \"a-choice-commits-to-none-of-its-options\",\n title: \"implies nothing from a requirement offering a choice\",\n selection: [PINIA],\n implied: [],\n outOfReach: [],\n inReach: [VUE, NUXT],\n discouraged: [],\n divergence: null,\n why: \"Pinia needs Vue or Nuxt and cannot say which, so neither is chosen and neither rules the other out. What Pinia does *not* do to the frameworks it cannot run on is the scenario below.\",\n },\n {\n id: \"a-choice-survives-on-one-candidate\",\n title: \"keeps a choice open while any one candidate survives\",\n selection: [ANGULAR],\n implied: [],\n outOfReach: [RADIX],\n inReach: [NGRX, TANSTACK_FORM],\n discouraged: [],\n divergence: null,\n why: \"TanStack Form lists Angular among its options and survives; Radix lists only the React family and does not.\",\n },\n {\n id: \"the-wrong-framework-rules-out-what-is-bound-to-another\",\n title: \"rules out the skills bound to a framework the selection excludes\",\n selection: [SVELTE],\n implied: [],\n outOfReach: [RADIX, SHADCN, RHF, RTL, REACT_NATIVE],\n inReach: [TAILWIND, VITE],\n discouraged: [],\n divergence: null,\n why: \"Svelte conflicts with React, so everything that needs React goes; the unbound skills stay.\",\n },\n {\n id: \"losing-a-skill-loses-what-was-built-on-it\",\n title: \"keeps stranding dependents until nothing more is stranded\",\n selection: [REACT],\n implied: [],\n outOfReach: [VEE_VALIDATE, VUE_TEST_UTILS, VUETIFY, VUEUSE],\n inReach: [TAILWIND],\n discouraged: [],\n divergence: null,\n why: \"React conflicts with Vue, Nuxt is built on Vue, and the Vue companions accept only those two — the mirror of the Svelte case.\",\n },\n {\n id: \"a-pick-one-category-swaps-rather-than-disables\",\n title: \"leaves the siblings of a selected skill swappable\",\n selection: [REACT],\n implied: [],\n outOfReach: [],\n inReach: [SVELTE, VUE, ANGULAR, SOLID],\n discouraged: [],\n divergence: null,\n why: \"Clicking a sibling replaces React rather than joining it, so disabling the rest would strand the first choice.\",\n },\n {\n id: \"the-swap-rule-is-not-about-frameworks\",\n title: \"leaves the siblings swappable in every pick-one category\",\n selection: [PRISMA],\n implied: [],\n outOfReach: [],\n inReach: [DRIZZLE, SEQUELIZE],\n discouraged: [],\n divergence: null,\n why: \"The same swap holds for database ORMs, so the rule cannot be reading the web framework category by name.\",\n },\n {\n id: \"the-implier-keeps-its-own-siblings-swappable\",\n title: \"leaves a sibling of the skill that implied the closure swappable\",\n selection: [NEXTJS],\n implied: [REACT],\n outOfReach: [],\n inReach: [REACT, REMIX],\n discouraged: [],\n divergence: null,\n why: \"Remix is built on the same React and swaps with Next.js; React itself was never clicked and stays a live choice.\",\n },\n {\n id: \"two-selections-satisfy-a-split-requirement\",\n title: \"opens a skill once every one of its requirements is met\",\n selection: [REACT, TAILWIND],\n implied: [],\n outOfReach: [],\n inReach: [SHADCN, RADIX, MUI],\n discouraged: [],\n divergence: null,\n why: \"shadcn/ui needs both halves; MUI stands for the design-system kits, which are a pick-one category and so stay swappable while none is selected. A scenario pinning the opposite — kits disabling each other through a conflict group inside an open category — was dropped when that group died with the `web-ui-kit` radio, and no catalogued pair states that shape any more.\",\n },\n {\n id: \"a-meta-framework-rules-out-the-other-family\",\n title: \"rules out the other family through the framework it implies\",\n selection: [NUXT],\n implied: [VUE],\n outOfReach: [RADIX],\n inReach: [VUE, VUETIFY],\n discouraged: [],\n divergence: null,\n why: \"Nuxt implies Vue, Vue conflicts with React, and Radix accepts only the React family.\",\n },\n {\n id: \"selecting-the-base-alongside-changes-nothing\",\n title: \"answers the same whether the base was clicked or implied\",\n selection: [VUE, NUXT],\n implied: [],\n outOfReach: [RADIX, RHF],\n inReach: [VUETIFY],\n discouraged: [],\n divergence: null,\n why: \"Selecting Vue explicitly beside Nuxt must not change a single verdict from implying it.\",\n },\n {\n id: \"a-svelte-meta-framework-rules-out-the-react-family\",\n title: \"rules out the React family through a Svelte meta-framework\",\n selection: [SVELTEKIT],\n implied: [SVELTE],\n outOfReach: [RADIX, RHF],\n inReach: [SVELTE, TAILWIND],\n discouraged: [],\n divergence: null,\n why: \"The mirror of the Nuxt case, so the answer cannot be coming from anything React-specific.\",\n },\n {\n id: \"a-framework-bound-skill-beside-a-framework-that-cannot-host-it\",\n title:\n \"rules out only what a framework excludes, not what it fails to host\",\n selection: [ASTRO],\n implied: [],\n outOfReach: [NEXT_INTL],\n inReach: [RADIX, VUETIFY, RHF, VUE_TEST_UTILS, TAILWIND],\n discouraged: [],\n divergence: null,\n why: \"Astro hosts neither React nor Vue, but it excludes neither: it conflicts only with its sibling meta-frameworks, so next-intl loses the Next.js it is built on while both component families stay satisfiable and therefore offerable. Until 2026-08-07 this scenario asserted the mirror image — all four families' companions ruled out — and carried `divergence: \\\"framework-constraint\\\"`, the CLI's `compatibleWith` whitelist answering 'is a declared host selected'. The owner ruled those verdicts an accepted loss and CLI-389 phase C deleted the field, so both sides now answer 'could this still become valid' and this is an agreement.\",\n },\n {\n id: \"a-companion-whose-base-is-merely-still-available\",\n title:\n \"keeps a companion offerable while the base it needs is still selectable\",\n selection: [REACT],\n implied: [],\n outOfReach: [],\n inReach: [EXPO, REACT_NATIVE],\n discouraged: [],\n divergence: null,\n why: \"Expo is for React Native, and React alone is not React Native — but React rules React Native out of nothing, so Expo's requirement is unmet rather than unreachable and the cell stays live. Until 2026-08-07 this asserted Expo ruled out, on the CLI's `compatibleWith` whitelist; the owner ruled that verdict an accepted loss when CLI-389 phase C deleted the field. Nudging the user toward the base it still needs is another surface's job — `getUnmetRequiredBy` in the wizard, not a verdict.\",\n },\n {\n id: \"a-framework-beside-a-companion-bound-to-another\",\n title:\n \"leaves every framework offerable beside a companion that has committed to none\",\n selection: [PINIA],\n implied: [],\n outOfReach: [],\n inReach: [REACT, SVELTE],\n discouraged: [],\n divergence: null,\n why: \"Pinia needs Vue or Nuxt and cannot say which, so it drags neither in — and a framework it cannot run on is therefore excluded by nothing. Until 2026-08-07 React and Svelte were ruled out here through the CLI's `compatibleWith` whitelist, which read the companion's declared hosts back onto the frameworks; the owner ruled that an accepted loss and CLI-389 phase C deleted the field. The sibling scenario `a-choice-commits-to-none-of-its-options` pins what Pinia implies; this one pins what it does not rule out.\",\n },\n {\n id: \"a-sibling-conflicting-with-a-merely-implied-skill\",\n title: \"leaves a sibling conflicting with an implied skill swappable\",\n selection: [NEXTJS],\n implied: [REACT],\n outOfReach: [],\n inReach: [ANGULAR, SVELTE],\n discouraged: [],\n divergence: \"exclusive-forgiveness\",\n why: \"The CLI forgives the conflict because the category is pick-one. The editor forgives it only for a *selected* sibling, and React here is implied, so it disables Angular and Svelte instead.\",\n },\n {\n id: \"an-unmet-requirement-inside-a-pick-one-category\",\n title:\n \"rules out a pick-one skill whose requirement the selection has ruled out\",\n selection: [NEXTJS, REACT],\n implied: [],\n outOfReach: [NUXT],\n inReach: [REMIX],\n discouraged: [],\n divergence: null,\n why: \"Both clash with the selected Next.js in a pick-one category, so the click swaps it out — which rescues Remix, built on the React that is also selected, and does nothing for Nuxt, which needs the Vue that same React rules out. Forgiveness reaches exactly as far as the swap does. React is named beside Next.js rather than left implied because the CLI computes no requires-closure yet, the same reason `selecting-the-base-alongside-changes-nothing` spells its base out. The exemplar was VitePress until the docs frameworks stopped requiring a base framework — a docs site is its own deployable — which left Nuxt carrying the fence this scenario is about.\",\n },\n]\n\n// The pairs the `discourages` golden runs over. Derived rather than written\n// down because the point of that golden is what the catalogue actually\n// declares: as of 2026-08-06 it declares none, so the golden is red on its\n// data before it is ever red on an implementation.\n//\n// `string` rather than `SkillId` because that is what the read model holds now\n// that a catalogue can be a marketplace's. These pairs are still the SHIPPED\n// catalogue's — `CATALOG` is the vendored one — and both runners feed them\n// straight into semantics that take open ids, so nothing downstream wanted the\n// narrower type.\nexport const DISCOURAGED_PAIRS: readonly (readonly [string, string])[] =\n Object.values(CATALOG.skillsById).flatMap((skill) =>\n skill.discourages.map((other) => [skill.id, other] as const)\n )\n","import { z } from \"zod\"\n\nimport { DEFAULT_SELECTION_OPTIONS } from \"./read-model/selection-defaults\"\n\n// The wire contract for shared configs: the web app POSTs this payload to the\n// config store (Cloudflare Worker + KV) and gets a short id back; `agents-inc\n// init --from <id>` fetches and validates it with this same schema. This file is\n// the source of truth, and every consumer IMPORTS it — the CLI through\n// `@workspace/matrix/seed`, which tsup inlines at build time, plus the editor,\n// the worker and the API mocks. There is no vendored copy of this schema: the\n// `generate:matrix` script that vendors into `packages/matrix/src/vendor/` runs\n// the other way, copying the CLI's own types here, and does not emit this file.\n\n// Bump when the payload shape changes. Pre-release policy is discard-don't-\n// migrate, so the schema accepts exactly one version: an id minted before a\n// bump fails to decode loudly rather than being guessed at.\n//\n// v2 moved model and effort off the skill and onto the sub-agent, which is\n// where they were always a property of — a skill is a plugin from someone\n// else's repo and has no business naming a model.\n//\n// v3 gave the sub-agent its scope. The CLI has carried one on every agent all\n// along; the web had no surface for it, so `--from` wrote `project` for\n// everyone. The field is additive-optional, which a version could not normally\n// be needed for — but a consumer parsing with an older build of this schema\n// strips what it does not know, so the version is what says the field is\n// really there.\n//\n// v4 gave the payload the marketplace its skills are fetched from. An id\n// already says whose skill it is — a marketplace's name is the author-time\n// prefix on every id it ships — but no id can say WHERE that marketplace\n// lives, and a payload silent about it has the receiver install its own\n// `acme-web-frontend` rather than acme's. One ref at the top covers it,\n// because an install reads one marketplace. Absent still means the default\n// public catalogue, which is every payload the web app mints.\n//\n// v5 made the payload carry CONTENT. Every id above it is resolved by the\n// receiver against a catalogue it already has; a skill added from outside\n// answers to no catalogue, so its whole directory travels inline (owner ruling,\n// 2026-08-16). That is what makes a shared id self-contained: `--from` reaches\n// into no third-party repository at install time, and two people installing one\n// id get identical bytes.\n//\n// The bump is what stops that being a silent change. `external` is additive-\n// optional, so a consumer built against v4 would STRIP it and install a\n// configuration quietly missing the skills the sharer picked — the same defect\n// the field exists to fix, moved one step later. The literal below refuses\n// instead. Pre-release policy is discard-don't-migrate, so ids minted under v4\n// stop decoding; that is deliberate, and the message a consumer prints for it\n// is what has to name the fix.\nexport const SEED_VERSION = 5\n\n// The model and effort a sub-agent runs on. Both scales are the CLI's, since\n// the CLI is what writes them into the agent's frontmatter.\nexport const seedModelSchema = z.enum([\"opus\", \"fable\", \"sonnet\", \"haiku\"])\n// Claude Code's subagent and skill frontmatter accept exactly these. `ultra` was\n// carried here by mistake: \"ultracode\" exists but is a session-only Claude Code\n// setting that sends `xhigh`, not a model effort level, so a config naming it\n// would have been invalid wherever it landed.\nexport const seedEffortSchema = z.enum([\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n \"max\",\n])\n\nexport const seedLoadStateSchema = z.enum([\"lazy\", \"preloaded\"])\n\n// Where a thing is written: under one project's `.claude`, or the user's own\n// `~/.claude`. Named once because a skill and a sub-agent each carry one and\n// the rule below compares the two — three spellings of one vocabulary is what\n// let the surfaces disagree about it.\nexport const seedScopeSchema = z.enum([\"project\", \"global\"])\n\n// A skill says where it installs and which agents carry it, and nothing about\n// how they think.\nexport const seedSkillSchema = z.object({\n install: z.enum([\"plugin\", \"eject\"]),\n scope: seedScopeSchema,\n // Sub-agent id → load state; presence is assignment. Per (agent, skill),\n // matching the granularity of the CLI's stack config.\n assignments: z.record(z.string(), seedLoadStateSchema),\n})\n\n// Everything one sub-agent has to say, all of it optional so the map can be as\n// sparse as the skill map is. `on: true` is what lets a bare base agent travel\n// at all: v1 could only infer agents from assignments, so an agent holding no\n// skills was unshareable. An entry naming only a model does *not* switch the\n// agent on — absent means \"the assignments decide\".\nexport const seedAgentSchema = z.object({\n on: z.boolean().exactOptional(),\n model: seedModelSchema.exactOptional(),\n effort: seedEffortSchema.exactOptional(),\n // Where this agent's front-matter is written: the project, or the user's own\n // ~/.claude. Absent means the shared selection default — `global`, spelled\n // once in `DEFAULT_SELECTION_OPTIONS` — so the resting choice never travels,\n // exactly as a resting model does not.\n scope: seedScopeSchema.exactOptional(),\n})\n\n// ── External skills ──────────────────────────────────────────────────────\n\n/**\n * The most one external skill's directory may weigh, in UTF-8 bytes.\n *\n * Measured rather than guessed. The largest real documentation skill on the\n * allowlisted repositories is `obra/superpowers/skills/brainstorming` at 78 KB\n * across 8 files; our own run 60-75 KB across 3-7. Three of them in one payload\n * is 161 KB raw and 48 KB gzipped, against 1.9 KB for the same selection before\n * content travelled — so a cap several times the largest real skill still holds\n * a realistic configuration many times over.\n *\n * What it refuses is the other shape entirely: `anthropics/skills/skills/docx`\n * is 1.1 MB across 61 files, almost all of it XML schemas for a Python library\n * that happens to sit under a SKILL.md. Inlining one of those into a link\n * somebody pastes into a terminal is what this number exists to prevent.\n */\nexport const MAX_EXTERNAL_SKILL_BYTES = 262_144\n\n/** The file Claude Code reads to learn a skill exists at all. */\nconst SKILL_MANIFEST = \"SKILL.md\"\n\n// UTF-8, because that is what lands in KV and on disk. A tree of multi-byte\n// characters weighs more than its length says, and the cap is about weight.\nconst treeBytes = (files: Record<string, string>) => {\n const encoder = new TextEncoder()\n return Object.values(files).reduce(\n (total, text) => total + encoder.encode(text).length,\n 0\n )\n}\n\n/**\n * A skill's whole directory, keyed by path relative to it.\n *\n * The whole directory and not SKILL.md alone (owner, 2026-08-16): a skill is\n * `SKILL.md`, the `metadata.yaml` beside it, and every `reference/` or\n * `examples-*.md` file under it. Carrying the manifest alone would install\n * something that loads and then cannot do what it says.\n *\n * A record rather than a list, so a path cannot appear twice by construction.\n * Nesting lives in the key — `reference/api.md` — which keeps the shape flat\n * while the tree it describes is not.\n */\nexport const seedSkillTreeSchema = z\n .record(z.string().min(1), z.string())\n .refine((files) => SKILL_MANIFEST in files, {\n message: `a skill directory must hold ${SKILL_MANIFEST}`,\n })\n .refine((files) => treeBytes(files) <= MAX_EXTERNAL_SKILL_BYTES, {\n message: `a skill directory may not exceed ${String(MAX_EXTERNAL_SKILL_BYTES)} bytes`,\n })\n\n/**\n * One skill added from outside whichever catalogue the payload names.\n *\n * It is a real catalogue entry on the sending side and has to become one on the\n * receiving side, so everything a catalogue entry needs travels: the name, the\n * description, and the category the user CONFIRMED at add time (CLI-412 — the\n * category is a decision, never derived from the repository). `repo` and `path`\n * are provenance rather than a resolution step: the bytes are already here, and\n * these are what let a reader go and look at where they came from.\n */\nexport const seedExternalSkillSchema = z.object({\n displayName: z.string().min(1),\n description: z.string(),\n // A category of the catalogue this payload names — the placement the user\n // confirmed. Without it the skill has nowhere to render and no sub-agent\n // reach, which is the whole difference between a catalogue entry and an\n // orphan section.\n categoryId: z.string().min(1),\n // GitHub's own `owner/name`.\n repo: z.string().min(1),\n // The skill's DIRECTORY within it — `skills/docx`, never the SKILL.md.\n path: z.string().min(1),\n files: seedSkillTreeSchema,\n})\n\n// Ids are full catalog slugs, never positional indices, so a payload survives\n// catalog churn: consumers warn and skip unknown ids rather than failing.\nexport const seedPayloadSchema = z.object({\n v: z.literal(SEED_VERSION),\n // Diagnostics only. A mismatch with the consumer's matrix must not fail the\n // decode — it explains why some ids were skipped.\n matrixVersion: z.string(),\n stackId: z.string().nullable(),\n // The sentence the sharer's config records about itself, which on the CLI\n // side is the description of whatever stack was applied. It travels because\n // `stackId` deliberately does not: a saved config records a stack's\n // EXPANSION and never the id it came from, so the receiver has no id to\n // resolve one out of and the line is simply lost.\n //\n // Carrying the id instead would be worse rather than equivalent. A resolvable\n // stack id does exactly two things on the way in — it supplies this\n // description, and it overlays the stack YAML's own `preloaded` flags — and\n // the assignments above already carry per-(skill, sub-agent) load state in\n // full, so the second is redundant. What the id would ADD is the stack's\n // whole roster: the receiving install spreads the loaded stack first and lets\n // the saved stack win per agent, so a stack sub-agent the sharer REMOVED\n // comes back wholesale. Absent means a config that describes itself with\n // nothing, which is every payload the web app mints.\n description: z.string().exactOptional(),\n // Where the skills below are fetched from, in the form `--marketplace` takes\n // one: `github:acme/skills`, a URL, a local path. The ref alone — the name\n // its manifest gives it is read from the fetched marketplace.json, so\n // carrying that too would let a payload disagree with the repository it\n // names. Absent is the default public catalogue, which is why a payload that\n // installs from it looks exactly as it did before this field existed.\n marketplace: z.string().exactOptional(),\n // Sparse — presence is selection, exactly like the web store. `remembered`\n // is deliberately absent: deselected setup never leaves the browser.\n skills: z.record(z.string(), seedSkillSchema),\n // Skill id → its whole directory, for the ids above that no catalogue can\n // resolve. Keyed by the same id `skills` uses, so a selection reads one map\n // whichever kind of skill it names. Absent is the ordinary case — a payload\n // built from the catalogue alone — which is why one looks exactly as it did\n // before content travelled. Content is the expensive part of a payload, so an\n // added skill nobody selected has no entry here either.\n external: z.record(z.string(), seedExternalSkillSchema).exactOptional(),\n // Sparse for the same reason: an agent resting on its own catalogue model\n // with no pin has nothing to say, so it has no entry. Presence is a\n // statement, not an install: what installs is decided by assignments and\n // `on: true` alone, so a derived-off agent can still travel its overrides.\n // Only an agent pinned *off* is omitted outright — with the assignment rows\n // naming it, since the sharer's own counts exclude them.\n agents: z.record(z.string(), seedAgentSchema),\n})\n\nexport type SeedModel = z.infer<typeof seedModelSchema>\nexport type SeedEffort = z.infer<typeof seedEffortSchema>\nexport type SeedLoadState = z.infer<typeof seedLoadStateSchema>\nexport type SeedScope = z.infer<typeof seedScopeSchema>\nexport type SeedSkill = z.infer<typeof seedSkillSchema>\nexport type SeedAgent = z.infer<typeof seedAgentSchema>\nexport type SeedSkillTree = z.infer<typeof seedSkillTreeSchema>\nexport type SeedExternalSkill = z.infer<typeof seedExternalSkillSchema>\nexport type SeedPayload = z.infer<typeof seedPayloadSchema>\n\n/**\n * Project skills never reach global sub-agents; global skills reach any.\n *\n * A global sub-agent's front-matter is written to `~/.claude`, where every\n * project on the machine sees it, while a project-scoped skill is installed\n * under one project's `.claude` — so a global sub-agent carrying a project\n * skill names something that does not exist from anywhere else.\n *\n * This is the ONE definition. The CLI's `isScopePairCompatible` and the\n * editor's roster marker both read it from here rather than restating it: the\n * rule lived as three verbatim copies across three workspaces, which is exactly\n * the drift a shared contract exists to prevent.\n */\nexport const isSeedScopePairWritable = (\n skillScope: SeedScope,\n agentScope: SeedScope\n) => !(skillScope === \"project\" && agentScope === \"global\")\n\n/**\n * Where a sub-agent's front-matter is written, for an entry that may not exist.\n *\n * The `agents` map is sparse, so an absent entry — and an entry that names no\n * scope — rests on the shared selection default. Read from\n * `DEFAULT_SELECTION_OPTIONS` rather than written out, because a default the\n * wire and the consumer spell differently is the same defect as two copies of\n * the rule above.\n */\nexport const seedAgentScope = (entry: SeedAgent | undefined): SeedScope =>\n entry?.scope ?? DEFAULT_SELECTION_OPTIONS.scope\n\n/** A `(skill, sub-agent)` assignment the config model has nowhere to write. */\nexport type UnwritableSeedAssignment = { skillId: string; agent: string }\n\n// An assignment naming a sub-agent the sharer pinned OFF installs nothing, so\n// it is not a pair at all and cannot be an unwritable one. It leaves before the\n// scope question is asked, exactly as the CLI's decode drops it — a wire\n// stricter than the consumer it protects is its own kind of drift.\nconst isSwitchedOff = (entry: SeedAgent | undefined) => entry?.on === false\n\nconst isUnwritablePair = (\n agents: SeedPayload[\"agents\"],\n skillScope: SeedScope,\n agent: string\n): boolean => {\n const entry = agents[agent]\n if (isSwitchedOff(entry)) return false\n return !isSeedScopePairWritable(skillScope, seedAgentScope(entry))\n}\n\n/**\n * Every `(skill, sub-agent)` pair in this payload that has nowhere to be\n * written. Both halves of each are named because neither alone says what to\n * change: the skill can move to global scope, or the sub-agent can be pinned to\n * the project, and only the sharer knows which they meant.\n *\n * **What this cannot see, and why the refusal built on it belongs at the\n * MINTING end rather than at every read.** An assignment naming a sub-agent the\n * RECEIVER does not know is the same bytes on the wire as one naming a\n * sub-agent resting at global. Only a catalogue tells the two apart, and a wire\n * schema has none — so a consumer that refused on this alone would turn a\n * sub-agent rename into a retroactive break of every link minted before it,\n * which is the leniency `seedToWizardResult` documents at length. The CLI keeps\n * its own catalogue-aware check for that reason; what it no longer keeps is its\n * own copy of the RULE.\n */\nexport const unwritableSeedAssignments = (\n payload: SeedPayload\n): UnwritableSeedAssignment[] =>\n Object.entries(payload.skills).flatMap(([skillId, skill]) =>\n Object.keys(skill.assignments)\n .filter((agent) => isUnwritablePair(payload.agents, skill.scope, agent))\n .map((agent) => ({ skillId, agent }))\n )\n\n/**\n * The payload as something that can be INSTALLED, which is a stronger claim\n * than being well-formed.\n *\n * A SECOND schema rather than a tightening of `seedPayloadSchema`, and the\n * split is the whole design. Minting and reading want different answers to the\n * same question:\n *\n * - **Minting** (the worker's POST, and any client that assembles a payload)\n * should refuse the pair outright, so a link that cannot be installed is\n * never created and never pasted anywhere.\n * - **Reading** must stay lenient. Links holding the pair are already out in\n * the world; the editor opens one, marks the offending row and fixes it in\n * a single click (EDITOR-08), and `GET /configs/:id` re-validates what it\n * serves — so a base schema that refused would turn every such id into a\n * 500 with no way back, and delete the repair flow that exists to rescue\n * them.\n */\nexport const installableSeedPayloadSchema = seedPayloadSchema.superRefine(\n (payload, ctx) => {\n for (const { skillId, agent } of unwritableSeedAssignments(payload)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"skills\", skillId, \"assignments\", agent],\n message: `a project-scoped skill has nowhere to be written on '${agent}', which rests at global scope`,\n })\n }\n }\n)\n","import { z } from \"zod\"\n\n// The wire contract for a catalogue: the CLI's `MergedSkillsMatrix`, described\n// without reference to any particular vocabulary of ids.\n//\n// It has two callers and they want the same thing for different reasons. A\n// marketplace's `build marketplace` emits `catalog.json` in this shape, and the\n// editor fetches that file and `safeParse`s it — one fetch, one parse, no\n// transform layer, whichever marketplace it came from. And `generate:matrix`\n// asks it whether the artefact it is about to vendor is still a matrix at all,\n// which byte-comparison against the CLI's own copy cannot answer.\n//\n// NOT to be confused with `builtInMatrixSchema` in `built-in-matrix.ts`. That\n// one narrows every id to the vendored vocabulary — `SKILL_IDS`, `CATEGORIES`,\n// `AGENT_NAMES` — so it catches a regenerated catalogue that renamed something\n// the read models index by. It is the right boundary for the catalogue this\n// package ships and the wrong one for every other: a marketplace's ids are its\n// own, and parsing a fetched `catalog.json` with it would reject all of them by\n// construction.\n//\n// Ids are therefore `z.string().min(1)` here, and unknown keys are stripped, so\n// a matrix may grow fields without this file moving. What it does hold is the\n// fields a consumer reads — the same surface `built-in-matrix.ts` models, for\n// the same reason: a catalogue that dropped one fails here, loudly, rather than\n// rendering a blank grid.\n\nconst idSchema = z.string().min(1)\n\nconst matrixCategorySchema = z.object({\n id: idSchema,\n displayName: z.string(),\n description: z.string(),\n // Optional in the CLI's type. A category without one cannot be placed in the\n // UI, so a consumer drops it rather than failing the whole catalogue.\n domain: z.string().exactOptional(),\n exclusive: z.boolean(),\n order: z.number(),\n})\n\nconst skillRelationSchema = z.object({\n skillId: idSchema,\n reason: z.string(),\n})\n\nconst skillRequirementSchema = z.object({\n skillIds: z.array(idSchema),\n needsAny: z.boolean(),\n reason: z.string(),\n})\n\nconst matrixSkillSchema = z.object({\n id: idSchema,\n slug: z.string(),\n displayName: z.string(),\n description: z.string(),\n // The sentence a compiled sub-agent reads as its cue to load the skill, which\n // the editor's preview renders verbatim. Optional because a marketplace's own\n // skills may state none; omitting it here would strip it from every fetched\n // `catalog.json` and make every marketplace look like it states none.\n usageGuidance: z.string().exactOptional(),\n category: idSchema,\n conflictsWith: z.array(skillRelationSchema),\n discourages: z.array(skillRelationSchema),\n requires: z.array(skillRequirementSchema),\n})\n\nconst matrixStackSchema = z.object({\n id: idSchema,\n name: z.string(),\n description: z.string(),\n // agent id → category id → skill ids. A stack names the few agents it staffs\n // rather than the whole roster, and the agent roster is as marketplace-owned\n // as the skills are, so neither level is narrowed.\n skills: z.record(z.string(), z.record(z.string(), z.array(idSchema))),\n allSkillIds: z.array(idSchema),\n philosophy: z.string(),\n // Never populated by the CLI today; a stack rail groups by it when it appears.\n group: z.string().exactOptional(),\n})\n\nexport const matrixSchema = z.object({\n version: z.string(),\n categories: z.record(z.string(), matrixCategorySchema),\n skills: z.record(z.string(), matrixSkillSchema),\n suggestedStacks: z.array(matrixStackSchema),\n})\n\nexport type Matrix = z.infer<typeof matrixSchema>\nexport type MatrixSkill = z.infer<typeof matrixSkillSchema>\nexport type MatrixCategory = z.infer<typeof matrixCategorySchema>\nexport type MatrixStack = z.infer<typeof matrixStackSchema>\n","import { z } from \"zod\"\n\n// The wire contract for the federated skill index. A daily GitHub Action crawls\n// a small allowlist of EXTERNAL skills repositories, proves each skill\n// installable by reading its SKILL.md, and publishes the result to the worker's\n// KV; `apps/server` serves it under `GET /skills` and the editor's add-skills\n// dialog filters that list client-side.\n//\n// It lives here for the same reason `seed.ts` does: the worker and the editor\n// both have to agree about the shape, and neither may import the other — the\n// worker's source names `Env` from `wrangler types`, which redefines DOM\n// globals in anything that pulls it in. The Action's crawl reads it too, which\n// is the third party this shape now has to hold still for.\n//\n// There is no version field, unlike the seed payload. A seed payload is stored\n// forever under an id someone may have written down; an index is rebuilt from\n// scratch every day, so a shape change is handled by bumping the KV key — which\n// the worker owns and nothing else can hold a link to.\n\n// One skill, as the dialog needs it: enough to show a result, and enough to\n// fetch it afterwards. `repo` + `path` together are the install coordinates.\nexport const skillIndexEntrySchema = z.object({\n // The skill's own name — its frontmatter `name` where there is one, its\n // directory name where there is not. Never empty: a skill with neither is\n // not addressable and does not make it into the index.\n name: z.string().min(1),\n // Frontmatter `description`, or the SKILL.md's first heading. Empty when the\n // file offers neither, which is a thin result rather than an invalid one.\n description: z.string(),\n // GitHub's own `owner/name`, so a result can be attributed and fetched\n // without a second lookup.\n repo: z.string().min(1),\n // The skill DIRECTORY within that repo — `skills/docx`, not\n // `skills/docx/SKILL.md`. A skill is a directory in every consumer of this\n // index, and the file is only how the directory proves itself.\n path: z.string().min(1),\n // The repository's star count when the index was built. A property of the\n // repo rather than the skill, repeated per entry because the dialog ranks\n // and badges individual results.\n stars: z.number().int().nonnegative(),\n // How much the skill's whole DIRECTORY weighs — the sum over its blobs of the\n // sizes GitHub reported for them in the tree listing the crawl already made,\n // never a download. Repeated per entry because the cap it is read against is\n // per skill: `MAX_EXTERNAL_SKILL_BYTES` decides whether one directory can\n // ride a shared link, and without this number that decision cannot be made\n // until the consumer has listed the repository itself. Zero is a real answer,\n // for a directory GitHub reported no sizes for at all.\n bytes: z.number().int().nonnegative(),\n})\n\nexport const skillIndexSchema = z.object({\n // When this index was assembled, as an ISO 8601 instant. The worker's own\n // freshness check reads it, and it is served so a caller can say how old the\n // list is rather than having to guess.\n builtAt: z.iso.datetime(),\n skills: z.array(skillIndexEntrySchema),\n})\n\n// Whether what was served is the current whole picture. `stale` covers both an\n// upstream the worker could not refresh and a cold index still filling in —\n// from a caller's side those are the same statement: this list is not\n// everything, ask again later.\nexport const skillIndexFreshnessSchema = z.enum([\"fresh\", \"stale\"])\n\n// The response header carrying it. Named here rather than spelled out in the\n// worker, its mocks and the editor, because a header three packages have to\n// agree about is a contract like any other.\nexport const SKILL_INDEX_FRESHNESS_HEADER = \"x-skill-index\"\n\nexport type SkillIndexEntry = z.infer<typeof skillIndexEntrySchema>\nexport type SkillIndex = z.infer<typeof skillIndexSchema>\nexport type SkillIndexFreshness = z.infer<typeof skillIndexFreshnessSchema>\n","import { DOMAIN_ORDER } from \"@workspace/matrix\"\n\nimport type { Domain } from \"./types.js\"\n\n/**\n * Sort domains into canonical display order: custom domains first (alphabetically),\n * then built-in domains in the shared DOMAIN_ORDER.\n */\nexport function orderDomains(domains: Domain[]): Domain[] {\n const builtInSet = new Set<Domain>(DOMAIN_ORDER)\n return [\n ...domains.filter((d) => !builtInSet.has(d)).sort(),\n ...DOMAIN_ORDER.filter((d) => domains.includes(d)),\n ]\n}\n","/**\n * The path vocabulary a rendered installation is described in.\n *\n * This is the half of the CLI's `src/cli/consts.ts` that a browser can hold. The\n * half that stayed behind is the half that reads the machine — `PROJECT_ROOT` is\n * derived with `fileURLToPath(import.meta.url)` at module load and\n * `globalInstallRoot()` calls `os.homedir()` — and every renderer here reached\n * that module for these ten names alone. `consts.ts` re-exports every one of\n * them, so no CLI call site moved.\n */\n\n/** Where an installation's compiled agents and ejected skills live, under its base directory. */\nexport const CLAUDE_DIR = \".claude\"\n\n/** Where an installation's config pair lives, under its base directory. */\nexport const CLAUDE_SRC_DIR = \".claude-src\"\n\n/** Source root directory inside a marketplace/source repo (holds skills/, agents/, etc.). */\nexport const SOURCE_SRC_DIR = \"src\"\n\nexport const SKILLS_DIR_PATH = `${SOURCE_SRC_DIR}/skills`\n\nexport const LOCAL_SKILLS_PATH = \".claude/skills\"\n\nexport const DEFAULT_PLUGIN_NAME = \"agents-inc\"\n\n/**\n * Fallback name for the default public marketplace when marketplace.json is\n * unavailable. Same value as {@link DEFAULT_PLUGIN_NAME} but a distinct concept:\n * this is the resolved source/marketplace name, that is the plugin bundle name.\n *\n * Two guards read it and must agree, which is why it is one declaration:\n * `validateMarketplaceName` exempts the catalogue from the reserved-name refusal\n * at BUILD time, and the collision guard in `lib/loading/source-loader.ts`\n * exempts it from the catalogue-id refusal at LOAD time.\n */\nexport const DEFAULT_PUBLIC_SOURCE_NAME = DEFAULT_PLUGIN_NAME\n\n/**\n * Promoted invocation prefix shown in user-facing messages (e.g. \"Run '<CLI_INVOKE_COMMAND> init'\").\n *\n * `bin` in package.json registers BOTH names — `agents-inc` (primary, matching this constant and\n * the package name) and `agentsinc` (kept so existing global installs keep working). A global\n * install therefore answers to either spelling.\n *\n * `agents-inc` rather than `agentsinc` because it is the published package name, so `npx\n * agents-inc` resolves with nothing installed, and it is what the editor at `agentsinc.sh/editor`\n * hands people when they copy an install command.\n *\n * CONVENTION: every user-facing instruction in this repo — messages, docs, code comments, agent\n * playbooks — writes commands in this `npx agents-inc <cmd>` form. Prose that merely names a\n * command (\"the `agents-inc list` table\") does not.\n */\nexport const CLI_INVOKE_COMMAND = \"npx agents-inc\"\n\n/** Synthetic source name for skills copied into the project (ejected) rather than installed as plugins. */\nexport const EJECT_SOURCE = \"eject\"\n\n/** Pseudo-category assigned to local skills — not a `Category` union member; category traversals skip it. */\nexport const LOCAL_PSEUDO_CATEGORY = \"local\"\n\n/** Name written into a global-scope config's `name` field (`~/.claude-src/config.ts`). */\nexport const GLOBAL_CONFIG_NAME = \"global\"\n\nexport const DIRS = {\n agents: \"src/agents\",\n skills: SKILLS_DIR_PATH,\n stacks: \"src/stacks\",\n templates: \"src/agents/_templates\",\n} as const\n\n/** Single source for the metadata file name shared by skill and agent metadata. */\nconst METADATA_YAML_FILE = \"metadata.yaml\"\n\n/** The manifest a plugin bundle carries, inside its `.claude-plugin/` directory. */\nexport const PLUGIN_MANIFEST_FILE = \"plugin.json\"\n\nexport const STANDARD_FILES = {\n SKILL_MD: \"SKILL.md\",\n METADATA_YAML: METADATA_YAML_FILE,\n METADATA_JSON: \"metadata.json\",\n CONFIG_YAML: \"config.yaml\",\n SKILL_CATEGORIES_TS: \"skill-categories.ts\",\n SKILL_RULES_TS: \"skill-rules.ts\",\n AGENT_METADATA_YAML: METADATA_YAML_FILE,\n PLUGIN_JSON: PLUGIN_MANIFEST_FILE,\n CONFIG_TS: \"config.ts\",\n CONFIG_TYPES_TS: \"config-types.ts\",\n CLAUDE_MD: \"CLAUDE.md\",\n README_MD: \"README.md\",\n REFERENCE_MD: \"reference.md\",\n IDENTITY_MD: \"identity.md\",\n PLAYBOOK_MD: \"playbook.md\",\n OUTPUT_MD: \"output.md\",\n CRITICAL_REQUIREMENTS_MD: \"critical-requirements.md\",\n CRITICAL_REMINDERS_MD: \"critical-reminders.md\",\n SETTINGS_JSON: \"settings.json\",\n SETTINGS_LOCAL_JSON: \"settings.local.json\",\n PACKAGE_JSON: \"package.json\",\n} as const\n\nexport const STANDARD_DIRS = {\n EXAMPLES: \"examples\",\n SCRIPTS: \"scripts\",\n SKILLS: \"skills\",\n AGENTS: \"agents\",\n /** Legacy per-project template override directory (`.claude/templates`). */\n TEMPLATES: \"templates\",\n} as const\n","import type {\n AgentName,\n AgentScopeConfig,\n SkillConfig,\n SkillId,\n SkillScope,\n} from \"./types.js\"\n\n/** Shared shape of scoped config entries (skills and agents). */\nexport type ScopedEntry = { scope?: SkillScope; excluded?: boolean }\n\n/** Active (non-excluded) entry at the given scope. */\nexport function isActiveAt(entry: ScopedEntry, scope: SkillScope): boolean {\n return entry.scope === scope && !entry.excluded\n}\n\n/** Tombstone masking a global install (`scope === \"global\"` + excluded). */\nexport function isGlobalTombstone(entry: ScopedEntry): boolean {\n return entry.scope === \"global\" && !!entry.excluded\n}\n\n/**\n * Entry the project owns: a project-scoped entry, or the project's own global\n * tombstone. Inherited global-active entries belong to the global config.\n */\nexport function isProjectOwned(entry: ScopedEntry): boolean {\n return entry.scope === \"project\" || isGlobalTombstone(entry)\n}\n\n/** Names of active project-scoped agents. */\nexport function activeProjectAgentNames(\n agents: readonly AgentScopeConfig[]\n): AgentName[] {\n return agents.filter((a) => isActiveAt(a, \"project\")).map((a) => a.name)\n}\n\n/**\n * Names of every active (non-excluded) agent, at either scope — the config's own\n * record of who is selected, now that no flat `selectedAgents` list is persisted.\n * Exported ahead of a second caller by the key-builder exception: the emitted\n * `SelectedAgentName` union and the wizard's agent hydration must derive the same\n * set from the same rows, and two surfaces each writing their own filter is the\n * drift this replaces.\n */\nexport function activeAgentNames(\n agents: readonly AgentScopeConfig[]\n): AgentName[] {\n return agents.filter((a) => !a.excluded).map((a) => a.name)\n}\n\n/** Scope of each active (non-excluded) skill, keyed by id. */\nexport function activeSkillScopeMap(\n skills: readonly SkillConfig[] | undefined\n): Map<SkillId, SkillScope> {\n return new Map(\n (skills ?? []).filter((s) => !s.excluded).map((s) => [s.id, s.scope])\n )\n}\n\n/** Scope of each active (non-excluded) agent, keyed by name. */\nexport function activeAgentScopeMap(\n agents: readonly AgentScopeConfig[] | undefined\n): Map<AgentName, SkillScope> {\n return new Map(\n (agents ?? []).filter((a) => !a.excluded).map((a) => [a.name, a.scope])\n )\n}\n\n/**\n * Ids of skills that are effectively excluded: they have an excluded entry and no\n * active (non-excluded) entry with the same id rescues them. A skill with an\n * excluded global entry AND an active project entry is NOT effectively excluded.\n */\nexport function effectivelyExcludedSkillIds(\n skills: readonly SkillConfig[]\n): Set<SkillId> {\n const activeIds = new Set(skills.filter((s) => !s.excluded).map((s) => s.id))\n return new Set(\n skills.filter((s) => s.excluded && !activeIds.has(s.id)).map((s) => s.id)\n )\n}\n","/**\n * The catalogue as an emission reads it, and the one rule about how it arrives:\n * it is a parameter of every function here, never a module the renderers reach\n * for.\n *\n * Two surfaces render the same bytes and they seat different catalogues. The CLI\n * merges the machine's locally-authored skills onto the built-in matrix at\n * startup — `initializeMatrix` REPLACES the matrix after that merge — and the\n * editor seats whatever catalogue it fetched. A renderer that read a module\n * singleton would answer differently in the two places with nothing to say so,\n * and the bytes it decides are not cosmetic: category declaration order is the\n * key order of a compiled sub-agent's skill-activation table.\n *\n * {@link CompileCatalog} is the narrowest shape both seats satisfy — the CLI's\n * `MergedSkillsMatrix` and `@workspace/matrix`'s wire `Matrix`. It names the\n * fields an emission reads and nothing else, so neither caller has to build a\n * catalogue it does not already hold.\n */\n\n/** One relationship rule as the emission's validation reads it. */\nexport type CatalogRelation = { skillId: string; reason: string }\n\n/** One dependency rule as the emission's validation reads it. */\nexport type CatalogRequirement = {\n skillIds: readonly string[]\n needsAny: boolean\n}\n\nexport type CatalogCategory = {\n displayName: string\n /** Absent for a category no domain claims; such a category is skipped rather than placed. */\n domain?: string\n /** A category that holds at most one skill. Absent is NOT exclusive — see {@link isExclusiveCategory}. */\n exclusive?: boolean\n}\n\nexport type CatalogSkill = {\n id: string\n displayName: string\n category: string\n /** Declared by the skill's own metadata as the user's rather than the catalogue's. */\n custom?: boolean\n conflictsWith?: readonly CatalogRelation[]\n requires?: readonly CatalogRequirement[]\n availableSources?: readonly { name: string; primary?: boolean }[]\n}\n\nexport type CompileCatalog = {\n readonly categories: Readonly<Record<string, CatalogCategory | undefined>>\n readonly skills: Readonly<Record<string, CatalogSkill | undefined>>\n}\n\n/**\n * True when the catalogue DECLARES this category as holding at most one skill.\n *\n * A category the catalogue does not declare is deliberately NOT treated as\n * exclusive, and that is a choice rather than a default: a rule that decides what\n * gets persisted must fire on a flag the data actually carries. The wizard's\n * toggle handler reads the same flag as `?? true` while a selection is being\n * made, which is a different question.\n */\nexport function isExclusiveCategory(\n catalog: CompileCatalog,\n category: string\n): boolean {\n return catalog.categories[category]?.exclusive === true\n}\n\n/** A category's domain, or `undefined` for one the catalogue places nowhere. */\nexport function categoryDomain(\n catalog: CompileCatalog,\n category: string\n): string | undefined {\n return catalog.categories[category]?.domain\n}\n\n/**\n * A comparator putting categories in the order the catalogue declares them, so\n * any surface that emits categories emits them in an order decided by the roster\n * rather than by the order it happened to build them in. A category the catalogue\n * does not declare sorts after every declared one, keeping the order it arrived\n * in — `Array.prototype.sort` is stable.\n */\nexport function byCategoryDeclarationOrder(\n catalog: CompileCatalog\n): (a: string, b: string) => number {\n const declarationRank = new Map<string, number>(\n Object.keys(catalog.categories).map((category, rank) => [category, rank])\n )\n const afterEveryDeclared = declarationRank.size\n const rankOf = (category: string): number =>\n declarationRank.get(category) ?? afterEveryDeclared\n\n return (a, b) => rankOf(a) - rankOf(b)\n}\n","import { MATRIX } from \"@workspace/matrix\"\n\nimport type { CompileCatalog } from \"./catalog.js\"\n\n/**\n * The catalogue the config BUILDERS read, seated by whoever is driving them.\n *\n * **The renderers do not use this and must not.** `generateConfigSource` and\n * `generateConfigTypesSource` take their catalogue as an argument at every call,\n * which is the whole point of the extraction: the CLI hands them the catalogue it\n * merged the machine's local skills into, and the editor hands them the one it\n * fetched, and neither can silently get the other's.\n *\n * `generateProjectConfigFromSkills` could not follow, and the reason is a\n * migration one rather than a design one: its signature is `(name, ids, options)`\n * and roughly a hundred existing call sites pass no catalogue, each depending on\n * one seated by `initializeMatrix` in a `beforeEach` several screens away. Adding\n * a required parameter means deciding, per call site, which catalogue that\n * `beforeEach` had in force — a judgement, not a rename. So the seat moved here\n * with the function, and the CLI's `initializeMatrix` is still its single writer.\n *\n * Recorded as debt rather than as a pattern: nothing else in this package may\n * read it, and a call-site pass that makes the catalogue an argument of\n * `generateProjectConfigFromSkills` retires this module.\n *\n * The default is the built-in public catalogue, which is what an unconfigured\n * caller should render against — never `undefined`, so no reader needs a\n * fallback of its own.\n */\nlet seated: CompileCatalog = MATRIX\n\nexport function seatCatalog(catalog: CompileCatalog): void {\n seated = catalog\n}\n\n/** The seated catalogue, read at call time so a later seating is honoured. */\nexport function seatedCatalog(): CompileCatalog {\n return seated\n}\n","/**\n * Where this package's two BUILDERS say something to a human.\n *\n * The renderers say nothing at all, and that is the design: `generateConfigSource`\n * and `generateConfigTypesSource` are total functions from a configuration and a\n * catalogue to bytes. Two of the things that moved here are not renderers —\n * `sanitizeLiquidSyntax` reports a stripped template delimiter, and\n * `generateProjectConfigFromSkills` reports a selected id the catalogue does not\n * carry — and both messages are the user's only notice that something in their\n * configuration was dropped or rewritten. Deleting them to make the move look\n * cleaner would delete the notice.\n *\n * So the sink is seated by whoever is driving. The CLI seats `utils/logger`'s own\n * `warn` and `verbose` (`src/cli/lib/compile-seat.ts`); a browser preview seats\n * nothing and the default discards, which is the honest answer there — a preview\n * has no console the visitor reads.\n */\n\n/** Matches `warn` in the CLI's `utils/logger`, options and all, so it can be seated directly. */\nexport type CompileWarn = (\n message: string,\n options?: { suppressInTest?: boolean }\n) => void\n\nexport type CompileDiagnostics = {\n warn: CompileWarn\n verbose: (message: string) => void\n}\n\nconst DISCARD: CompileDiagnostics = {\n warn: () => undefined,\n verbose: () => undefined,\n}\n\nlet seated: CompileDiagnostics = DISCARD\n\nexport function seatDiagnostics(diagnostics: CompileDiagnostics): void {\n seated = diagnostics\n}\n\n/** The seated sink, read at call time so a later seating is honoured. */\nexport function diagnostics(): CompileDiagnostics {\n return seated\n}\n","/**\n * Locale-free string ordering for anything emitted into a file somebody commits. `localeCompare`\n * with no locale argument reads the process's default collation, which Node takes from LC_ALL /\n * LANG — so it is a colleague's desktop language, not a future ICU build, that reorders a\n * regenerated catalogue. Lithuanian and Latvian both place `y` immediately after `i`, which is\n * enough to swap the shipped `mobile-storage` and `mobile-styling`. `<` compares code units and\n * cannot.\n */\nexport function bytewise(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0\n}\n","import { groupBy } from \"remeda\"\n\nimport type { CompileCatalog, CatalogSkill } from \"./catalog.js\"\nimport { LOCAL_PSEUDO_CATEGORY } from \"./paths.js\"\nimport type { SelectionValidation, SkillId, ValidationError } from \"./types.js\"\n\n/**\n * The three relationship rules a selection is judged against, as a total function\n * of a selection and a catalogue.\n *\n * The catalogue is a parameter here for the same reason it is one in the\n * renderers: `init --from` validates a shared payload against the catalogue the\n * install loaded, which is the merged one rather than the built-in.\n */\n\n/** Asserting lookup — a selection naming an id the catalogue does not hold is a caller bug. */\nfunction skillOrThrow(catalog: CompileCatalog, id: SkillId): CatalogSkill {\n const skill = catalog.skills[id]\n if (!skill) throw new Error(`Skill not found: ${id}`)\n return skill\n}\n\nconst labelOf = (catalog: CompileCatalog, id: SkillId): string =>\n skillOrThrow(catalog, id).displayName\n\nfunction validateConflicts(\n catalog: CompileCatalog,\n selections: SkillId[]\n): ValidationError[] {\n return selections.flatMap((skillAId, index) => {\n const skillA = catalog.skills[skillAId]\n if (!skillA) return []\n\n return selections.slice(index + 1).flatMap((skillBId) => {\n const conflict = (skillA.conflictsWith ?? []).find(\n (c) => c.skillId === skillBId\n )\n if (!conflict) return []\n\n return [\n {\n type: \"conflict\" as const,\n message: `${skillA.displayName} conflicts with ${labelOf(catalog, skillBId)}: ${conflict.reason}`,\n // Boundary cast: the id came out of the catalogue's own relationship table.\n skills: [skillA.id as SkillId, skillBId],\n },\n ]\n })\n })\n}\n\nfunction validateRequirements(\n catalog: CompileCatalog,\n selections: SkillId[],\n selectedSet: ReadonlySet<SkillId>\n): ValidationError[] {\n return selections.flatMap((skillId) => {\n const skill = catalog.skills[skillId]\n if (!skill) return []\n\n return (skill.requires ?? []).flatMap((requirement): ValidationError[] => {\n // Boundary cast: requirement ids come out of the catalogue's own tables.\n const requiredIds = requirement.skillIds as readonly SkillId[]\n\n if (requirement.needsAny) {\n if (requiredIds.some((reqId) => selectedSet.has(reqId))) return []\n return [\n {\n type: \"missingRequirement\",\n message: `${skill.displayName} requires one of: ${requiredIds\n .map((id) => labelOf(catalog, id))\n .join(\", \")}`,\n skills: [skillId, ...requiredIds],\n },\n ]\n }\n\n const missingIds = requiredIds.filter((reqId) => !selectedSet.has(reqId))\n if (missingIds.length === 0) return []\n return [\n {\n type: \"missingRequirement\",\n message: `${skill.displayName} requires: ${missingIds\n .map((id) => labelOf(catalog, id))\n .join(\", \")}`,\n skills: [skillId, ...missingIds],\n },\n ]\n })\n })\n}\n\nfunction validateExclusivity(\n catalog: CompileCatalog,\n selections: SkillId[]\n): ValidationError[] {\n const resolved = selections\n .map((skillId) => ({ skillId, skill: catalog.skills[skillId] }))\n .filter(\n (entry): entry is { skillId: SkillId; skill: CatalogSkill } =>\n entry.skill != null\n )\n\n return Object.entries(\n groupBy(resolved, (entry) => entry.skill.category)\n ).flatMap(([categoryId, entries]) => {\n if (entries.length <= 1) return []\n // \"local\" is a pseudo-category without exclusivity rules\n if (categoryId === LOCAL_PSEUDO_CATEGORY) return []\n\n const category = catalog.categories[categoryId]\n if (category?.exclusive !== true) return []\n\n const skillIds = entries.map((e) => e.skillId)\n return [\n {\n type: \"categoryExclusive\" as const,\n message: `Category \"${category.displayName}\" only allows one selection, but multiple selected: ${skillIds\n .map((id) => labelOf(catalog, id))\n .join(\", \")}`,\n skills: skillIds,\n },\n ]\n })\n}\n\n/**\n * Validates a complete set of skill selections against every catalogue constraint:\n * conflicting pairs, unmet requirements, and exclusive categories holding more\n * than one skill.\n *\n * `valid` is derived from `errors` rather than asserted: a literal `true` beside a populated\n * `errors` array is a comment with a type annotation, and the first `if (validation.valid)`\n * written against it would pass on every rejected selection there is.\n */\nexport function validateSelection(\n selections: SkillId[],\n catalog: CompileCatalog\n): SelectionValidation {\n const resolvedSelections = selections.map(\n // Boundary cast: the id came back off the catalogue entry `id` just found, and a catalogue\n // skill's `id` is typed `string` on the narrow shape so the wire `Matrix` satisfies it too.\n (id) => skillOrThrow(catalog, id).id as SkillId\n )\n const selectedSet = new Set<SkillId>(resolvedSelections)\n\n const errors = [\n ...validateConflicts(catalog, resolvedSelections),\n ...validateRequirements(catalog, resolvedSelections, selectedSet),\n ...validateExclusivity(catalog, resolvedSelections),\n ]\n\n return { valid: errors.length === 0, errors }\n}\n","import os from \"os\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { Domain, InstallMode } from \"./types/index.js\";\n\n/**\n * The pure half of this file lives in `@workspace/compile/paths` and is re-exported here, so no\n * call site moved. What stays declared below is the half that reads the machine: `PROJECT_ROOT`\n * is derived with `fileURLToPath(import.meta.url)` at module load and `globalInstallRoot()` calls\n * `os.homedir()` — and every renderer the editor now shares reached this module for the path\n * vocabulary alone.\n */\nimport { DEFAULT_PLUGIN_NAME } from \"@workspace/compile\";\n\nexport {\n CLAUDE_DIR,\n CLAUDE_SRC_DIR,\n CLI_INVOKE_COMMAND,\n DEFAULT_PLUGIN_NAME,\n DEFAULT_PUBLIC_SOURCE_NAME,\n DIRS,\n EJECT_SOURCE,\n GLOBAL_CONFIG_NAME,\n LOCAL_PSEUDO_CATEGORY,\n LOCAL_SKILLS_PATH,\n PLUGIN_MANIFEST_FILE,\n SKILLS_DIR_PATH,\n SOURCE_SRC_DIR,\n STANDARD_DIRS,\n STANDARD_FILES,\n} from \"@workspace/compile\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// After tsup build, dist/ is flat, so we go up one level from dist/ to get CLI root\n// In development (src/cli/consts.ts), we go up two levels\nconst isInDist = __dirname.includes(\"/dist\");\nconst CLI_ROOT = isInDist ? path.resolve(__dirname, \"..\") : path.resolve(__dirname, \"../..\");\nexport const PROJECT_ROOT = CLI_ROOT;\n\nexport const PLUGINS_SUBDIR = \"plugins\";\nexport const PLUGIN_MANIFEST_DIR = \".claude-plugin\";\nexport const MARKETPLACE_JSON = \"marketplace.json\";\n\n/**\n * The catalogue a marketplace publishes beside its manifest — its whole matrix\n * as JSON, in the shape `@workspace/matrix`'s `matrixSchema` describes.\n *\n * `marketplace.json` lists what a marketplace installs; this lists what it\n * OFFERS — every skill, category and stack, with the relationships resolved. The\n * editor fetches it directly and parses it with that schema, so nothing between\n * the two transforms it.\n */\nexport const CATALOG_JSON = \"catalog.json\";\n\n/**\n * What `generatedAt` says on a matrix that was WRITTEN to disk rather than built\n * in memory — a fixed word where the live matrix carries an ISO timestamp.\n *\n * A moment recorded in a committed artefact makes every regeneration a diff even\n * when nothing about the matrix moved, which costs the vendored\n * `types/generated/matrix.ts` a pull request of pure noise and costs\n * {@link CATALOG_JSON} its cache: the editor fetches the catalogue directly, and\n * a file whose bytes always change can never answer a conditional request.\n * Nothing reads the field back, so there is nothing a real timestamp would buy.\n *\n * Both emitters — `scripts/generate-source-types.ts` and `build marketplace` —\n * stamp this, and they are the only two places a matrix becomes a file.\n */\nexport const GENERATED_AT_BUILD = \"build\";\n\n/** Compiled plugin output directory, relative to a marketplace root */\nexport const PLUGINS_DIST_PATH = \"dist/plugins\";\n\n/** Path to the marketplace manifest inside a marketplace/source root. */\nexport function marketplaceManifestPath(dir: string): string {\n return path.join(dir, PLUGIN_MANIFEST_DIR, MARKETPLACE_JSON);\n}\n\n/**\n * Home directory used as the root for global installations, read when it is asked for.\n *\n * A `const` here froze whichever home was in force when this module was first imported, and the\n * damage was invisible: `runCliCommand` drives oclif through `dist/`, a SECOND module graph first\n * imported by whichever spec runs a command first, so the value settled on that spec's fake home\n * and every later spec in the file wrote under a directory its own `afterEach` had removed — the\n * writes succeeding, into the wrong tree. In the `src` graph it was worse still: `consts.ts` is\n * imported while vitest collects, before any hook has redirected the home, so the constant held\n * the DEVELOPER'S own home in every unit test that read it.\n *\n * Every other home-dir reader in the codebase already calls `os.homedir()` at call time —\n * `installBaseDir`, `isHomeDirectory`, `globalPairPaths` — each with its own note saying why.\n * This is that rule arriving at the constants file, and `home-dir-read-at-call-time.test.ts`\n * refuses the frozen shape from coming back.\n */\nexport function globalInstallRoot(): string {\n return os.homedir();\n}\n\n/** Root of the CLI's own cache, read at call time for the reason {@link globalInstallRoot} carries. */\nexport function cacheRoot(): string {\n return path.join(os.homedir(), \".cache\", DEFAULT_PLUGIN_NAME);\n}\n\n/**\n * The editor — the web half of the product, where a configuration is built without the wizard\n * and handed to `init --from <id>`.\n *\n * THE PATH IS PART OF THE ADDRESS. `agentsinc.sh` is the apex, which serves the landing page,\n * and `/docs` beside it is the documentation — both on the `agents-inc-www` Worker. The editor\n * is a Route beneath them, `agentsinc.sh/editor*` on `agents-inc-editor`\n * (`apps/editor/wrangler.jsonc`). Dropping the segment does not fail: it opens the marketing\n * page, which knows nothing about `?fromId=`, so a shared configuration is silently lost.\n *\n * The config store it posts to is the sibling `api.agentsinc.sh`, spelled once in\n * `lib/seed/fetch-seed.ts` because that one is overridable for tests and this one is not.\n */\nexport const EDITOR_URL = \"https://agentsinc.sh/editor\";\n\n/**\n * Where a shared configuration opens in the editor — the form the editor's own Share button\n * copies, so a link the CLI prints and one the web app hands out are the same link.\n *\n * Exported before it had a second caller, and now it has two: `share` prints it, and\n * `edit --ui` hands it to a browser. Two surfaces each building their own query string is\n * exactly how one of them ends up pointing at a page the other never opens.\n */\nexport function editorConfigUrl(id: string): string {\n return `${EDITOR_URL}/?fromId=${encodeURIComponent(id)}`;\n}\n\n/**\n * Internal `edit` flag marking the invocation as the project-setup half of a `cc init`\n * that routed through the dashboard. Not part of the documented CLI surface (declared\n * `hidden`): `init` is the only caller, and it passes the flag so `edit` can tell\n * \"set this project up\" apart from a bare inspection.\n */\nexport const EDIT_PROJECT_SETUP_FLAG = \"project-setup\";\n\nexport const SKILL_CATEGORIES_PATH = \"config/skill-categories.ts\";\nexport const SKILL_RULES_PATH = \"config/skill-rules.ts\";\nexport const STACKS_FILE_PATH = \"config/stacks.ts\";\nexport const DEFAULT_VERSION = \"1.0.0\";\n\n// \"0.0.0\" indicates no version was explicitly set\nexport const DEFAULT_DISPLAY_VERSION = \"0.0.0\";\n\n// JSON Schema URLs for yaml-language-server $schema comments.\n// Uses raw.githubusercontent.com so schemas resolve without requiring the CLI as a dependency.\n// The prefix encodes two things that have each moved once: the repository name (renamed to\n// agents-inc/agents-inc on 2026-08-04, when it stopped being only the CLI) and this package's\n// location inside it (packages/cli, since the monorepo merge). If either moves again this must\n// move with it, or every generated $schema comment 404s. GitHub redirects the old forms — files\n// written before each move still resolve, verified two renames deep — but a redirect is a\n// courtesy, so what we emit should be the current address rather than rely on one.\nconst SCHEMA_PKG_PREFIX =\n \"https://raw.githubusercontent.com/agents-inc/agents-inc/main/packages/cli/src/schemas\";\n\nexport const SCHEMA_PATHS = {\n agent: `${SCHEMA_PKG_PREFIX}/agent.schema.json`,\n metadata: `${SCHEMA_PKG_PREFIX}/metadata.schema.json`,\n customMetadata: `${SCHEMA_PKG_PREFIX}/custom-metadata.schema.json`,\n marketplace: `${SCHEMA_PKG_PREFIX}/marketplace.schema.json`,\n projectConfig: `${SCHEMA_PKG_PREFIX}/project-config.schema.json`,\n projectSourceConfig: `${SCHEMA_PKG_PREFIX}/project-source-config.schema.json`,\n stacks: `${SCHEMA_PKG_PREFIX}/stacks.schema.json`,\n} as const;\n\nexport const YAML_FORMATTING = {\n INDENT: 2,\n LINE_WIDTH: 120,\n /** lineWidth: 0 disables wrapping — used for metadata files */\n LINE_WIDTH_NONE: 0,\n} as const;\n\n// Shared glyphs: SELECTED/CHECK render the same checkmark; SKIPPED/DISABLED the\n// same en-dash. Both keys are kept so call sites express intent, but the value\n// has a single source.\nconst CHECK_GLYPH = \"\\u2713\";\nconst EN_DASH_GLYPH = \"\\u2013\";\n\nexport const UI_SYMBOLS = {\n CHEVRON: \"\\u276F\",\n CHEVRON_SPACER: \" \",\n SELECTED: CHECK_GLYPH,\n UNSELECTED: \"\\u25CB\",\n CURRENT: \"\\u25CF\",\n SKIPPED: EN_DASH_GLYPH,\n DISCOURAGED: \"!\",\n DISABLED: EN_DASH_GLYPH,\n LOCK: \"\\uD83D\\uDD12\",\n EJECT: \"\\u23CF\",\n BULLET: \"\\u2022\",\n SCROLL_UP: \"\\u25B2\",\n SCROLL_DOWN: \"\\u25BC\",\n CHECK: CHECK_GLYPH,\n CROSS: \"\\u2717\",\n /** Removed/pending-removal diff marker (ASCII hyphen). Info panel + Sources tab share it. */\n REMOVED: \"-\",\n /** Added/newly-selected diff marker (ASCII plus). Info panel + Sources tab share it. */\n ADDED: \"+\",\n} as const;\n\nexport const GITHUB_SOURCE = {\n HTTPS_PREFIX: \"https://github.com/\",\n GITHUB_PREFIX: \"github:\",\n GH_PREFIX: \"gh:\",\n} as const;\n\n/** Strict kebab-case: starts with letter, segments separated by single hyphens, no trailing hyphens */\nexport const KEBAB_CASE_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\n\n/** Author handle format: `@` followed by a lowercase-led alphanumeric-hyphen slug. */\nexport const AUTHOR_HANDLE_PATTERN = /^@[a-z][a-z0-9-]*$/;\n\nexport const HASH_PREFIX_LENGTH = 7;\n\n/** Hex chars from SHA-256 hash used in cache directory names (64 bits of collision resistance) */\nexport const CACHE_HASH_LENGTH = 16;\n\n/** Max chars of human-readable prefix in cache directory names (for debugging) */\nexport const CACHE_READABLE_PREFIX_LENGTH = 32;\n\n// File size limits for parsing boundaries (DoS prevention)\nconst ONE_MB = 1024 * 1024;\nexport const MAX_MARKETPLACE_FILE_SIZE = 10 * ONE_MB;\nexport const MAX_PLUGIN_FILE_SIZE = ONE_MB;\nexport const MAX_CONFIG_FILE_SIZE = ONE_MB;\n\nexport const MAX_JSON_NESTING_DEPTH = 10;\nexport const MAX_MARKETPLACE_PLUGINS = 10_000;\n\nexport const SCROLL_VIEWPORT = {\n /** Height of the \"N more above\" scroll indicator */\n SCROLL_INDICATOR_HEIGHT: 1,\n /** Estimated lines per category name row (including top margin) */\n CATEGORY_NAME_LINES: 2,\n /** Margin between category sections (marginTop on CategorySection) */\n CATEGORY_MARGIN_LINES: 1,\n /** Minimum rows to show at least 1 category before enabling scroll */\n MIN_VIEWPORT_ROWS: 5,\n} as const;\n\n/**\n * The terminal geometry every command refuses to run below. This is the only\n * minimum-size gate there is: `BaseCommand.ensureTerminalSize` reads it and\n * blocks until the terminal is at least this big, so raising `ROWS` raises the\n * bar for the whole CLI, tests included.\n *\n * `ROWS: 20` is measured, not guessed. Driving the real binary to the build\n * step — the binding constraint, since it is the tallest step — gives:\n * 15/16/17 corrupt (overlapping card borders, unreadable); 18 the first clean\n * render (one complete category card, correctly clipped); 20 clean with one\n * full card plus the next category heading; 24 comfortable. 18 is the hard\n * correctness floor because it is where {@link SCROLL_VIEWPORT.MIN_VIEWPORT_ROWS}\n * starts being satisfied — below it the shared scroll gate stops clipping and\n * the grid bleeds over its borders. 20 buys two rows of margin above that floor\n * while staying under the 24-row default of common terminals.\n */\nexport const MIN_TERMINAL_SIZE = {\n COLS: 80,\n ROWS: 20,\n} as const;\n\n/**\n * The terminal height at or above which the stack step paints the six-row ASCII\n * logo. Below it the logo is dropped — it is decoration, and the stack list is\n * the content.\n *\n * This is NOT a second size gate. {@link MIN_TERMINAL_SIZE} decides whether a\n * command runs at all; this decides only whether one decorative element renders\n * inside a terminal that already cleared that gate. Conflating them would be a\n * regression in both directions: raising `MIN_TERMINAL_SIZE.ROWS` to 26 would\n * refuse to run in the 24-row terminal that is still a common default, and\n * lowering this to 20 brings back the bleed below.\n *\n * 26 is measured against the real binary at 100 columns, on the stack step:\n *\n * | rows | stack step with the logo rendered |\n * | ---- | ----------------------------------------------------------------- |\n * | 20 | bleeds — stack rows paint over the \"Start from scratch\" row |\n * | 24 | bleeds — stack rows paint through the hotkey row and the footer |\n * | 26 | clean |\n * | 27 | clean |\n * | 28 | clean |\n *\n * The mechanism: the logo eats six rows of the stack step's list viewport,\n * starving it below {@link SCROLL_VIEWPORT.MIN_VIEWPORT_ROWS}, at which point\n * the shared scroll hooks stop clipping and the rows bleed. Hiding the logo\n * returns those rows to the viewport; the bail-instead-of-clip behaviour itself\n * is untouched and remains the open underlying defect.\n */\nexport const LOGO_MIN_TERMINAL_ROWS = 26;\n\nexport const DEFAULT_BRANDING = {\n NAME: \"Agents Inc.\",\n} as const;\n\n/**\n * The npm package the public catalogue publishes from, and the one thing that\n * tells the catalogue apart from a marketplace merely calling itself\n * `DEFAULT_PUBLIC_SOURCE_NAME` (declared in `@workspace/compile/paths` and re-exported above).\n *\n * Nothing a marketplace ships is unforgeable — every signal is a string in a file\n * its author controls, this one included. What it does is make the reserved\n * namespace unreachable by ACCIDENT: taking it requires renaming your own package\n * to the catalogue's published, npm-scope-governed name, which is impersonation\n * rather than drift.\n *\n * Two guards read it and must agree, which is why it lives here rather than in\n * either: `validateMarketplaceName` (`lib/marketplace-generator.ts`) exempts the\n * catalogue from the reserved-name refusal at BUILD time, and the collision guard\n * in `lib/loading/source-loader.ts` exempts it from the catalogue-id refusal at\n * LOAD time. Two definitions of who the catalogue is would let a source be the\n * catalogue to one guard and not to the other.\n */\nexport const PUBLIC_CATALOGUE_PACKAGE = \"@agents-inc/skills\";\n\n/** Human-readable labels for skill source types shown in the wizard and edit command */\nexport const SOURCE_DISPLAY_NAMES: Record<string, string> = {\n public: \"Public\",\n eject: \"Eject\",\n \"agents-inc\": \"Agents Inc\",\n};\n\n/** The two install modes a Sources row offers, in the order the grid renders them. */\nexport const INSTALL_MODES = [\"eject\", \"plugin\"] as const satisfies readonly Exclude<\n InstallMode,\n \"mixed\"\n>[];\n\n/**\n * How the Sources grid captions each of its two cells.\n *\n * Deliberately not `INSTALL_MODE_LABELS` (`Eject`/`Plugin`), which names a mode by what it does\n * to the files, nor `SOURCE_DISPLAY_NAMES`, which labels a `SkillConfig.origin` VALUE on the\n * summary surfaces. The grid asks where the skill should LIVE, and the two answers are the\n * project's own copy or the marketplace plugin — so the cells read `Local` and `Plugin`, which\n * is also the two-state badge the editor settled on (`.claude-design/DECISIONS.md`).\n */\nexport const INSTALL_MODE_CELL_LABELS = {\n eject: \"Local\",\n plugin: \"Plugin\",\n} as const satisfies Record<Exclude<InstallMode, \"mixed\">, string>;\n\n/** Resolves a source name to its human-readable display label. */\nexport function formatSourceDisplayName(source: string): string {\n return SOURCE_DISPLAY_NAMES[source] ?? source;\n}\n\n/**\n * Marketplace-row value when skills are selected but every one of them is `EJECT_SOURCE`. \"eject\"\n * names no marketplace, so there is nothing to list — but the selection is not empty either, and\n * naming the default public marketplace would claim an origin none of those skills has.\n */\nexport const ALL_SKILLS_EJECTED_LABEL = \"All skills ejected\";\n\n// TODO: update naming convention to GRAY_1,2, etc\nexport const CLI_COLORS = {\n PRIMARY: \"#99FFFF\",\n SUCCESS: \"#90EE90\",\n ERROR: \"#DC343B\",\n WARNING: \"#E6A817\",\n INFO: \"#3B82F6\",\n NEUTRAL: \"#888888\",\n FOCUS: \"#87CEFA\",\n UNFOCUSED: \"#FFFFFF\",\n WHITE: \"#FFFFFF\",\n BLACK: \"#000000\",\n DIM: \"#666666\",\n GRAY_1: \"#ddd\",\n LABEL_BG: \"#383838\",\n TOAST_BG: \"#EEEEEE\",\n TOAST_FG: \"#000000\",\n HOVER_BG: \"#333333\",\n} as const;\n\n/** Default domains pre-selected when \"Start from scratch\" is chosen (all except CLI) */\nexport const DEFAULT_SCRATCH_DOMAINS: readonly Domain[] = [\"web\", \"api\", \"mobile\"];\n\n/** Domain used when no active domain can be resolved from wizard state. */\nexport const FALLBACK_DOMAIN: Domain = \"web\";\n\n/**\n * The product's own mark, and **deliberately not brandable** (owner ruling 2026-08-24).\n *\n * `branding.name` reaches every command that prints a name — the dashboard, the wizard footer,\n * `doctor`'s header, six surfaces in all — so a white-labelled installation says its own name\n * throughout. This does not follow it, and that is the decision rather than an omission: the mark\n * is the product's, not the installation's.\n *\n * Filed as CLI-769 by an agent that found a white-labelled install still drawing `AGENTS INC` in\n * ASCII and read the gap as unfinished branding. Recorded here so the next reader finds the answer\n * beside the constant instead of refiling it. `package.json`'s `description` — the first line of\n * `--help`, which oclif reads from package metadata — is the same class and the same answer.\n */\nexport const ASCII_LOGO = ` █████╗ ██████╗ ███████╗███╗ ██╗████████╗███████╗ ██╗███╗ ██╗ ██████╗\n██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝██╔════╝ ██║████╗ ██║██╔════╝\n███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ███████╗ ██║██╔██╗ ██║██║\n██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ╚════██║ ██║██║╚██╗██║██║\n██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ███████║ ██║██║ ╚████║╚██████╗\n╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝`;\n"],"mappings":";;;AA4eO,IAAM,YAAY;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EA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","names":["z","agentNameSchema","z","z","z","z","skillRelationSchema","skillRequirementSchema","z","seated","seated","groupBy","labelOf","groupBy","__filename","__dirname"]}