@shepai/cli 1.77.2-pr240.88b3534 → 1.77.2-pr243.1fc63c3
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.
- package/apis/json-schema/AgentRun.yaml +3 -0
- package/apis/json-schema/ModelConfiguration.yaml +5 -20
- package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts +8 -0
- package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +1 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +9 -2
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +4 -0
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts +3 -3
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +5 -8
- package/dist/packages/core/src/domain/generated/output.d.ts +7 -15
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.js +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +8 -10
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +22 -3
- package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.js +2 -2
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +8 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +37 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.js +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +5 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +17 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +35 -8
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/log-context.d.ts +17 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/log-context.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/log-context.js +21 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +4 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +4 -0
- package/dist/packages/core/src/infrastructure/services/settings.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/settings.service.js +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +2 -0
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.js +13 -0
- package/dist/src/presentation/cli/commands/settings/index.d.ts +1 -0
- package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/settings/index.js +4 -1
- package/dist/src/presentation/cli/commands/settings/model.command.d.ts +17 -0
- package/dist/src/presentation/cli/commands/settings/model.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/settings/model.command.js +62 -0
- package/dist/src/presentation/cli/ui/tables.d.ts.map +1 -1
- package/dist/src/presentation/cli/ui/tables.js +6 -23
- package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.js +3 -1
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +4 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +5 -1
- package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts +12 -0
- package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-all-agent-models.js +49 -0
- package/dist/src/presentation/web/app/actions/get-supported-models.d.ts +11 -0
- package/dist/src/presentation/web/app/actions/get-supported-models.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-supported-models.js +24 -0
- package/dist/src/presentation/web/app/actions/update-agent-and-model.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/update-agent-and-model.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/update-agent-and-model.js +28 -0
- package/dist/src/presentation/web/app/actions/update-model.d.ts +15 -0
- package/dist/src/presentation/web/app/actions/update-model.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/update-model.js +35 -0
- package/dist/src/presentation/web/app/api/agent-events/route.js +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.js +1 -0
- package/dist/src/presentation/web/app/build-graph-nodes.js +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts +3 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +2 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +2 -4
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +9 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +29 -4
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +5 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +32 -3
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +0 -2
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts +3 -1
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.js +6 -2
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +15 -0
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +11 -2
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +2 -3
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +0 -4
- package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +14 -15
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +0 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +19 -23
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +59 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts +11 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +103 -0
- package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts +24 -0
- package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.js +53 -0
- package/dist/src/presentation/web/components/features/settings/ModelPicker/index.d.ts +18 -0
- package/dist/src/presentation/web/components/features/settings/ModelPicker/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/ModelPicker/index.js +84 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +7 -21
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +2 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +28 -3
- package/dist/src/presentation/web/components/ui/checkbox-group-item.js +1 -1
- package/dist/src/presentation/web/components/ui/checkbox-group.js +1 -1
- package/dist/src/presentation/web/components/ui/command.d.ts +19 -0
- package/dist/src/presentation/web/components/ui/command.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/command.js +26 -0
- package/dist/src/presentation/web/components/ui/switch.js +1 -1
- package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts +2 -0
- package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/model-metadata.d.ts +6 -0
- package/dist/src/presentation/web/lib/model-metadata.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/model-metadata.js +41 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +4 -4
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +62 -32
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +62 -32
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/build-manifest.json +2 -2
- package/web/.next/server/app/settings/page/server-reference-manifest.json +36 -6
- package/web/.next/server/app/settings/page.js +2 -2
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/build-manifest.json +2 -2
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +2 -2
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +2 -2
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_c7cfe351._.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_c7cfe351._.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bff2deea._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bff2deea._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d076a90b._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d076a90b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_04968d9f._.js +3 -0
- package/web/.next/server/chunks/ssr/_04968d9f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0bd0fafb._.js +9 -0
- package/web/.next/server/chunks/ssr/_0bd0fafb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_14fa79b2._.js +3 -0
- package/web/.next/server/chunks/ssr/_14fa79b2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_16235e5e._.js +1 -1
- package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
- package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6e08ce21._.js +1 -1
- package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
- package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_6645f218._.js → _8dacd1e7._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_6645f218._.js.map → _8dacd1e7._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_9ac70f88._.js +5 -0
- package/web/.next/server/chunks/ssr/_9ac70f88._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
- package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_88c4dab8._.js → _b5fc318a._.js} +2 -2
- package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ba1ec9b2._.js +3 -0
- package/web/.next/server/chunks/ssr/_ba1ec9b2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_d4b20e29._.js +1 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_2557e3df._.js → _e3da8cc8._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_2557e3df._.js.map → _e3da8cc8._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_ed356507._.js +3 -0
- package/web/.next/server/chunks/ssr/{_5428b384._.js.map → _ed356507._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1fcecd3a._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1fcecd3a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +6 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +6 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +2 -2
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +117 -59
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +62 -32
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +62 -32
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/server-reference-manifest.json +36 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
- 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
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_c7cfe351._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__bff2deea._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d076a90b._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_04968d9f._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0bd0fafb._.js +9 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_14fa79b2._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_16235e5e._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6e08ce21._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_6645f218._.js → _8dacd1e7._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9ac70f88._.js +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_88c4dab8._.js → _b5fc318a._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_ba1ec9b2._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_d4b20e29._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_2557e3df._.js → _e3da8cc8._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_ed356507._.js +3 -0
- 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
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_1fcecd3a._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
- 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
- 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
- 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
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +117 -59
- package/web/.next/standalone/src/presentation/web/app/(dashboard)/@drawer/create/page.tsx +4 -0
- package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +20 -2
- package/web/.next/standalone/src/presentation/web/app/actions/get-all-agent-models.ts +65 -0
- package/web/.next/standalone/src/presentation/web/app/actions/get-supported-models.ts +26 -0
- package/web/.next/standalone/src/presentation/web/app/actions/update-agent-and-model.ts +41 -0
- package/web/.next/standalone/src/presentation/web/app/actions/update-model.ts +45 -0
- package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +1 -1
- package/web/.next/standalone/src/presentation/web/app/build-feature-node-data.ts +1 -0
- package/web/.next/standalone/src/presentation/web/app/build-graph-nodes.ts +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +6 -0
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +2 -10
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +56 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +238 -118
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +0 -2
- package/web/.next/standalone/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.tsx +16 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-list-item/feature-list-item.tsx +33 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/agent-type-icons.tsx +54 -2
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +2 -3
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +2 -6
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.stories.tsx +19 -24
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.tsx +43 -24
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +4 -0
- package/web/.next/standalone/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.tsx +72 -0
- package/web/.next/standalone/src/presentation/web/components/features/settings/AgentModelPicker/index.tsx +228 -0
- package/web/.next/standalone/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.tsx +64 -0
- package/web/.next/standalone/src/presentation/web/components/features/settings/ModelPicker/index.tsx +167 -0
- package/web/.next/standalone/src/presentation/web/components/features/settings/settings-page-client.tsx +25 -41
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx +28 -3
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +4 -0
- package/web/.next/standalone/src/presentation/web/components/ui/checkbox-group-item.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/ui/checkbox-group.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/ui/command.tsx +114 -0
- package/web/.next/standalone/src/presentation/web/components/ui/switch.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/hooks/sidebar-features-context.tsx +2 -0
- package/web/.next/standalone/src/presentation/web/lib/model-metadata.ts +51 -0
- package/web/.next/static/chunks/007be9fab4adea42.js +1 -0
- package/web/.next/static/chunks/{25a8e4460619670a.js → 34eb9cda9da722b6.js} +1 -1
- package/web/.next/static/chunks/{6205ca0c28401b31.js → 3790f4bb02b9f6e0.js} +2 -2
- package/web/.next/static/chunks/42bd17823c7f41a1.css +2 -0
- package/web/.next/static/chunks/{5ea9cc400337eeae.js → 494800b05a910e69.js} +1 -1
- package/web/.next/static/chunks/4b652ede9c20379c.js +1 -0
- package/web/.next/static/chunks/{f8e33bd4c6770071.js → 4d09dc48abcae1fd.js} +1 -1
- package/web/.next/static/chunks/51454a23ce051ec9.js +1 -0
- package/web/.next/static/chunks/{3f88555d42e6c0a5.js → 596adcd6a1f862cc.js} +1 -1
- package/web/.next/static/chunks/{98e3a7cf58fc912a.js → 672e3da3ad26005b.js} +1 -1
- package/web/.next/static/chunks/70b820a4be378635.js +1 -0
- package/web/.next/static/chunks/7acc79e599df9890.js +1 -0
- package/web/.next/static/chunks/{36d88ff9f7db4eb9.js → 876edf7bbd901942.js} +1 -1
- package/web/.next/static/chunks/8f122c3ac2102300.js +11 -0
- package/web/.next/static/chunks/96ba74ac76fe6826.js +1 -0
- package/web/.next/static/chunks/a1ddf1f9b1435434.js +3 -0
- package/web/.next/static/chunks/b5696d211be51b4d.js +1 -0
- package/web/.next/static/chunks/c8b2868ae430a586.js +1 -0
- package/web/.next/static/chunks/dfcdd7e8249e47fd.js +1 -0
- package/web/.next/static/chunks/{89aac43287d73b02.js → ed3a602003bcb31b.js} +1 -1
- package/web/.next/static/chunks/{turbopack-080e470ea902d0ba.js → turbopack-426d9bc2450816ba.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4093a637._.js +0 -5
- package/web/.next/server/chunks/ssr/_4093a637._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5428b384._.js +0 -3
- package/web/.next/server/chunks/ssr/_88c4dab8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_956601a1._.js +0 -9
- package/web/.next/server/chunks/ssr/_956601a1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c26c679f._.js +0 -3
- package/web/.next/server/chunks/ssr/_c26c679f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_caf6533c._.js +0 -3
- package/web/.next/server/chunks/ssr/_caf6533c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f7f6173c._.js +0 -3
- package/web/.next/server/chunks/ssr/_f7f6173c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +0 -3
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +0 -6
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +0 -6
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_4093a637._.js +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_5428b384._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_956601a1._.js +0 -9
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_c26c679f._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_caf6533c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_f7f6173c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +0 -6
- package/web/.next/static/chunks/0d1285175b320302.js +0 -1
- package/web/.next/static/chunks/146c0a7697bc5a5c.js +0 -1
- package/web/.next/static/chunks/16c1db929d7ed3c9.js +0 -1
- package/web/.next/static/chunks/18deef44e5e36e2b.js +0 -3
- package/web/.next/static/chunks/3479d6ae297e5410.css +0 -2
- package/web/.next/static/chunks/700501f5ac2bb320.js +0 -1
- package/web/.next/static/chunks/730cb306a35d6396.js +0 -1
- package/web/.next/static/chunks/907556417091ee06.js +0 -11
- package/web/.next/static/chunks/aa6cc6df962a3fc0.js +0 -3
- package/web/.next/static/chunks/c63d1c145c5a07dc.js +0 -1
- package/web/.next/static/chunks/fc00e1b83852da4e.js +0 -1
- package/web/.next/static/chunks/fe80866e23f343eb.js +0 -1
- /package/web/.next/static/{x8A1bt8tX5vg9IpB1ksif → r7LAkVhSBzOwbRx2bcqLy}/_buildManifest.js +0 -0
- /package/web/.next/static/{x8A1bt8tX5vg9IpB1ksif → r7LAkVhSBzOwbRx2bcqLy}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{x8A1bt8tX5vg9IpB1ksif → r7LAkVhSBzOwbRx2bcqLy}/_ssgManifest.js +0 -0
package/web/.next/standalone/src/presentation/web/components/features/settings/ModelPicker/index.tsx
ADDED
|
@@ -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
|
|
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-
|
|
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-
|
|
295
|
-
<
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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
|
|
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
|
-
{
|
|
43
|
-
|
|
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 = {
|
package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx
CHANGED
|
@@ -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
|
}
|
|
@@ -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}
|
|
@@ -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,16298,e=>{"use strict";let t=(0,e.i(3645).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["default",()=>t])},69512,e=>{"use strict";let t=(0,e.i(3645).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);e.s(["default",()=>t])},23925,1012,e=>{"use strict";let t=(0,e.i(3645).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",()=>t],1012),e.s(["Check",()=>t],23925)},30090,e=>{"use strict";let t=(0,e.i(3645).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["default",()=>t])},54277,e=>{"use strict";var t=e.i(30090);e.s(["CircleX",()=>t.default])},33548,e=>{"use strict";let t=(0,e.i(3645).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["Copy",()=>t],33548)},54793,7729,e=>{"use strict";var t=e.i(20314),r=e.i(31777);function a({icon:e,title:a,description:l,action:s,className:c,...u}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",c),...u,children:[e?(0,t.jsx)("div",{className:"text-muted-foreground",children:e}):null,(0,t.jsx)("h3",{className:"text-lg font-semibold",children:a}),l?(0,t.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:l}):null,s?(0,t.jsx)("div",{className:"mt-2",children:s}):null]})}e.s(["EmptyState",()=>a],7729),e.s([],54793)},81846,e=>{"use strict";var t=e.i(20314),r=e.i(94237),a=e.i(31777);let l=(0,r.cva)("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function s({className:e,variant:r,...s}){return(0,t.jsx)("div",{className:(0,a.cn)(l({variant:r}),e),...s})}e.s(["Badge",()=>s])},1650,e=>{"use strict";e.i(11495),e.s([])},19933,e=>{"use strict";let t=(0,e.i(3645).default)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",()=>t],19933)},8986,10976,87144,36441,e=>{"use strict";let t=(0,e.i(3645).default)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);e.s(["Code2",()=>t],8986);var r=e.i(21023);let a=(0,r.createServerReference)("402f155a3693c928a7d11c8c27cc354e95749e7326",r.callServer,void 0,r.findSourceMapURL,"openIde");e.s(["openIde",()=>a],10976);let l=(0,r.createServerReference)("40d0fc329d73d03c147761f4a40ba18469eb543298",r.callServer,void 0,r.findSourceMapURL,"openShell");e.s(["openShell",()=>l],87144);let s=(0,r.createServerReference)("40b7490fe16e298ade16638f6933836e735a83f219",r.callServer,void 0,r.findSourceMapURL,"openFolder");e.s(["openFolder",()=>s],36441)},76852,e=>{"use strict";var t=e.i(79054),r=e.i(10976),a=e.i(87144),l=e.i(36441);function s(e){let[s,c]=(0,t.useState)(!1),[u,n]=(0,t.useState)(!1),[o,i]=(0,t.useState)(!1),[d,f]=(0,t.useState)(null),[p,h]=(0,t.useState)(null),[y,m]=(0,t.useState)(null),v=(0,t.useRef)(null),x=(0,t.useRef)(null),g=(0,t.useRef)(null);(0,t.useEffect)(()=>()=>{v.current&&clearTimeout(v.current),x.current&&clearTimeout(x.current),g.current&&clearTimeout(g.current)},[]);let k=(0,t.useCallback)(async(t,r,a,l,s)=>{if(e&&!s){l.current&&clearTimeout(l.current),r(!0),a(null);try{let e=await t();if(!e.success){let t=e.error??"An unexpected error occurred";a(t),l.current=setTimeout(()=>a(null),5e3)}}catch(e){a(e instanceof Error?e.message:"An unexpected error occurred"),l.current=setTimeout(()=>a(null),5e3)}finally{r(!1)}}},[e]);return{openInIde:(0,t.useCallback)(()=>k(()=>(0,r.openIde)({repositoryPath:e.repositoryPath}),c,f,v,s),[k,s,e]),openInShell:(0,t.useCallback)(()=>k(()=>(0,a.openShell)({repositoryPath:e.repositoryPath}),n,h,x,u),[k,u,e]),openFolder:(0,t.useCallback)(()=>k(()=>(0,l.openFolder)(e.repositoryPath),i,m,g,o),[k,o,e]),ideLoading:s,shellLoading:u,folderLoading:o,ideError:d,shellError:p,folderError:y}}e.s(["useRepositoryActions",()=>s])}]);
|