@shepai/cli 1.77.2-pr240.88b3534 → 1.77.2-pr243.38f1a1a

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 (527) hide show
  1. package/apis/json-schema/AgentRun.yaml +3 -0
  2. package/apis/json-schema/ModelConfiguration.yaml +5 -20
  3. package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts +8 -0
  4. package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +1 -0
  6. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +1 -0
  9. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +9 -2
  11. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +4 -0
  12. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  13. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
  15. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts +3 -3
  16. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  17. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +5 -8
  18. package/dist/packages/core/src/domain/generated/output.d.ts +7 -15
  19. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  20. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts +1 -0
  21. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts.map +1 -1
  22. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.js +2 -0
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +8 -10
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +22 -3
  28. package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.js +2 -2
  29. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  30. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
  31. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +8 -0
  32. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +37 -0
  34. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts +1 -0
  35. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.js +3 -0
  37. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +5 -0
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +17 -0
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -0
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -0
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -0
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +5 -0
  47. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  48. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +1 -0
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +1 -0
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  51. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +4 -0
  52. package/dist/packages/core/src/infrastructure/services/settings.service.d.ts +1 -1
  53. package/dist/packages/core/src/infrastructure/services/settings.service.js +1 -1
  54. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  55. package/dist/src/presentation/cli/commands/feat/new.command.js +2 -0
  56. package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
  57. package/dist/src/presentation/cli/commands/feat/show.command.js +13 -0
  58. package/dist/src/presentation/cli/commands/settings/index.d.ts +1 -0
  59. package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
  60. package/dist/src/presentation/cli/commands/settings/index.js +4 -1
  61. package/dist/src/presentation/cli/commands/settings/model.command.d.ts +17 -0
  62. package/dist/src/presentation/cli/commands/settings/model.command.d.ts.map +1 -0
  63. package/dist/src/presentation/cli/commands/settings/model.command.js +62 -0
  64. package/dist/src/presentation/cli/ui/tables.d.ts.map +1 -1
  65. package/dist/src/presentation/cli/ui/tables.js +6 -23
  66. package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.d.ts.map +1 -1
  67. package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.js +3 -1
  68. package/dist/src/presentation/web/app/actions/create-feature.d.ts +4 -0
  69. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  70. package/dist/src/presentation/web/app/actions/create-feature.js +5 -1
  71. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts +12 -0
  72. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -0
  73. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +49 -0
  74. package/dist/src/presentation/web/app/actions/get-supported-models.d.ts +11 -0
  75. package/dist/src/presentation/web/app/actions/get-supported-models.d.ts.map +1 -0
  76. package/dist/src/presentation/web/app/actions/get-supported-models.js +24 -0
  77. package/dist/src/presentation/web/app/actions/update-agent-and-model.d.ts +5 -0
  78. package/dist/src/presentation/web/app/actions/update-agent-and-model.d.ts.map +1 -0
  79. package/dist/src/presentation/web/app/actions/update-agent-and-model.js +28 -0
  80. package/dist/src/presentation/web/app/actions/update-model.d.ts +15 -0
  81. package/dist/src/presentation/web/app/actions/update-model.d.ts.map +1 -0
  82. package/dist/src/presentation/web/app/actions/update-model.js +35 -0
  83. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -1
  84. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  85. package/dist/src/presentation/web/app/build-feature-node-data.js +1 -0
  86. package/dist/src/presentation/web/app/build-graph-nodes.js +1 -0
  87. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts +3 -1
  88. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
  89. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +2 -2
  90. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +2 -4
  92. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +9 -1
  93. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +29 -4
  95. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +5 -0
  96. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +32 -3
  98. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +0 -2
  100. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts +3 -1
  101. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts.map +1 -1
  102. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.js +6 -2
  103. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts +1 -0
  104. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts.map +1 -1
  105. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +15 -0
  106. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +2 -0
  107. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
  108. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +11 -2
  109. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  110. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +2 -3
  111. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -1
  112. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  113. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +0 -4
  114. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  115. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +14 -15
  116. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +0 -1
  117. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  118. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +19 -23
  119. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  120. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -0
  121. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +12 -0
  122. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -0
  123. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +59 -0
  124. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts +11 -0
  125. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -0
  126. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +103 -0
  127. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts +24 -0
  128. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts.map +1 -0
  129. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.js +53 -0
  130. package/dist/src/presentation/web/components/features/settings/ModelPicker/index.d.ts +18 -0
  131. package/dist/src/presentation/web/components/features/settings/ModelPicker/index.d.ts.map +1 -0
  132. package/dist/src/presentation/web/components/features/settings/ModelPicker/index.js +84 -0
  133. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  134. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +7 -21
  135. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +2 -0
  136. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  137. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +1 -1
  138. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  139. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +28 -3
  140. package/dist/src/presentation/web/components/ui/checkbox-group-item.js +1 -1
  141. package/dist/src/presentation/web/components/ui/checkbox-group.js +1 -1
  142. package/dist/src/presentation/web/components/ui/command.d.ts +19 -0
  143. package/dist/src/presentation/web/components/ui/command.d.ts.map +1 -0
  144. package/dist/src/presentation/web/components/ui/command.js +26 -0
  145. package/dist/src/presentation/web/components/ui/switch.js +1 -1
  146. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts +2 -0
  147. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  148. package/dist/src/presentation/web/lib/model-metadata.d.ts +6 -0
  149. package/dist/src/presentation/web/lib/model-metadata.d.ts.map +1 -0
  150. package/dist/src/presentation/web/lib/model-metadata.js +41 -0
  151. package/dist/tsconfig.build.tsbuildinfo +1 -1
  152. package/package.json +1 -1
  153. package/web/.next/BUILD_ID +1 -1
  154. package/web/.next/build-manifest.json +4 -4
  155. package/web/.next/cache/.previewinfo +1 -1
  156. package/web/.next/cache/.rscinfo +1 -1
  157. package/web/.next/cache/.tsbuildinfo +1 -1
  158. package/web/.next/cache/config.json +3 -3
  159. package/web/.next/fallback-build-manifest.json +2 -2
  160. package/web/.next/prerender-manifest.json +3 -3
  161. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  162. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +62 -32
  163. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  164. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  165. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  167. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
  168. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  169. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  170. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  171. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  172. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  173. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  174. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  175. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +62 -32
  176. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  177. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  178. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  179. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  180. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
  181. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  182. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  183. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  184. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  185. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  186. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  188. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  189. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  190. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  191. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  192. package/web/.next/server/app/_global-error.html +2 -2
  193. package/web/.next/server/app/_global-error.rsc +1 -1
  194. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  195. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  196. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  197. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  198. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  199. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  200. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  201. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  202. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  203. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  204. package/web/.next/server/app/settings/page/server-reference-manifest.json +36 -6
  205. package/web/.next/server/app/settings/page.js +2 -2
  206. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  207. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  208. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  209. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  210. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  211. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  212. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  213. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  214. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  215. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  216. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  217. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  218. package/web/.next/server/app/version/page.js.nft.json +1 -1
  219. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  220. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  221. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  222. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
  223. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  224. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_c7cfe351._.js +3 -0
  226. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_c7cfe351._.js.map +1 -0
  227. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  228. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  230. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +4 -0
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js.map +1 -0
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  237. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__bff2deea._.js +3 -0
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__bff2deea._.js.map +1 -0
  240. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +1 -1
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +1 -1
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__d076a90b._.js +3 -0
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__d076a90b._.js.map +1 -0
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js.map +1 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  250. package/web/.next/server/chunks/ssr/_0bd0fafb._.js +9 -0
  251. package/web/.next/server/chunks/ssr/_0bd0fafb._.js.map +1 -0
  252. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  253. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
  254. package/web/.next/server/chunks/ssr/_14fa79b2._.js +3 -0
  255. package/web/.next/server/chunks/ssr/_14fa79b2._.js.map +1 -0
  256. package/web/.next/server/chunks/ssr/_16235e5e._.js +1 -1
  257. package/web/.next/server/chunks/ssr/_1f7bca18._.js +3 -0
  258. package/web/.next/server/chunks/ssr/_1f7bca18._.js.map +1 -0
  259. package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  260. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
  261. package/web/.next/server/chunks/ssr/_6c0d8642._.js +3 -0
  262. package/web/.next/server/chunks/ssr/_6c0d8642._.js.map +1 -0
  263. package/web/.next/server/chunks/ssr/_6e08ce21._.js +1 -1
  264. package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -1
  265. package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  266. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
  267. package/web/.next/server/chunks/ssr/{_6645f218._.js → _8dacd1e7._.js} +2 -2
  268. package/web/.next/server/chunks/ssr/{_6645f218._.js.map → _8dacd1e7._.js.map} +1 -1
  269. package/web/.next/server/chunks/ssr/_9ac70f88._.js +5 -0
  270. package/web/.next/server/chunks/ssr/_9ac70f88._.js.map +1 -0
  271. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  272. package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
  273. package/web/.next/server/chunks/ssr/{_2557e3df._.js → _b1f9e8e6._.js} +2 -2
  274. package/web/.next/server/chunks/ssr/{_2557e3df._.js.map → _b1f9e8e6._.js.map} +1 -1
  275. package/web/.next/server/chunks/ssr/{_88c4dab8._.js → _b5fc318a._.js} +2 -2
  276. package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +1 -0
  277. package/web/.next/server/chunks/ssr/_d4b20e29._.js +1 -1
  278. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  279. package/web/.next/server/chunks/ssr/_ed356507._.js +3 -0
  280. package/web/.next/server/chunks/ssr/{_5428b384._.js.map → _ed356507._.js.map} +1 -1
  281. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  282. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  283. package/web/.next/server/chunks/ssr/node_modules__pnpm_1fcecd3a._.js +3 -0
  284. package/web/.next/server/chunks/ssr/node_modules__pnpm_1fcecd3a._.js.map +1 -0
  285. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
  286. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +1 -1
  287. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
  288. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +1 -1
  289. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  290. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  291. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  292. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  293. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  294. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +6 -0
  298. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -0
  299. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +6 -0
  304. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -0
  305. package/web/.next/server/middleware-build-manifest.js +2 -2
  306. package/web/.next/server/pages/500.html +2 -2
  307. package/web/.next/server/server-reference-manifest.js +1 -1
  308. package/web/.next/server/server-reference-manifest.json +117 -59
  309. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  310. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +4 -4
  311. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  312. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  313. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +62 -32
  314. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  315. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  316. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  317. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  318. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
  319. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  320. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  321. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  322. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  323. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  324. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  325. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  326. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +62 -32
  327. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +1 -1
  328. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  329. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  330. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  331. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
  332. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  333. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  334. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  335. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  336. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  337. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  338. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  339. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  340. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  341. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  342. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  343. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  344. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  345. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  346. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  347. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  348. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  349. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  350. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  351. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  352. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  353. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  354. package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/build-manifest.json +2 -2
  355. package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/server-reference-manifest.json +36 -6
  356. package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page.js +2 -2
  357. package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page.js.nft.json +1 -1
  358. package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  359. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +2 -2
  360. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  361. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  362. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  363. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +2 -2
  364. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  365. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  366. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  367. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +2 -2
  368. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  369. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  370. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  371. package/web/.next/standalone/src/presentation/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  372. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
  373. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  374. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_c7cfe351._.js +3 -0
  375. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  376. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  377. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  378. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  379. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +4 -0
  380. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  381. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__bff2deea._.js +3 -0
  382. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
  383. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +1 -1
  384. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d076a90b._.js +3 -0
  385. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
  386. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  387. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0bd0fafb._.js +9 -0
  388. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  389. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_14fa79b2._.js +3 -0
  390. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_16235e5e._.js +1 -1
  391. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_1f7bca18._.js +3 -0
  392. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  393. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6c0d8642._.js +3 -0
  394. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6e08ce21._.js +1 -1
  395. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  396. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_6645f218._.js → _8dacd1e7._.js} +2 -2
  397. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9ac70f88._.js +5 -0
  398. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  399. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_2557e3df._.js → _b1f9e8e6._.js} +2 -2
  400. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_88c4dab8._.js → _b5fc318a._.js} +2 -2
  401. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_d4b20e29._.js +1 -1
  402. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_ed356507._.js +3 -0
  403. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  404. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_1fcecd3a._.js +3 -0
  405. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
  406. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
  407. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  408. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  409. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  410. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
  411. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +6 -0
  412. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  413. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  414. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +6 -0
  415. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +2 -2
  416. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  417. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  418. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +117 -59
  419. package/web/.next/standalone/src/presentation/web/app/(dashboard)/@drawer/create/page.tsx +4 -0
  420. package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +20 -2
  421. package/web/.next/standalone/src/presentation/web/app/actions/get-all-agent-models.ts +65 -0
  422. package/web/.next/standalone/src/presentation/web/app/actions/get-supported-models.ts +26 -0
  423. package/web/.next/standalone/src/presentation/web/app/actions/update-agent-and-model.ts +41 -0
  424. package/web/.next/standalone/src/presentation/web/app/actions/update-model.ts +45 -0
  425. package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +1 -1
  426. package/web/.next/standalone/src/presentation/web/app/build-feature-node-data.ts +1 -0
  427. package/web/.next/standalone/src/presentation/web/app/build-graph-nodes.ts +1 -0
  428. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +6 -0
  429. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +2 -10
  430. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +56 -0
  431. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +238 -118
  432. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +0 -2
  433. package/web/.next/standalone/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.tsx +16 -0
  434. package/web/.next/standalone/src/presentation/web/components/common/feature-list-item/feature-list-item.tsx +33 -0
  435. package/web/.next/standalone/src/presentation/web/components/common/feature-node/agent-type-icons.tsx +54 -2
  436. package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +2 -3
  437. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +2 -6
  438. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.stories.tsx +19 -24
  439. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.tsx +43 -24
  440. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +4 -0
  441. package/web/.next/standalone/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.tsx +72 -0
  442. package/web/.next/standalone/src/presentation/web/components/features/settings/AgentModelPicker/index.tsx +228 -0
  443. package/web/.next/standalone/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.tsx +64 -0
  444. package/web/.next/standalone/src/presentation/web/components/features/settings/ModelPicker/index.tsx +167 -0
  445. package/web/.next/standalone/src/presentation/web/components/features/settings/settings-page-client.tsx +25 -41
  446. package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx +28 -3
  447. package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +4 -0
  448. package/web/.next/standalone/src/presentation/web/components/ui/checkbox-group-item.tsx +1 -1
  449. package/web/.next/standalone/src/presentation/web/components/ui/checkbox-group.tsx +1 -1
  450. package/web/.next/standalone/src/presentation/web/components/ui/command.tsx +114 -0
  451. package/web/.next/standalone/src/presentation/web/components/ui/switch.tsx +1 -1
  452. package/web/.next/standalone/src/presentation/web/hooks/sidebar-features-context.tsx +2 -0
  453. package/web/.next/standalone/src/presentation/web/lib/model-metadata.ts +51 -0
  454. package/web/.next/static/chunks/052485f50dcfde15.js +1 -0
  455. package/web/.next/static/chunks/{f8e33bd4c6770071.js → 27095cecb1727d23.js} +1 -1
  456. package/web/.next/static/chunks/{25a8e4460619670a.js → 283181d9a343511c.js} +1 -1
  457. package/web/.next/static/chunks/{5ea9cc400337eeae.js → 2a44de46c46c600d.js} +1 -1
  458. package/web/.next/static/chunks/42bd17823c7f41a1.css +2 -0
  459. package/web/.next/static/chunks/{6205ca0c28401b31.js → 49123f4b0409b929.js} +2 -2
  460. package/web/.next/static/chunks/51454a23ce051ec9.js +1 -0
  461. package/web/.next/static/chunks/{98e3a7cf58fc912a.js → 672e3da3ad26005b.js} +1 -1
  462. package/web/.next/static/chunks/7acc79e599df9890.js +1 -0
  463. package/web/.next/static/chunks/{36d88ff9f7db4eb9.js → 876edf7bbd901942.js} +1 -1
  464. package/web/.next/static/chunks/8f122c3ac2102300.js +11 -0
  465. package/web/.next/static/chunks/a1ddf1f9b1435434.js +3 -0
  466. package/web/.next/static/chunks/b133b22e30beae6f.js +1 -0
  467. package/web/.next/static/chunks/c8b2868ae430a586.js +1 -0
  468. package/web/.next/static/chunks/{3f88555d42e6c0a5.js → d172a351aba3f4cd.js} +1 -1
  469. package/web/.next/static/chunks/d36eb1075dbac452.js +1 -0
  470. package/web/.next/static/chunks/e32b50a896d9283e.js +1 -0
  471. package/web/.next/static/chunks/e57ea8d6f9226105.js +1 -0
  472. package/web/.next/static/chunks/{89aac43287d73b02.js → ed3a602003bcb31b.js} +1 -1
  473. package/web/.next/static/chunks/fa61d5c4313b14cf.js +1 -0
  474. package/web/.next/static/chunks/{turbopack-080e470ea902d0ba.js → turbopack-426d9bc2450816ba.js} +1 -1
  475. package/web/.next/trace +1 -1
  476. package/web/.next/trace-build +1 -1
  477. package/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js +0 -3
  478. package/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js.map +0 -1
  479. package/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js +0 -3
  480. package/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js.map +0 -1
  481. package/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js +0 -4
  482. package/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js.map +0 -1
  483. package/web/.next/server/chunks/ssr/_4093a637._.js +0 -5
  484. package/web/.next/server/chunks/ssr/_4093a637._.js.map +0 -1
  485. package/web/.next/server/chunks/ssr/_5428b384._.js +0 -3
  486. package/web/.next/server/chunks/ssr/_88c4dab8._.js.map +0 -1
  487. package/web/.next/server/chunks/ssr/_956601a1._.js +0 -9
  488. package/web/.next/server/chunks/ssr/_956601a1._.js.map +0 -1
  489. package/web/.next/server/chunks/ssr/_c26c679f._.js +0 -3
  490. package/web/.next/server/chunks/ssr/_c26c679f._.js.map +0 -1
  491. package/web/.next/server/chunks/ssr/_caf6533c._.js +0 -3
  492. package/web/.next/server/chunks/ssr/_caf6533c._.js.map +0 -1
  493. package/web/.next/server/chunks/ssr/_f7f6173c._.js +0 -3
  494. package/web/.next/server/chunks/ssr/_f7f6173c._.js.map +0 -1
  495. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +0 -3
  496. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +0 -1
  497. package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +0 -6
  498. package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +0 -1
  499. package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +0 -6
  500. package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js.map +0 -1
  501. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js +0 -3
  502. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js +0 -3
  503. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js +0 -4
  504. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_4093a637._.js +0 -5
  505. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_5428b384._.js +0 -3
  506. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_956601a1._.js +0 -9
  507. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_c26c679f._.js +0 -3
  508. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_caf6533c._.js +0 -3
  509. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_f7f6173c._.js +0 -3
  510. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +0 -3
  511. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +0 -6
  512. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +0 -6
  513. package/web/.next/static/chunks/0d1285175b320302.js +0 -1
  514. package/web/.next/static/chunks/146c0a7697bc5a5c.js +0 -1
  515. package/web/.next/static/chunks/16c1db929d7ed3c9.js +0 -1
  516. package/web/.next/static/chunks/18deef44e5e36e2b.js +0 -3
  517. package/web/.next/static/chunks/3479d6ae297e5410.css +0 -2
  518. package/web/.next/static/chunks/700501f5ac2bb320.js +0 -1
  519. package/web/.next/static/chunks/730cb306a35d6396.js +0 -1
  520. package/web/.next/static/chunks/907556417091ee06.js +0 -11
  521. package/web/.next/static/chunks/aa6cc6df962a3fc0.js +0 -3
  522. package/web/.next/static/chunks/c63d1c145c5a07dc.js +0 -1
  523. package/web/.next/static/chunks/fc00e1b83852da4e.js +0 -1
  524. package/web/.next/static/chunks/fe80866e23f343eb.js +0 -1
  525. /package/web/.next/static/{x8A1bt8tX5vg9IpB1ksif → oP1Ne_Ys4fAUIuxF-xCE4}/_buildManifest.js +0 -0
  526. /package/web/.next/static/{x8A1bt8tX5vg9IpB1ksif → oP1Ne_Ys4fAUIuxF-xCE4}/_clientMiddlewareManifest.json +0 -0
  527. /package/web/.next/static/{x8A1bt8tX5vg9IpB1ksif → oP1Ne_Ys4fAUIuxF-xCE4}/_ssgManifest.js +0 -0
@@ -0,0 +1,167 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { Check, ChevronsUpDown } from 'lucide-react';
5
+ import { getSupportedModels } from '@/app/actions/get-supported-models';
6
+ import { updateModel } from '@/app/actions/update-model';
7
+ import { Button } from '@/components/ui/button';
8
+ import {
9
+ Command,
10
+ CommandEmpty,
11
+ CommandGroup,
12
+ CommandInput,
13
+ CommandItem,
14
+ CommandList,
15
+ } from '@/components/ui/command';
16
+ import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
17
+ import { cn } from '@/lib/utils';
18
+
19
+ export interface ModelPickerProps {
20
+ /** Current model identifier shown as the initial selection */
21
+ initialModel: string;
22
+ /** Optional callback notified when the model is successfully persisted */
23
+ onModelChange?: (model: string) => void;
24
+ disabled?: boolean;
25
+ className?: string;
26
+ }
27
+
28
+ /**
29
+ * ModelPicker
30
+ *
31
+ * A combobox that lets the user choose the default LLM model. On mount it
32
+ * calls the `getSupportedModels` server action to populate suggestions for
33
+ * the currently configured agent; the user may also type any free-text model
34
+ * identifier. On selection the new value is persisted via `updateModel`.
35
+ */
36
+ export function ModelPicker({
37
+ initialModel,
38
+ onModelChange,
39
+ disabled,
40
+ className,
41
+ }: ModelPickerProps) {
42
+ const [open, setOpen] = React.useState(false);
43
+ const [models, setModels] = React.useState<string[]>([]);
44
+ const [loading, setLoading] = React.useState(true);
45
+ const [saving, setSaving] = React.useState(false);
46
+ const [value, setValue] = React.useState(initialModel);
47
+ const [inputValue, setInputValue] = React.useState(initialModel);
48
+ const [error, setError] = React.useState<string | null>(null);
49
+
50
+ // Load advertised models on mount
51
+ React.useEffect(() => {
52
+ getSupportedModels()
53
+ .then(setModels)
54
+ .finally(() => setLoading(false));
55
+ }, []);
56
+
57
+ // Keep local state in sync when initialModel prop changes
58
+ React.useEffect(() => {
59
+ setValue(initialModel);
60
+ setInputValue(initialModel);
61
+ }, [initialModel]);
62
+
63
+ const filteredModels = models.filter((m) => m.toLowerCase().includes(inputValue.toLowerCase()));
64
+
65
+ const handleSelect = async (model: string) => {
66
+ setOpen(false);
67
+ await persist(model);
68
+ };
69
+
70
+ const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
71
+ setInputValue(e.target.value);
72
+ if (!open) setOpen(true);
73
+ };
74
+
75
+ const handleInputKeyDown = async (e: React.KeyboardEvent<HTMLInputElement>) => {
76
+ if (e.key === 'Enter') {
77
+ e.preventDefault();
78
+ setOpen(false);
79
+ await persist(inputValue);
80
+ }
81
+ if (e.key === 'Escape') {
82
+ setOpen(false);
83
+ // Revert input to last saved value
84
+ setInputValue(value);
85
+ }
86
+ };
87
+
88
+ const persist = async (model: string) => {
89
+ if (!model.trim() || model === value) return;
90
+ setSaving(true);
91
+ setError(null);
92
+ try {
93
+ const result = await updateModel(model);
94
+ if (result.ok) {
95
+ setValue(model);
96
+ onModelChange?.(model);
97
+ } else {
98
+ setError(result.error ?? 'Failed to save model');
99
+ setInputValue(value); // revert
100
+ }
101
+ } finally {
102
+ setSaving(false);
103
+ }
104
+ };
105
+
106
+ const isDisabled = (disabled ?? false) || loading || saving;
107
+
108
+ return (
109
+ <div className={cn('flex flex-col gap-1', className)}>
110
+ <Popover open={open} onOpenChange={setOpen}>
111
+ <PopoverTrigger asChild>
112
+ <Button
113
+ variant="outline"
114
+ role="combobox"
115
+ aria-expanded={open}
116
+ disabled={isDisabled}
117
+ className="w-full justify-between font-normal"
118
+ >
119
+ <span className="truncate">
120
+ {loading ? 'Loading models…' : saving ? 'Saving…' : (value ?? 'Select model…')}
121
+ </span>
122
+ <ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
123
+ </Button>
124
+ </PopoverTrigger>
125
+ <PopoverContent className="w-[var(--radix-popover-trigger-width)] p-0" align="start">
126
+ <Command>
127
+ <CommandInput
128
+ placeholder="Search or type a model ID…"
129
+ value={inputValue}
130
+ onChange={handleInputChange}
131
+ onKeyDown={handleInputKeyDown}
132
+ />
133
+ <CommandList>
134
+ {!loading && filteredModels.length === 0 && (
135
+ <CommandEmpty>
136
+ {models.length === 0
137
+ ? 'No models advertised for this agent.'
138
+ : 'No match — press Enter to use this value.'}
139
+ </CommandEmpty>
140
+ )}
141
+ {filteredModels.length > 0 && (
142
+ <CommandGroup>
143
+ {filteredModels.map((model) => (
144
+ <CommandItem
145
+ key={model}
146
+ selected={model === value}
147
+ onClick={() => handleSelect(model)}
148
+ >
149
+ <Check
150
+ className={cn(
151
+ 'mr-2 h-4 w-4',
152
+ model === value ? 'opacity-100' : 'opacity-0'
153
+ )}
154
+ />
155
+ {model}
156
+ </CommandItem>
157
+ ))}
158
+ </CommandGroup>
159
+ )}
160
+ </CommandList>
161
+ </Command>
162
+ </PopoverContent>
163
+ </Popover>
164
+ {Boolean(error) && <p className="text-destructive text-sm">{error}</p>}
165
+ </div>
166
+ );
167
+ }
@@ -15,24 +15,15 @@ import {
15
15
  SelectValue,
16
16
  } from '@/components/ui/select';
17
17
  import { updateSettingsAction } from '@/app/actions/update-settings';
18
- import { AgentType, AgentAuthMethod, EditorType } from '@shepai/core/domain/generated/output';
19
- import { getAgentTypeIcon } from '@/components/common/feature-node/agent-type-icons';
18
+ import { type AgentType, AgentAuthMethod, EditorType } from '@shepai/core/domain/generated/output';
20
19
  import { getEditorTypeIcon } from '@/components/common/editor-type-icons';
20
+ import { AgentModelPicker } from '@/components/features/settings/AgentModelPicker';
21
21
  import type {
22
22
  Settings,
23
23
  FeatureFlags,
24
24
  NotificationPreferences,
25
25
  } from '@shepai/core/domain/generated/output';
26
26
 
27
- const AGENT_TYPE_OPTIONS = [
28
- { value: AgentType.ClaudeCode, label: 'Claude Code' },
29
- { value: AgentType.Cursor, label: 'Cursor' },
30
- { value: AgentType.GeminiCli, label: 'Gemini CLI' },
31
- { value: AgentType.Aider, label: 'Aider' },
32
- { value: AgentType.Continue, label: 'Continue' },
33
- { value: AgentType.Dev, label: 'Dev' },
34
- ];
35
-
36
27
  const AUTH_METHOD_OPTIONS = [
37
28
  { value: AgentAuthMethod.Session, label: 'Session' },
38
29
  { value: AgentAuthMethod.Token, label: 'Token' },
@@ -92,7 +83,7 @@ function SettingsRow({
92
83
  }) {
93
84
  return (
94
85
  <div className="flex items-center justify-between gap-4 border-b py-3 last:border-b-0">
95
- <Label htmlFor={htmlFor} className="text-sm font-normal whitespace-nowrap">
86
+ <Label htmlFor={htmlFor} className="cursor-pointer text-sm font-normal whitespace-nowrap">
96
87
  {label}
97
88
  </Label>
98
89
  <div className="flex items-center gap-2">{children}</div>
@@ -118,7 +109,7 @@ function SelectRow({
118
109
  return (
119
110
  <SettingsRow label={label} htmlFor={id}>
120
111
  <Select value={value} onValueChange={onChange}>
121
- <SelectTrigger id={id} data-testid={testId} className="w-45">
112
+ <SelectTrigger id={id} data-testid={testId} className="w-45 cursor-pointer">
122
113
  <SelectValue />
123
114
  </SelectTrigger>
124
115
  <SelectContent>
@@ -148,7 +139,13 @@ function SwitchRow({
148
139
  }) {
149
140
  return (
150
141
  <SettingsRow label={label} htmlFor={id}>
151
- <Switch id={id} data-testid={testId} checked={checked} onCheckedChange={onChange} />
142
+ <Switch
143
+ id={id}
144
+ data-testid={testId}
145
+ checked={checked}
146
+ onCheckedChange={onChange}
147
+ className="cursor-pointer"
148
+ />
152
149
  </SettingsRow>
153
150
  );
154
151
  }
@@ -274,7 +271,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }: SettingsP
274
271
  return (
275
272
  <div data-testid="settings-page-client" className="max-w-lg">
276
273
  <div className="flex items-center justify-between border-b pb-3">
277
- <h1 className="text-lg font-semibold tracking-tight">Settings</h1>
274
+ <h1 className="text-sm font-bold tracking-tight">Settings</h1>
278
275
  {isPending ? <span className="text-muted-foreground text-xs">Saving...</span> : null}
279
276
  {showSaved && !isPending ? (
280
277
  <span className="flex items-center gap-1 text-xs text-green-600">
@@ -291,31 +288,14 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }: SettingsP
291
288
  >
292
289
  Agent
293
290
  </h2>
294
- <SettingsRow label="Agent" htmlFor="agent-type">
295
- <Select
296
- value={agentType}
297
- onValueChange={(v) => {
298
- setAgentType(v as AgentType);
299
- save(buildAgentPayload({ type: v as AgentType }));
300
- }}
301
- >
302
- <SelectTrigger id="agent-type" data-testid="agent-type-select" className="w-45">
303
- <SelectValue />
304
- </SelectTrigger>
305
- <SelectContent>
306
- {AGENT_TYPE_OPTIONS.map((opt) => {
307
- const Icon = getAgentTypeIcon(opt.value);
308
- return (
309
- <SelectItem key={opt.value} value={opt.value}>
310
- <span className="flex items-center gap-2">
311
- <Icon className="h-4 w-4 shrink-0" />
312
- {opt.label}
313
- </span>
314
- </SelectItem>
315
- );
316
- })}
317
- </SelectContent>
318
- </Select>
291
+ <SettingsRow label="Agent & Model" htmlFor="agent-model-picker">
292
+ <AgentModelPicker
293
+ initialAgentType={agentType}
294
+ initialModel={settings.models.default}
295
+ mode="settings"
296
+ onAgentModelChange={(newAgent) => setAgentType(newAgent as AgentType)}
297
+ className="w-45"
298
+ />
319
299
  </SettingsRow>
320
300
  <SelectRow
321
301
  label="Authentication"
@@ -374,7 +354,11 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }: SettingsP
374
354
  save({ environment: { defaultEditor: v as EditorType, shellPreference: shell } });
375
355
  }}
376
356
  >
377
- <SelectTrigger id="default-editor" data-testid="editor-select" className="w-45">
357
+ <SelectTrigger
358
+ id="default-editor"
359
+ data-testid="editor-select"
360
+ className="w-45 cursor-pointer"
361
+ >
378
362
  <SelectValue />
379
363
  </SelectTrigger>
380
364
  <SelectContent>
@@ -39,27 +39,52 @@ export default meta;
39
39
  type Story = StoryObj<typeof meta>;
40
40
 
41
41
  const mockFeatures = [
42
- { featureId: 'feat-auth-001', name: 'Auth Module', status: 'action-needed' as const },
43
- { featureId: 'feat-payment-002', name: 'Payment Flow', status: 'action-needed' as const },
42
+ {
43
+ featureId: 'feat-auth-001',
44
+ name: 'Auth Module',
45
+ status: 'action-needed' as const,
46
+ agentType: 'claude-code',
47
+ modelId: 'claude-sonnet-4-6',
48
+ },
49
+ {
50
+ featureId: 'feat-payment-002',
51
+ name: 'Payment Flow',
52
+ status: 'action-needed' as const,
53
+ agentType: 'cursor',
54
+ modelId: 'claude-opus-4-6',
55
+ },
44
56
  {
45
57
  featureId: 'feat-dashboard-003',
46
58
  name: 'Dashboard',
47
59
  status: 'in-progress' as const,
48
60
  startedAt: Date.now() - 330_000,
61
+ agentType: 'gemini-cli',
62
+ modelId: 'gemini-2.5-pro',
49
63
  },
50
64
  {
51
65
  featureId: 'feat-api-004',
52
66
  name: 'API Gateway',
53
67
  status: 'in-progress' as const,
54
68
  startedAt: Date.now() - 60_000,
69
+ agentType: 'claude-code',
70
+ modelId: 'claude-haiku-4-5',
55
71
  },
56
72
  {
57
73
  featureId: 'feat-settings-005',
58
74
  name: 'Settings Page',
59
75
  status: 'done' as const,
60
76
  duration: '2h',
77
+ agentType: 'claude-code',
78
+ modelId: 'claude-sonnet-4-6',
79
+ },
80
+ {
81
+ featureId: 'feat-profile-006',
82
+ name: 'User Profile',
83
+ status: 'done' as const,
84
+ duration: '1h',
85
+ agentType: 'dev',
86
+ modelId: 'gpt-8',
61
87
  },
62
- { featureId: 'feat-profile-006', name: 'User Profile', status: 'done' as const, duration: '1h' },
63
88
  ];
64
89
 
65
90
  export const Default: Story = {
@@ -31,6 +31,8 @@ export interface FeatureItem {
31
31
  status: FeatureStatus;
32
32
  startedAt?: number;
33
33
  duration?: string;
34
+ agentType?: string;
35
+ modelId?: string;
34
36
  }
35
37
 
36
38
  export interface AppSidebarProps {
@@ -125,6 +127,8 @@ export function AppSidebar({
125
127
  status={feature.status}
126
128
  startedAt={feature.startedAt}
127
129
  duration={feature.duration}
130
+ agentType={feature.agentType}
131
+ modelId={feature.modelId}
128
132
  onClick={
129
133
  onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined
130
134
  }
@@ -21,7 +21,7 @@ function CheckboxGroupItem({
21
21
  disabled,
22
22
  }: CheckboxGroupItemProps) {
23
23
  return (
24
- <div className="flex items-start gap-2">
24
+ <div className="flex cursor-pointer items-start gap-2">
25
25
  <Checkbox
26
26
  id={id}
27
27
  className="mt-0.75"
@@ -55,7 +55,7 @@ function CheckboxGroup({
55
55
  return (
56
56
  <div className="flex flex-col gap-3">
57
57
  {/* Parent checkbox */}
58
- <div className="flex items-start gap-2">
58
+ <div className="flex cursor-pointer items-start gap-2">
59
59
  <Checkbox
60
60
  id={parentId}
61
61
  className="mt-0.75"
@@ -0,0 +1,114 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { Search } from 'lucide-react';
5
+
6
+ import { cn } from '@/lib/utils';
7
+
8
+ /**
9
+ * Command — minimal combobox primitives for model/item selection.
10
+ *
11
+ * Intentionally avoids the `cmdk` dependency and builds on native React +
12
+ * Tailwind instead. Filtering logic lives in the consumer component.
13
+ */
14
+
15
+ const Command = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
16
+ ({ className, ...props }, ref) => (
17
+ <div
18
+ ref={ref}
19
+ className={cn(
20
+ 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',
21
+ className
22
+ )}
23
+ {...props}
24
+ />
25
+ )
26
+ );
27
+ Command.displayName = 'Command';
28
+
29
+ const CommandInput = React.forwardRef<
30
+ HTMLInputElement,
31
+ React.InputHTMLAttributes<HTMLInputElement>
32
+ >(({ className, ...props }, ref) => (
33
+ <div className="flex items-center border-b px-3">
34
+ <Search className="mr-2 h-4 w-4 shrink-0 opacity-50" />
35
+ <input
36
+ ref={ref}
37
+ className={cn(
38
+ 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',
39
+ className
40
+ )}
41
+ {...props}
42
+ />
43
+ </div>
44
+ ));
45
+ CommandInput.displayName = 'CommandInput';
46
+
47
+ const CommandList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
48
+ ({ className, ...props }, ref) => (
49
+ <div
50
+ ref={ref}
51
+ className={cn('max-h-[300px] overflow-x-hidden overflow-y-auto', className)}
52
+ {...props}
53
+ />
54
+ )
55
+ );
56
+ CommandList.displayName = 'CommandList';
57
+
58
+ const CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
59
+ ({ className, ...props }, ref) => (
60
+ <div
61
+ ref={ref}
62
+ className={cn('text-muted-foreground py-6 text-center text-sm', className)}
63
+ {...props}
64
+ />
65
+ )
66
+ );
67
+ CommandEmpty.displayName = 'CommandEmpty';
68
+
69
+ const CommandGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
70
+ ({ className, ...props }, ref) => (
71
+ <div ref={ref} className={cn('text-foreground overflow-hidden p-1', className)} {...props} />
72
+ )
73
+ );
74
+ CommandGroup.displayName = 'CommandGroup';
75
+
76
+ interface CommandItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
77
+ selected?: boolean;
78
+ }
79
+
80
+ const CommandItem = React.forwardRef<HTMLButtonElement, CommandItemProps>(
81
+ ({ className, selected, ...props }, ref) => (
82
+ <button
83
+ ref={ref}
84
+ type="button"
85
+ data-selected={selected}
86
+ className={cn(
87
+ 'relative flex w-full cursor-default items-center rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none',
88
+ 'hover:bg-accent hover:text-accent-foreground',
89
+ 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',
90
+ 'disabled:pointer-events-none disabled:opacity-50',
91
+ className
92
+ )}
93
+ {...props}
94
+ />
95
+ )
96
+ );
97
+ CommandItem.displayName = 'CommandItem';
98
+
99
+ const CommandSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
100
+ ({ className, ...props }, ref) => (
101
+ <div ref={ref} className={cn('bg-border -mx-1 h-px', className)} {...props} />
102
+ )
103
+ );
104
+ CommandSeparator.displayName = 'CommandSeparator';
105
+
106
+ export {
107
+ Command,
108
+ CommandEmpty,
109
+ CommandGroup,
110
+ CommandInput,
111
+ CommandItem,
112
+ CommandList,
113
+ CommandSeparator,
114
+ };
@@ -17,7 +17,7 @@ function Switch({
17
17
  data-slot="switch"
18
18
  data-size={size}
19
19
  className={cn(
20
- 'peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6',
20
+ 'peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6',
21
21
  className
22
22
  )}
23
23
  {...props}
@@ -12,6 +12,8 @@ export interface SidebarFeatureItem {
12
12
  featureId: string;
13
13
  startedAt?: number;
14
14
  duration?: string;
15
+ agentType?: string;
16
+ modelId?: string;
15
17
  }
16
18
 
17
19
  // ---------------------------------------------------------------------------
@@ -0,0 +1,51 @@
1
+ export interface ModelMeta {
2
+ displayName: string;
3
+ description: string;
4
+ }
5
+
6
+ /**
7
+ * Presentation-layer metadata for known LLM model identifiers.
8
+ * Maps raw model IDs to human-friendly display names and short descriptions.
9
+ */
10
+ const MODEL_METADATA: Record<string, ModelMeta> = {
11
+ // Claude models
12
+ 'claude-opus-4-6': { displayName: 'Opus 4.6', description: 'Most capable, complex tasks' },
13
+ 'claude-sonnet-4-6': { displayName: 'Sonnet 4.6', description: 'Fast & balanced' },
14
+ 'claude-haiku-4-5': { displayName: 'Haiku 4.5', description: 'Lightweight & quick' },
15
+
16
+ // Gemini models
17
+ 'gemini-3.1-pro': { displayName: 'Gemini 3.1 Pro', description: 'Advanced reasoning' },
18
+ 'gemini-3-flash': { displayName: 'Gemini 3 Flash', description: 'Ultra-fast responses' },
19
+ 'gemini-2.5-pro': { displayName: 'Gemini 2.5 Pro', description: 'Reliable workhorse' },
20
+ 'gemini-2.5-flash': { displayName: 'Gemini 2.5 Flash', description: 'Speed-optimized' },
21
+
22
+ // OpenAI models
23
+ 'gpt-5.4': { displayName: 'GPT-5.4', description: 'Latest reasoning model' },
24
+ 'gpt-5': { displayName: 'GPT-5', description: 'Flagship model' },
25
+ 'gpt-5.3-codex': { displayName: 'GPT-5.3 Codex', description: 'Code specialist' },
26
+
27
+ // Other
28
+ 'composer-1.5': { displayName: 'Composer 1.5', description: 'Multi-file editing' },
29
+ 'grok-code': { displayName: 'Grok Code', description: 'xAI code model' },
30
+
31
+ // Demo / fun models
32
+ 'gpt-8': { displayName: 'GPT-8', description: 'Writes code before you think it' },
33
+ 'opus-7': { displayName: 'Opus 7', description: 'Achieved consciousness, ships on time' },
34
+ };
35
+
36
+ const FALLBACK: ModelMeta = { displayName: '', description: '' };
37
+
38
+ export function getModelMeta(modelId: string): ModelMeta {
39
+ const meta = MODEL_METADATA[modelId];
40
+ if (meta) return meta;
41
+ // Fallback: prettify the raw ID
42
+ return {
43
+ ...FALLBACK,
44
+ displayName: modelId
45
+ .replace(/^claude-/, '')
46
+ .replace(/^gemini-/, 'Gemini ')
47
+ .replace(/^gpt-/, 'GPT-')
48
+ .replace(/-/g, ' ')
49
+ .replace(/\b\w/g, (c) => c.toUpperCase()),
50
+ };
51
+ }
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,24270,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},98127,e=>{"use strict";var t=e.i(20314),r=e.i(31777);function n({className:e,type:n,...o}){return(0,t.jsx)("input",{type:n,"data-slot":"input",className:(0,r.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...o})}e.s(["Input",()=>n])},80764,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return o}});let n=e.r(79054);function o(e,t){let r=(0,n.useRef)(null),o=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=o.current;t&&(o.current=null,t())}else e&&(r.current=i(e,n)),t&&(o.current=i(t,n))},[e,t])}function i(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},66033,e=>{"use strict";var t=e.i(79054);e.i(20314);var r=t.createContext(void 0);function n(e){let n=t.useContext(r);return e||n||"ltr"}e.s(["useDirection",()=>n])},27069,e=>{"use strict";function t(e,[t,r]){return Math.min(r,Math.max(t,e))}e.s(["clamp",()=>t])},12103,e=>{"use strict";let t=(0,e.i(3645).default)("puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]);e.s(["Puzzle",()=>t],12103)},81975,e=>{"use strict";let t=(0,e.i(3645).default)("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]);e.s(["Wrench",()=>t],81975)},80986,e=>{"use strict";let t=(0,e.i(3645).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["default",()=>t])},3214,10942,e=>{"use strict";var t=e.i(91891);e.s(["Plus",()=>t.default],3214);var r=e.i(80986);e.s(["CircleCheck",()=>r.default],10942)},39443,e=>{"use strict";var t=e.i(20314),r=e.i(79054);let n=(0,e.i(18354).createLogger)("[SSE]");function o(e,t,r,n){if("u"<typeof EventSource)return()=>{};let o=null,i=!1,u=1e3,a=null,l=null;return!function s(){i||(o=new EventSource(e?`/api/agent-events?runId=${encodeURIComponent(e)}`:"/api/agent-events"),n("connecting"),o.onopen=()=>{n("connected"),l=setTimeout(()=>{l=null,u=1e3},5e3)},o.onerror=()=>{o?.close(),o=null,n("disconnected"),null!==l&&(clearTimeout(l),l=null);let e=u;u=Math.min(2*e,3e4),a=setTimeout(()=>{a=null,s()},e)},o.addEventListener("notification",e=>{let n=JSON.parse(e.data);t(e=>{let t=[...e,n];return t.length>500?t.slice(-250):t}),r(n)}))}(),()=>{i=!0,null!==a&&(clearTimeout(a),a=null),null!==l&&(clearTimeout(l),l=null),o&&(o.close(),o=null)}}let i=(0,r.createContext)(null);function u({children:e,runId:u}){let{events:a,lastEvent:l,connectionStatus:s}=function(e){let[t,i]=(0,r.useState)([]),[u,a]=(0,r.useState)(null),[l,s]=(0,r.useState)("disconnected"),c=e?.runId,f=(0,r.useRef)(null),d=(0,r.useCallback)(e=>{let t=e.data;if(t&&"object"==typeof t)if("notification"===t.type){let e=t.data;n.debug("event received:",e.eventType,e),i(t=>{let r=[...t,e];return r.length>500?r.slice(-250):r}),a(e)}else"status"===t.type&&s(t.status)},[]);return(0,r.useEffect)(()=>{let e="u">typeof location&&new URLSearchParams(location.search).has("sse");if(!navigator.serviceWorker||e)return o(c,i,a,s);let t=!1,r={current:void 0};function n(e){t||(f.current=e,e.postMessage({type:"subscribe",runId:c}),s("connecting"))}function u(){if(t)return;let e=navigator.serviceWorker.controller;e&&(f.current=e,e.postMessage({type:"subscribe",runId:c}),s("connecting"))}return navigator.serviceWorker.addEventListener("message",d),navigator.serviceWorker.addEventListener("controllerchange",u),navigator.serviceWorker.register("/agent-events-sw.js",{scope:"/"}).then(e=>{if(t)return;let u=e.active??e.installing??e.waiting;if(!u){r.current=o(c,i,a,s);return}if("activated"===u.state)n(u);else{let e=()=>{"activated"===u.state&&(u.removeEventListener("statechange",e),n(u))};u.addEventListener("statechange",e)}}).catch(()=>{t||(r.current=o(c,i,a,s))}),()=>{t=!0,navigator.serviceWorker.removeEventListener("message",d),navigator.serviceWorker.removeEventListener("controllerchange",u),f.current?.postMessage({type:"unsubscribe"}),f.current=null,r.current?.()}},[c,d]),{events:t,lastEvent:u,connectionStatus:l}}({runId:u}),c=(0,r.useMemo)(()=>({events:a,lastEvent:l,connectionStatus:s}),[a,l,s]);return(0,t.jsx)(i.Provider,{value:c,children:e})}function a(){let e=(0,r.useContext)(i);if(!e)throw Error("useAgentEventsContext must be used within an <AgentEventsProvider>");return e}e.s(["AgentEventsProvider",()=>u,"useAgentEventsContext",()=>a],39443)},78521,e=>{"use strict";var t=e.i(21023);let r=(0,t.createServerReference)("0053050432bf3adf8386858f35957abb7c5bf15fd2",t.callServer,void 0,t.findSourceMapURL,"pickFolder");async function n(){let e=await r();if(e.error)throw Error(e.error);return e.path}e.s(["pickFolder",()=>n],78521)},5147,e=>{"use strict";var t=e.i(20314),r=e.i(79054);let n={"action-required":"action-needed",running:"in-progress",done:"done",blocked:"in-progress",error:"in-progress",creating:null};function o(e){return n[e]}let i=(0,r.createContext)(null);function u({children:e}){let[n,o]=(0,r.useState)([]),u=(0,r.useMemo)(()=>({features:n,setFeatures:o}),[n]);return(0,t.jsx)(i.Provider,{value:u,children:e})}function a(){let e=(0,r.useContext)(i);if(!e)throw Error("useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>");return e}e.s(["SidebarFeaturesProvider",()=>u,"mapNodeStateToSidebarStatus",()=>o,"useSidebarFeaturesContext",()=>a])},76314,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return l},searchParamsToUrlQuery:function(){return i},urlQueryToSearchParams:function(){return a}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});function i(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function u(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function a(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,u(e));else t.set(r,u(n));return t}function l(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},95889,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return a},formatWithValidation:function(){return s},urlObjectKeys:function(){return l}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(44066)._(e.r(76314)),u=/https?|ftp|gopher|file/;function a(e){let{auth:t,hostname:r}=e,n=e.protocol||"",o=e.pathname||"",a=e.hash||"",l=e.query||"",s=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?s=t+e.host:r&&(s=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(s+=":"+e.port)),l&&"object"==typeof l&&(l=String(i.urlQueryToSearchParams(l)));let c=e.search||l&&`?${l}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||u.test(n))&&!1!==s?(s="//"+(s||""),o&&"/"!==o[0]&&(o="/"+o)):s||(s=""),a&&"#"!==a[0]&&(a="#"+a),c&&"?"!==c[0]&&(c="?"+c),o=o.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${s}${o}${c}${a}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function s(e){return a(e)}},58464,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return E},MissingStaticPage:function(){return P},NormalizeError:function(){return b},PageNotFoundError:function(){return m},SP:function(){return h},ST:function(){return v},WEB_VITALS:function(){return i},execOnce:function(){return u},getDisplayName:function(){return f},getLocationOrigin:function(){return s},getURL:function(){return c},isAbsoluteUrl:function(){return l},isResSent:function(){return d},loadGetInitialProps:function(){return g},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return S}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=["CLS","FCP","FID","INP","LCP","TTFB"];function u(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let a=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>a.test(e);function s(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=s();return e.substring(t.length)}function f(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function d(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function g(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await g(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&d(r))return n;if(!n)throw Object.defineProperty(Error(`"${f(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n}let h="u">typeof performance,v=h&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class b extends Error{}class m extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class P extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class E extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function S(e){return JSON.stringify({message:e.message,stack:e.stack})}},51380,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return i}});let n=e.r(58464),o=e.r(53626);function i(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,o.hasBasePath)(r.pathname)}catch(e){return!1}}},38670,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},24035,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return y},useLinkStatus:function(){return m}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(44066),u=e.r(20314),a=i._(e.r(79054)),l=e.r(95889),s=e.r(18152),c=e.r(80764),f=e.r(58464),d=e.r(99267);e.r(24270);let p=e.r(59624),g=e.r(51380),h=e.r(95555);function v(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}function y(t){var r;let n,o,i,[l,y]=(0,a.useOptimistic)(p.IDLE_LINK_STATUS),m=(0,a.useRef)(null),{href:P,as:E,children:S,prefetch:x=null,passHref:C,replace:O,shallow:_,scroll:j,onClick:w,onMouseEnter:T,onTouchStart:k,legacyBehavior:L=!1,onNavigate:M,ref:R,unstable_dynamicOnHover:N,...A}=t;n=S,L&&("string"==typeof n||"number"==typeof n)&&(n=(0,u.jsx)("a",{children:n}));let U=a.default.useContext(s.AppRouterContext),I=!1!==x,$=!1!==x?null===(r=x)||"auto"===r?h.FetchStrategy.PPR:h.FetchStrategy.Full:h.FetchStrategy.PPR,{href:F,as:z}=a.default.useMemo(()=>{let e=v(P);return{href:e,as:E?v(E):e}},[P,E]);if(L){if(n?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});o=a.default.Children.only(n)}let D=L?o&&"object"==typeof o&&o.ref:R,W=a.default.useCallback(e=>(null!==U&&(m.current=(0,p.mountLinkInstance)(e,F,U,$,I,y)),()=>{m.current&&((0,p.unmountLinkForCurrentNavigation)(m.current),m.current=null),(0,p.unmountPrefetchableInstance)(e)}),[I,F,U,$,y]),B={ref:(0,c.useMergedRef)(W,D),onClick(t){L||"function"!=typeof w||w(t),L&&o.props&&"function"==typeof o.props.onClick&&o.props.onClick(t),!U||t.defaultPrevented||function(t,r,n,o,i,u,l){if("u">typeof window){let s,{nodeName:c}=t.currentTarget;if("A"===c.toUpperCase()&&((s=t.currentTarget.getAttribute("target"))&&"_self"!==s||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,g.isLocalURL)(r)){i&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=e.r(81574);a.default.startTransition(()=>{f(n||r,i?"replace":"push",u??!0,o.current)})}}(t,F,z,m,O,j,M)},onMouseEnter(e){L||"function"!=typeof T||T(e),L&&o.props&&"function"==typeof o.props.onMouseEnter&&o.props.onMouseEnter(e),U&&I&&(0,p.onNavigationIntent)(e.currentTarget,!0===N)},onTouchStart:function(e){L||"function"!=typeof k||k(e),L&&o.props&&"function"==typeof o.props.onTouchStart&&o.props.onTouchStart(e),U&&I&&(0,p.onNavigationIntent)(e.currentTarget,!0===N)}};return(0,f.isAbsoluteUrl)(z)?B.href=z:L&&!C&&("a"!==o.type||"href"in o.props)||(B.href=(0,d.addBasePath)(z)),i=L?a.default.cloneElement(o,B):(0,u.jsx)("a",{...A,...B,children:n}),(0,u.jsx)(b.Provider,{value:l,children:i})}e.r(38670);let b=(0,a.createContext)(p.IDLE_LINK_STATUS),m=()=>(0,a.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)}]);