@shepai/cli 1.76.0-pr241.9ff2c05 → 1.76.0-pr243.b5a1065
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/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/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 +1 -0
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- 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 +3 -15
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- 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 +15 -0
- 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 +28 -0
- 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/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/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/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 +1 -6
- 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-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/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/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/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- 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/server-reference-manifest.json +16 -16
- 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/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/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/server-reference-manifest.json +16 -16
- 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/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/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/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.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/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- 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/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/server-reference-manifest.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.map +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/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]__17a611f0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -1
- 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/_0e9d6bf7._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_30fd6f01._.js → _435fea24._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_30fd6f01._.js.map → _435fea24._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_5ee4f5a7._.js.map +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.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/_9f940437._.js +1 -1
- package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +1 -1
- 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_459cb687._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.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_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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +22 -22
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
- 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/server-reference-manifest.json +16 -16
- 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/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/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/server-reference-manifest.json +16 -16
- 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/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/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/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.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/server-reference-manifest.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/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/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/server-reference-manifest.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/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/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]__17a611f0._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
- 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/_0e9d6bf7._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_30fd6f01._.js → _435fea24._.js} +2 -2
- 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/_8400c8bb._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
- 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_459cb687._.js +2 -2
- 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_components_features_control-center_7ac3562e._.js +1 -1
- 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 +22 -22
- 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-model.ts +45 -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/ui/command.tsx +114 -0
- package/web/.next/static/chunks/115eab1c5d9aea10.js +1 -0
- package/web/.next/static/chunks/{2e2355741bd6a9a7.js → 46c77597b4b8129d.js} +1 -1
- package/web/.next/static/chunks/{dcb8f73fb28b2a26.js → 81e1c1e43ae18086.js} +1 -1
- package/web/.next/static/chunks/8a68cac7c51df846.css +2 -0
- package/web/.next/static/chunks/{45b6a69a50b9d9e8.js → 920d18ed1ff267e7.js} +1 -1
- package/web/.next/static/chunks/{e37d7d4d215db8f5.js → 9678137ccbb5bdc3.js} +1 -1
- package/web/.next/static/chunks/{4e6ecfe539924a71.js → a32ab061aed15a64.js} +1 -1
- package/web/.next/static/chunks/{47b5d582b373816d.js → b1fa3fb02b473f65.js} +1 -1
- package/web/.next/static/chunks/{437a925303b28b53.js → bdbe5f5328a66512.js} +1 -1
- package/web/.next/static/chunks/{b5078ac043e7335a.js → faee95b678e8ec64.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-messages.d.ts +0 -15
- package/dist/src/presentation/web/app/actions/get-feature-messages.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-messages.js +0 -26
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +0 -17
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +0 -25
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +0 -18
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-plan.js +0 -31
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +0 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +0 -90
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +0 -20
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +0 -252
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +0 -7
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +0 -68
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +0 -14
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +0 -112
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts +0 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.js +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.d.ts +0 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.js +0 -24
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.stories.d.ts +0 -18
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.stories.js +0 -125
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +0 -6
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +0 -35
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +0 -28
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +0 -157
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts +0 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +0 -40
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +0 -22
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +0 -188
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts +0 -30
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +0 -100
- package/web/.next/standalone/src/presentation/web/app/actions/get-feature-messages.ts +0 -42
- package/web/.next/standalone/src/presentation/web/app/actions/get-feature-phase-timings.ts +0 -42
- package/web/.next/standalone/src/presentation/web/app/actions/get-feature-plan.ts +0 -52
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.tsx +0 -272
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx +0 -245
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.tsx +0 -130
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.tsx +0 -136
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/index.ts +0 -2
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.stories.tsx +0 -149
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/messages-tab.tsx +0 -92
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.tsx +0 -186
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.tsx +0 -142
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.tsx +0 -214
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.tsx +0 -121
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.ts +0 -143
- package/web/.next/static/chunks/84d2f2d55e5cf753.css +0 -2
- package/web/.next/static/chunks/90f36476e66cbace.js +0 -1
- /package/web/.next/static/{TuKZpCcwG7RLlpnyasgpZ → dW3UxyG_fKX-TDcK9QVh4}/_buildManifest.js +0 -0
- /package/web/.next/static/{TuKZpCcwG7RLlpnyasgpZ → dW3UxyG_fKX-TDcK9QVh4}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{TuKZpCcwG7RLlpnyasgpZ → dW3UxyG_fKX-TDcK9QVh4}/_ssgManifest.js +0 -0
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PlanTab } from './plan-tab.js';
|
|
3
|
-
const meta = {
|
|
4
|
-
title: 'Drawers/Feature/Tabs/PlanTab',
|
|
5
|
-
component: PlanTab,
|
|
6
|
-
tags: ['autodocs'],
|
|
7
|
-
parameters: {
|
|
8
|
-
layout: 'fullscreen',
|
|
9
|
-
},
|
|
10
|
-
decorators: [
|
|
11
|
-
(Story) => (_jsx("div", { style: { height: '600px', width: '400px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
|
|
12
|
-
],
|
|
13
|
-
};
|
|
14
|
-
export default meta;
|
|
15
|
-
/* ---------------------------------------------------------------------------
|
|
16
|
-
* Data fixtures
|
|
17
|
-
* ------------------------------------------------------------------------- */
|
|
18
|
-
const mixedTasksPlan = {
|
|
19
|
-
state: 'Ready',
|
|
20
|
-
overview: 'Implement OAuth2 authentication flow with support for Google and GitHub identity providers. The implementation includes token management, callback handling, and user profile sync.',
|
|
21
|
-
tasks: [
|
|
22
|
-
{
|
|
23
|
-
title: 'Set up OAuth provider configuration',
|
|
24
|
-
description: 'Configure Google and GitHub OAuth apps with client IDs and secrets',
|
|
25
|
-
state: 'Done',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
title: 'Implement callback handler',
|
|
29
|
-
description: 'Handle OAuth callback with authorization code exchange',
|
|
30
|
-
state: 'Done',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
title: 'Add token refresh logic',
|
|
34
|
-
description: 'Implement silent token refresh using refresh tokens stored in httpOnly cookies',
|
|
35
|
-
state: 'Work in Progress',
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
title: 'Create user profile sync',
|
|
39
|
-
description: 'Sync user profile data from identity providers on login',
|
|
40
|
-
state: 'Todo',
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
title: 'Write integration tests',
|
|
44
|
-
description: 'Test the full OAuth flow with mocked providers',
|
|
45
|
-
state: 'Todo',
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
title: 'Update API documentation',
|
|
49
|
-
description: 'Document new authentication endpoints and flows',
|
|
50
|
-
state: 'Review',
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
};
|
|
54
|
-
const allDonePlan = {
|
|
55
|
-
state: 'Ready',
|
|
56
|
-
overview: 'All implementation tasks for the rate limiting feature have been completed successfully.',
|
|
57
|
-
tasks: [
|
|
58
|
-
{
|
|
59
|
-
title: 'Design sliding window algorithm',
|
|
60
|
-
description: 'Implement Redis-backed sliding window counter',
|
|
61
|
-
state: 'Done',
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
title: 'Add rate limit middleware',
|
|
65
|
-
description: 'Express middleware that checks rate limits per IP',
|
|
66
|
-
state: 'Done',
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
title: 'Configure limits per endpoint',
|
|
70
|
-
description: 'Set different rate limits for public vs authenticated endpoints',
|
|
71
|
-
state: 'Done',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
title: 'Add rate limit headers',
|
|
75
|
-
description: 'Include X-RateLimit-* headers in responses',
|
|
76
|
-
state: 'Done',
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
};
|
|
80
|
-
const draftPlan = {
|
|
81
|
-
state: 'Requirements',
|
|
82
|
-
overview: 'Initial plan for implementing the notification system. Requirements are still being gathered.',
|
|
83
|
-
tasks: [
|
|
84
|
-
{
|
|
85
|
-
title: 'Define notification types',
|
|
86
|
-
description: 'Enumerate all notification events and their payloads',
|
|
87
|
-
state: 'Todo',
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
title: 'Set up WebSocket server',
|
|
91
|
-
description: 'Configure Socket.io with Redis adapter for horizontal scaling',
|
|
92
|
-
state: 'Todo',
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
title: 'Implement notification store',
|
|
96
|
-
description: 'Persist notifications in database with read/unread tracking',
|
|
97
|
-
state: 'Todo',
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
};
|
|
101
|
-
const clarificationPlan = {
|
|
102
|
-
state: 'ClarificationRequired',
|
|
103
|
-
overview: 'Plan requires clarification on the scope of the email template system.',
|
|
104
|
-
tasks: [
|
|
105
|
-
{
|
|
106
|
-
title: 'Set up email provider',
|
|
107
|
-
description: 'Configure SendGrid API integration',
|
|
108
|
-
state: 'Done',
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
title: 'Create template engine',
|
|
112
|
-
description: 'Implement Handlebars-based email template rendering',
|
|
113
|
-
state: 'Todo',
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
};
|
|
117
|
-
const noTasksPlan = {
|
|
118
|
-
state: 'Requirements',
|
|
119
|
-
overview: 'Plan overview is available but no tasks have been defined yet.',
|
|
120
|
-
tasks: [],
|
|
121
|
-
};
|
|
122
|
-
/* ---------------------------------------------------------------------------
|
|
123
|
-
* Stories
|
|
124
|
-
* ------------------------------------------------------------------------- */
|
|
125
|
-
/** Default — plan with tasks in various states (Todo, WIP, Done, Review). */
|
|
126
|
-
export const Default = {
|
|
127
|
-
args: {
|
|
128
|
-
plan: mixedTasksPlan,
|
|
129
|
-
loading: false,
|
|
130
|
-
error: null,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
/** All tasks completed. */
|
|
134
|
-
export const AllTasksDone = {
|
|
135
|
-
args: {
|
|
136
|
-
plan: allDonePlan,
|
|
137
|
-
loading: false,
|
|
138
|
-
error: null,
|
|
139
|
-
},
|
|
140
|
-
};
|
|
141
|
-
/** Draft plan in Requirements state. */
|
|
142
|
-
export const DraftPlan = {
|
|
143
|
-
args: {
|
|
144
|
-
plan: draftPlan,
|
|
145
|
-
loading: false,
|
|
146
|
-
error: null,
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
|
-
/** Plan requiring clarification — ClarificationRequired state badge. */
|
|
150
|
-
export const ClarificationRequired = {
|
|
151
|
-
args: {
|
|
152
|
-
plan: clarificationPlan,
|
|
153
|
-
loading: false,
|
|
154
|
-
error: null,
|
|
155
|
-
},
|
|
156
|
-
};
|
|
157
|
-
/** Plan with overview but no tasks defined yet. */
|
|
158
|
-
export const NoTasks = {
|
|
159
|
-
args: {
|
|
160
|
-
plan: noTasksPlan,
|
|
161
|
-
loading: false,
|
|
162
|
-
error: null,
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
/** Loading state — spinner displayed while data is being fetched. */
|
|
166
|
-
export const Loading = {
|
|
167
|
-
args: {
|
|
168
|
-
plan: null,
|
|
169
|
-
loading: true,
|
|
170
|
-
error: null,
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
/** Empty state — no plan created yet. */
|
|
174
|
-
export const Empty = {
|
|
175
|
-
args: {
|
|
176
|
-
plan: null,
|
|
177
|
-
loading: false,
|
|
178
|
-
error: null,
|
|
179
|
-
},
|
|
180
|
-
};
|
|
181
|
-
/** Error state — inline error message. */
|
|
182
|
-
export const Error = {
|
|
183
|
-
args: {
|
|
184
|
-
plan: null,
|
|
185
|
-
loading: false,
|
|
186
|
-
error: 'Failed to load plan data. Please try again.',
|
|
187
|
-
},
|
|
188
|
-
};
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/** State for a single tab's data, loading, and error. */
|
|
2
|
-
export interface TabState<T = unknown> {
|
|
3
|
-
data: T | null;
|
|
4
|
-
loading: boolean;
|
|
5
|
-
error: string | null;
|
|
6
|
-
}
|
|
7
|
-
/** A function that fetches data for a tab given a feature ID. */
|
|
8
|
-
export type TabFetcher<T = unknown> = (featureId: string) => Promise<T>;
|
|
9
|
-
/** Map of tab keys to their fetcher functions. */
|
|
10
|
-
export type TabFetchers<K extends string> = Record<K, TabFetcher>;
|
|
11
|
-
/** Return type of the useTabDataFetch hook. */
|
|
12
|
-
export interface UseTabDataFetchResult<K extends string> {
|
|
13
|
-
/** Per-tab state (data, loading, error). */
|
|
14
|
-
tabs: Record<K, TabState>;
|
|
15
|
-
/** Fetch data for a tab. Uses cache if already fetched. */
|
|
16
|
-
fetchTab: (tab: K) => Promise<void>;
|
|
17
|
-
/** Force re-fetch for a tab, bypassing cache. */
|
|
18
|
-
refreshTab: (tab: K) => Promise<void>;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Custom hook for lazy-loading tab data with per-tab caching.
|
|
22
|
-
*
|
|
23
|
-
* - Fetches data only when a tab is explicitly activated via fetchTab().
|
|
24
|
-
* - Caches results so revisiting a loaded tab is instant.
|
|
25
|
-
* - Clears all cached data when featureId changes.
|
|
26
|
-
* - Supports force re-fetch via refreshTab() for SSE-driven updates.
|
|
27
|
-
* - Uses ref-based callbacks to avoid stale closures (matches useArtifactFetch pattern).
|
|
28
|
-
*/
|
|
29
|
-
export declare function useTabDataFetch<K extends string>(featureId: string, fetchers: TabFetchers<K>): UseTabDataFetchResult<K>;
|
|
30
|
-
//# sourceMappingURL=use-tab-data-fetch.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-tab-data-fetch.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.ts"],"names":[],"mappings":"AAIA,yDAAyD;AACzD,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,iEAAiE;AACjE,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAExE,kDAAkD;AAClD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAElE,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM;IACrD,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,iDAAiD;IACjD,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAmG1B"}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
3
|
-
function createInitialTabState() {
|
|
4
|
-
return { data: null, loading: false, error: null };
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Custom hook for lazy-loading tab data with per-tab caching.
|
|
8
|
-
*
|
|
9
|
-
* - Fetches data only when a tab is explicitly activated via fetchTab().
|
|
10
|
-
* - Caches results so revisiting a loaded tab is instant.
|
|
11
|
-
* - Clears all cached data when featureId changes.
|
|
12
|
-
* - Supports force re-fetch via refreshTab() for SSE-driven updates.
|
|
13
|
-
* - Uses ref-based callbacks to avoid stale closures (matches useArtifactFetch pattern).
|
|
14
|
-
*/
|
|
15
|
-
export function useTabDataFetch(featureId, fetchers) {
|
|
16
|
-
const tabKeys = Object.keys(fetchers);
|
|
17
|
-
const [tabStates, setTabStates] = useState(() => {
|
|
18
|
-
const initial = {};
|
|
19
|
-
for (const key of tabKeys) {
|
|
20
|
-
initial[key] = createInitialTabState();
|
|
21
|
-
}
|
|
22
|
-
return initial;
|
|
23
|
-
});
|
|
24
|
-
// Ref-based fetchers to avoid stale closures in callbacks.
|
|
25
|
-
const fetchersRef = useRef(fetchers);
|
|
26
|
-
fetchersRef.current = fetchers;
|
|
27
|
-
// Ref-based featureId to use current value in callbacks.
|
|
28
|
-
const featureIdRef = useRef(featureId);
|
|
29
|
-
featureIdRef.current = featureId;
|
|
30
|
-
// Track mounted state to prevent state updates after unmount.
|
|
31
|
-
const mountedRef = useRef(true);
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
mountedRef.current = true;
|
|
34
|
-
return () => {
|
|
35
|
-
mountedRef.current = false;
|
|
36
|
-
};
|
|
37
|
-
}, []);
|
|
38
|
-
// Clear all cached data when featureId changes.
|
|
39
|
-
const prevFeatureIdRef = useRef(featureId);
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
if (prevFeatureIdRef.current !== featureId) {
|
|
42
|
-
prevFeatureIdRef.current = featureId;
|
|
43
|
-
setTabStates((prev) => {
|
|
44
|
-
const cleared = {};
|
|
45
|
-
for (const key of Object.keys(prev)) {
|
|
46
|
-
cleared[key] = createInitialTabState();
|
|
47
|
-
}
|
|
48
|
-
return cleared;
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}, [featureId]);
|
|
52
|
-
const doFetch = useCallback(async (tab) => {
|
|
53
|
-
const fetcher = fetchersRef.current[tab];
|
|
54
|
-
const currentFeatureId = featureIdRef.current;
|
|
55
|
-
if (!fetcher)
|
|
56
|
-
return;
|
|
57
|
-
if (mountedRef.current) {
|
|
58
|
-
setTabStates((prev) => ({
|
|
59
|
-
...prev,
|
|
60
|
-
[tab]: { ...prev[tab], loading: true, error: null },
|
|
61
|
-
}));
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
const data = await fetcher(currentFeatureId);
|
|
65
|
-
if (mountedRef.current) {
|
|
66
|
-
setTabStates((prev) => ({
|
|
67
|
-
...prev,
|
|
68
|
-
[tab]: { data, loading: false, error: null },
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
if (mountedRef.current) {
|
|
74
|
-
const message = error instanceof Error ? error.message : 'Failed to fetch tab data';
|
|
75
|
-
setTabStates((prev) => ({
|
|
76
|
-
...prev,
|
|
77
|
-
[tab]: { data: null, loading: false, error: message },
|
|
78
|
-
}));
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}, []);
|
|
82
|
-
const fetchTab = useCallback(async (tab) => {
|
|
83
|
-
// Check if data is already cached (non-null data means already fetched)
|
|
84
|
-
const current = tabStates[tab];
|
|
85
|
-
if (current && current.data !== null)
|
|
86
|
-
return;
|
|
87
|
-
// Also skip if currently loading
|
|
88
|
-
if (current && current.loading)
|
|
89
|
-
return;
|
|
90
|
-
await doFetch(tab);
|
|
91
|
-
}, [tabStates, doFetch]);
|
|
92
|
-
const refreshTab = useCallback(async (tab) => {
|
|
93
|
-
await doFetch(tab);
|
|
94
|
-
}, [doFetch]);
|
|
95
|
-
return {
|
|
96
|
-
tabs: tabStates,
|
|
97
|
-
fetchTab,
|
|
98
|
-
refreshTab,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { resolve } from '@/lib/server-container';
|
|
4
|
-
import type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';
|
|
5
|
-
|
|
6
|
-
export interface MessageData {
|
|
7
|
-
role: string;
|
|
8
|
-
content: string;
|
|
9
|
-
options?: string[];
|
|
10
|
-
selectedOption?: number;
|
|
11
|
-
answer?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
type GetMessagesResult = { messages: MessageData[] } | { error: string };
|
|
15
|
-
|
|
16
|
-
export async function getFeatureMessages(featureId: string): Promise<GetMessagesResult> {
|
|
17
|
-
if (!featureId.trim()) {
|
|
18
|
-
return { error: 'Feature id is required' };
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
try {
|
|
22
|
-
const repo = resolve<IFeatureRepository>('IFeatureRepository');
|
|
23
|
-
const feature = await repo.findById(featureId);
|
|
24
|
-
|
|
25
|
-
if (!feature) {
|
|
26
|
-
return { error: 'Feature not found' };
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const messages: MessageData[] = feature.messages.map((m) => ({
|
|
30
|
-
role: m.role,
|
|
31
|
-
content: m.content,
|
|
32
|
-
options: m.options,
|
|
33
|
-
selectedOption: m.selectedOption,
|
|
34
|
-
answer: m.answer,
|
|
35
|
-
}));
|
|
36
|
-
|
|
37
|
-
return { messages };
|
|
38
|
-
} catch (error: unknown) {
|
|
39
|
-
const message = error instanceof Error ? error.message : 'Failed to load feature messages';
|
|
40
|
-
return { error: message };
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { resolve } from '@/lib/server-container';
|
|
4
|
-
import type { IPhaseTimingRepository } from '@shepai/core/application/ports/output/agents/phase-timing-repository.interface';
|
|
5
|
-
|
|
6
|
-
export interface PhaseTimingData {
|
|
7
|
-
agentRunId: string;
|
|
8
|
-
phase: string;
|
|
9
|
-
startedAt: string;
|
|
10
|
-
completedAt?: string;
|
|
11
|
-
durationMs?: number;
|
|
12
|
-
waitingApprovalAt?: string;
|
|
13
|
-
approvalWaitMs?: number;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
type GetPhaseTimingsResult = { timings: PhaseTimingData[] } | { error: string };
|
|
17
|
-
|
|
18
|
-
export async function getFeaturePhaseTimings(featureId: string): Promise<GetPhaseTimingsResult> {
|
|
19
|
-
if (!featureId.trim()) {
|
|
20
|
-
return { error: 'Feature id is required' };
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
const repo = resolve<IPhaseTimingRepository>('IPhaseTimingRepository');
|
|
25
|
-
const phaseTimings = await repo.findByFeatureId(featureId);
|
|
26
|
-
|
|
27
|
-
const timings: PhaseTimingData[] = phaseTimings.map((t) => ({
|
|
28
|
-
agentRunId: t.agentRunId,
|
|
29
|
-
phase: t.phase,
|
|
30
|
-
startedAt: t.startedAt,
|
|
31
|
-
completedAt: t.completedAt,
|
|
32
|
-
durationMs: t.durationMs != null ? Number(t.durationMs) : undefined,
|
|
33
|
-
waitingApprovalAt: t.waitingApprovalAt,
|
|
34
|
-
approvalWaitMs: t.approvalWaitMs != null ? Number(t.approvalWaitMs) : undefined,
|
|
35
|
-
}));
|
|
36
|
-
|
|
37
|
-
return { timings };
|
|
38
|
-
} catch (error: unknown) {
|
|
39
|
-
const message = error instanceof Error ? error.message : 'Failed to load phase timings';
|
|
40
|
-
return { error: message };
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { resolve } from '@/lib/server-container';
|
|
4
|
-
import type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';
|
|
5
|
-
|
|
6
|
-
export interface PlanTaskData {
|
|
7
|
-
title: string;
|
|
8
|
-
description: string;
|
|
9
|
-
state: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface PlanData {
|
|
13
|
-
state: string;
|
|
14
|
-
overview: string;
|
|
15
|
-
tasks: PlanTaskData[];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
type GetPlanResult = { plan: PlanData | undefined } | { error: string };
|
|
19
|
-
|
|
20
|
-
export async function getFeaturePlan(featureId: string): Promise<GetPlanResult> {
|
|
21
|
-
if (!featureId.trim()) {
|
|
22
|
-
return { error: 'Feature id is required' };
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
try {
|
|
26
|
-
const repo = resolve<IFeatureRepository>('IFeatureRepository');
|
|
27
|
-
const feature = await repo.findById(featureId);
|
|
28
|
-
|
|
29
|
-
if (!feature) {
|
|
30
|
-
return { error: 'Feature not found' };
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (!feature.plan) {
|
|
34
|
-
return { plan: undefined };
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const plan: PlanData = {
|
|
38
|
-
state: feature.plan.state,
|
|
39
|
-
overview: feature.plan.overview,
|
|
40
|
-
tasks: feature.plan.tasks.map((t) => ({
|
|
41
|
-
title: t.title ?? '',
|
|
42
|
-
description: t.description ?? '',
|
|
43
|
-
state: t.state,
|
|
44
|
-
})),
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
return { plan };
|
|
48
|
-
} catch (error: unknown) {
|
|
49
|
-
const message = error instanceof Error ? error.message : 'Failed to load feature plan';
|
|
50
|
-
return { error: message };
|
|
51
|
-
}
|
|
52
|
-
}
|