@shepai/cli 1.167.0 → 1.168.0-pr509.b1dd877
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/Feature.yaml +10 -0
- package/apis/json-schema/SkillInjectionConfig.yaml +17 -0
- package/apis/json-schema/SkillSource.yaml +21 -0
- package/apis/json-schema/SkillSourceType.yaml +7 -0
- package/apis/json-schema/WorkflowConfig.yaml +3 -0
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts +38 -2
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +16 -1
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.d.ts +39 -0
- package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/skill-injector.interface.js +8 -0
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +1 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -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 +22 -3
- 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/application/use-cases/interactive/index.d.ts +2 -0
- package/dist/packages/core/src/application/use-cases/interactive/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/interactive/index.js +1 -0
- package/dist/packages/core/src/application/use-cases/interactive/respond-to-interaction.use-case.d.ts +17 -0
- package/dist/packages/core/src/application/use-cases/interactive/respond-to-interaction.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/interactive/respond-to-interaction.use-case.js +34 -0
- package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.js +6 -2
- 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 +55 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +50 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +5 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +7 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +6 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +2 -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 +27 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.d.ts +15 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-skill-injection-config.js +23 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-injected-skills-to-features.js +19 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +8 -4
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +59 -6
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +7 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +101 -1
- package/dist/packages/core/src/infrastructure/services/skill-injector.service.d.ts +26 -0
- package/dist/packages/core/src/infrastructure/services/skill-injector.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/skill-injector.service.js +201 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +3 -0
- package/dist/src/presentation/web/app/actions/add-injected-skill.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/add-injected-skill.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/add-injected-skill.js +34 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -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 +3 -1
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +1 -0
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +1 -0
- package/dist/src/presentation/web/app/actions/remove-injected-skill.d.ts +6 -0
- package/dist/src/presentation/web/app/actions/remove-injected-skill.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/remove-injected-skill.js +35 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/respond/route.d.ts +19 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/respond/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/respond/route.js +33 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +7 -0
- 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 +2 -0
- package/dist/src/presentation/web/app/layout.d.ts +0 -1
- package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
- package/dist/src/presentation/web/app/layout.js +0 -1
- package/dist/src/presentation/web/app/skills/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/skills/page.js +6 -1
- package/dist/src/presentation/web/components/assistant-ui/thread.d.ts +3 -2
- package/dist/src/presentation/web/components/assistant-ui/thread.d.ts.map +1 -1
- package/dist/src/presentation/web/components/assistant-ui/thread.js +26 -3
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
- 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 +6 -2
- 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 +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +10 -4
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +12 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +4 -0
- 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/react-file-manager-dialog/react-file-manager-dialog.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.js +68 -56
- package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.d.ts +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.js +7 -1
- package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.js +3 -0
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +3 -1
- package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatTab.js +3 -2
- package/dist/src/presentation/web/components/features/chat/InteractionBubble.d.ts +33 -0
- package/dist/src/presentation/web/components/features/chat/InteractionBubble.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/InteractionBubble.js +155 -0
- package/dist/src/presentation/web/components/features/chat/InteractionBubble.stories.d.ts +22 -0
- package/dist/src/presentation/web/components/features/chat/InteractionBubble.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/InteractionBubble.stories.js +107 -0
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +16 -0
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.js +62 -1
- 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 +18 -3
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +1 -1
- package/dist/src/presentation/web/components/features/skills/add-skill-dialog.d.ts +10 -0
- package/dist/src/presentation/web/components/features/skills/add-skill-dialog.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/add-skill-dialog.js +56 -0
- package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.js +66 -0
- package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts +8 -0
- package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.js +42 -0
- package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.js +69 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts +3 -1
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/skills/skills-page-client.js +5 -3
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +27 -0
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-graph-state.js +16 -0
- package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts +1 -1
- package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-turn-statuses.js +1 -1
- package/dist/translations/ar/cli.json +2 -0
- package/dist/translations/ar/web.json +15 -11
- package/dist/translations/de/cli.json +2 -0
- package/dist/translations/de/web.json +35 -17
- package/dist/translations/en/cli.json +2 -0
- package/dist/translations/en/web.json +4 -0
- package/dist/translations/es/cli.json +2 -0
- package/dist/translations/es/web.json +16 -12
- package/dist/translations/fr/cli.json +2 -0
- package/dist/translations/fr/web.json +16 -12
- package/dist/translations/he/cli.json +2 -0
- package/dist/translations/he/web.json +16 -12
- package/dist/translations/pt/cli.json +2 -0
- package/dist/translations/pt/web.json +16 -12
- package/dist/translations/ru/cli.json +2 -0
- package/dist/translations/ru/web.json +16 -12
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +7 -7
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/routes-manifest.json +8 -0
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/create/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
- 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]/[tab]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- 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]/[tab]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- 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)/chat/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- 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]/[tab]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- 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 +5 -5
- package/web/.next/server/app/(dashboard)/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- 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]/[tab]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- 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 +5 -5
- package/web/.next/server/app/_global-error/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 +7 -7
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
- package/web/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js +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/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route.js +7 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/settings/page/build-manifest.json +5 -5
- package/web/.next/server/app/settings/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/settings/page.js +3 -3
- 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 +5 -5
- package/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/skills/page/server-reference-manifest.json +52 -22
- package/web/.next/server/app/skills/page.js +3 -2
- 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 +5 -5
- package/web/.next/server/app/tools/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js +1 -1
- 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 +5 -5
- package/web/.next/server/app/version/page/react-loadable-manifest.json +1 -8
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js +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/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_respond_route_actions_990d51bd.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_respond_route_actions_990d51bd.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__31944fa2._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__31944fa2._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js +9 -3
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0727935d._.js → 403f9_next_8a33ddee._.js} +2 -2
- package/web/.next/server/chunks/ssr/403f9_next_8a33ddee._.js.map +1 -0
- 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/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1abe77bb._.js → [root-of-the-server]__1b4846fd._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1b4846fd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b0aac03._.js → [root-of-the-server]__7ded596d._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7ded596d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e07df893._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e07df893._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_08e6a4c5._.js +3 -0
- package/web/.next/server/chunks/ssr/_08e6a4c5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1e08a336._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_45496654._.js +3 -0
- package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js +3 -0
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_a5913a26._.js → _79b66f37._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_a5913a26._.js.map → _79b66f37._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_b4c3ffcc._.js → _8b9129da._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_b4c3ffcc._.js.map → _8b9129da._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a963dd3c._.js +3 -0
- package/web/.next/server/chunks/ssr/_a963dd3c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d78b2b6e._.js +3 -0
- package/web/.next/server/chunks/ssr/_d78b2b6e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_df737cce._.js +3 -0
- package/web/.next/server/chunks/ssr/_df737cce._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e3f14907._.js +9 -0
- package/web/.next/server/chunks/ssr/_e3f14907._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.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/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.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_components_features_skills_8a174cac._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_select_tsx_45d6b8ae._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_select_tsx_45d6b8ae._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +5 -5
- 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 +89 -59
- package/web/.next/static/chunks/0839854125212e6b.js +1 -0
- package/web/.next/static/chunks/{fe70e73feb07bcfd.js → 08ec4c9ab61717aa.js} +1 -1
- package/web/.next/static/chunks/{dedf6ca63c5468fa.js → 09edd35d194bec06.js} +3 -3
- package/web/.next/static/chunks/{d4d8f0a137bd2eb4.js → 12803afee7d0afc8.js} +2 -2
- package/web/.next/static/chunks/19680940c0bb3c3a.js +1 -0
- package/web/.next/static/chunks/{0be57768a211221a.js → 37a345c8f447ab56.js} +1 -1
- package/web/.next/static/chunks/3cbeac4d756302bc.js +5 -0
- package/web/.next/static/chunks/4355f7c193b01832.js +1 -0
- package/web/.next/static/chunks/{7a7d7e71cf9b5a4e.js → 4669ea9953c265d2.js} +1 -1
- package/web/.next/static/chunks/55e9df1e73af0b3e.js +7 -0
- package/web/.next/static/chunks/6deedc27548cd1df.js +1 -0
- package/web/.next/static/chunks/7b669373b268c12b.js +1 -0
- package/web/.next/static/chunks/7e22b815fb2a5b1b.js +3 -0
- package/web/.next/static/chunks/84a181ff3270fd9f.js +1 -0
- package/web/.next/static/chunks/89aac43287d73b02.js +1 -0
- package/web/.next/static/chunks/{d7eebb5c0aa9e101.js → a818bb026935d536.js} +2 -2
- package/web/.next/static/chunks/b2d1da8faf0da41d.js +1 -0
- package/web/.next/static/chunks/b7228e77a05ccbba.js +1 -0
- package/web/.next/static/chunks/ba251fd9b9fd254b.js +1 -0
- package/web/.next/static/chunks/c11bb4718643147f.js +5 -0
- package/web/.next/static/chunks/{3f404f608aebc7bb.js → d4a8e02e4be71dcf.js} +1 -1
- package/web/.next/static/chunks/f49e0076b62c6826.js +1 -0
- package/web/.next/static/chunks/fbff2864f22e8c88.css +1 -0
- package/web/.next/static/chunks/{turbopack-432ef324fc27240c.js → turbopack-9f7dcf06ca44886d.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.js +0 -3
- package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_3bcda5d7._.js +0 -3
- package/web/.next/server/chunks/ssr/_3bcda5d7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4d49a312._.js +0 -3
- package/web/.next/server/chunks/ssr/_4d49a312._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_506a3bc3._.js +0 -9
- package/web/.next/server/chunks/ssr/_506a3bc3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5ab8e97d._.js +0 -3
- package/web/.next/server/chunks/ssr/_5ab8e97d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9215e9ec._.js +0 -3
- package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +0 -1
- package/web/.next/static/chunks/16eea21868510afd.js +0 -5
- package/web/.next/static/chunks/3208dc997aaee4d3.css +0 -1
- package/web/.next/static/chunks/3deefc76ea55047c.js +0 -1
- package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +0 -1
- package/web/.next/static/chunks/420eb8b33d83c4cb.js +0 -1
- package/web/.next/static/chunks/63b0ad1dbc27a5d0.js +0 -1
- package/web/.next/static/chunks/65440524d7ee7d13.js +0 -1
- package/web/.next/static/chunks/6c634b447a6a0db8.js +0 -7
- package/web/.next/static/chunks/6d7b999c99d6d175.js +0 -9
- package/web/.next/static/chunks/6eb32cd5d2795a7c.js +0 -1
- package/web/.next/static/chunks/7f4d1ec4e9f921a3.js +0 -1
- package/web/.next/static/chunks/8180973e9cd6a99e.css +0 -1
- package/web/.next/static/chunks/8866edda931a81c2.js +0 -1
- package/web/.next/static/chunks/c0e13e7d1601bc5d.js +0 -1
- package/web/.next/static/chunks/c7e793951b20a67f.js +0 -1
- package/web/.next/static/chunks/d6a1facd04a52af5.js +0 -5
- package/web/.next/static/chunks/da6d0839a24602eb.js +0 -3
- package/web/.next/static/chunks/db3bf9eb0b519bae.js +0 -1
- /package/web/.next/static/{JjjyVzk5ESdcMWkH6999z → QTub9VF21lk2PO7IJDkNp}/_buildManifest.js +0 -0
- /package/web/.next/static/{JjjyVzk5ESdcMWkH6999z → QTub9VF21lk2PO7IJDkNp}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{JjjyVzk5ESdcMWkH6999z → QTub9VF21lk2PO7IJDkNp}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/** Shape matching UserInteractionData from the agent executor interface. */
|
|
2
|
+
export interface InteractionData {
|
|
3
|
+
toolCallId: string;
|
|
4
|
+
questions: {
|
|
5
|
+
question: string;
|
|
6
|
+
header: string;
|
|
7
|
+
options: {
|
|
8
|
+
label: string;
|
|
9
|
+
description: string;
|
|
10
|
+
preview?: string;
|
|
11
|
+
}[];
|
|
12
|
+
multiSelect: boolean;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
1
15
|
interface SessionInfo {
|
|
2
16
|
pid: number | null;
|
|
3
17
|
sessionId: string | null;
|
|
@@ -45,6 +59,8 @@ export declare function useChatRuntime(featureId: string, worktreePath?: string,
|
|
|
45
59
|
stopAgent: () => Promise<void>;
|
|
46
60
|
sessionInfo: SessionInfo | null;
|
|
47
61
|
isChatLoading: boolean;
|
|
62
|
+
pendingInteraction: InteractionData | null;
|
|
63
|
+
respondToInteraction: (answers: Record<string, string>) => Promise<void>;
|
|
48
64
|
};
|
|
49
65
|
export {};
|
|
50
66
|
//# sourceMappingURL=useChatRuntime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/useChatRuntime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/useChatRuntime.ts"],"names":[],"mappings":"AASA,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpE,WAAW,EAAE,OAAO,CAAC;KACtB,EAAE,CAAC;CACL;AAYD,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAkDD,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,kBAAkB;;;;;;;;oCAgXV,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;EAmDzC"}
|
|
@@ -100,6 +100,19 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
100
100
|
const [awaitingResponse, setAwaitingResponse] = useState(false);
|
|
101
101
|
const awaitingTimerRef = useRef(null);
|
|
102
102
|
const eventSourceRef = useRef(null);
|
|
103
|
+
// ── Interaction state (AskUserQuestion) ─────────────────────────────
|
|
104
|
+
const [pendingInteraction, setPendingInteraction] = useState(null);
|
|
105
|
+
// Sync pending interaction from backend polling (fallback for missed SSE)
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
const backendInteraction = chatState?.pendingInteraction ?? null;
|
|
108
|
+
if (backendInteraction) {
|
|
109
|
+
setPendingInteraction(backendInteraction);
|
|
110
|
+
}
|
|
111
|
+
else if (!backendInteraction && pendingInteraction) {
|
|
112
|
+
// Backend cleared it (e.g. agent continued) — clear local state
|
|
113
|
+
setPendingInteraction(null);
|
|
114
|
+
}
|
|
115
|
+
}, [chatState?.pendingInteraction, pendingInteraction]);
|
|
103
116
|
// Delayed awaiting — only show Thinking bubble after 600ms to avoid flash
|
|
104
117
|
const startAwaiting = useCallback(() => {
|
|
105
118
|
if (awaitingTimerRef.current)
|
|
@@ -163,10 +176,24 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
163
176
|
// Ignore
|
|
164
177
|
}
|
|
165
178
|
});
|
|
179
|
+
es.addEventListener('interaction', (event) => {
|
|
180
|
+
try {
|
|
181
|
+
const data = JSON.parse(event.data);
|
|
182
|
+
if (data.interaction) {
|
|
183
|
+
cancelAwaiting();
|
|
184
|
+
setPendingInteraction(data.interaction);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Ignore
|
|
189
|
+
}
|
|
190
|
+
});
|
|
166
191
|
es.addEventListener('done', () => {
|
|
167
192
|
setStatusLog(null);
|
|
168
193
|
cancelAwaiting();
|
|
169
194
|
pushDebug('turn_done');
|
|
195
|
+
// Agent turn completed — clear any lingering interaction state
|
|
196
|
+
setPendingInteraction(null);
|
|
170
197
|
// Refetch first, THEN clear local streaming state so there's no gap
|
|
171
198
|
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) }).then(() => {
|
|
172
199
|
setStreamingText('');
|
|
@@ -335,6 +362,7 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
335
362
|
setDebugEvents([]);
|
|
336
363
|
setStatusLog(null);
|
|
337
364
|
cancelAwaiting();
|
|
365
|
+
setPendingInteraction(null);
|
|
338
366
|
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
|
|
339
367
|
}, [featureId, queryClient, cancelAwaiting]);
|
|
340
368
|
// ── Stop agent ────────────────────────────────────────────────────────
|
|
@@ -347,6 +375,30 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
347
375
|
cancelAwaiting();
|
|
348
376
|
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
|
|
349
377
|
}, [featureId, queryClient, cancelAwaiting]);
|
|
378
|
+
// ── Respond to interaction (AskUserQuestion) ───────────────────────────
|
|
379
|
+
const respondToInteraction = useCallback(async (answers) => {
|
|
380
|
+
// Clear the bubble and status log immediately — answers are persisted as
|
|
381
|
+
// a user message by the backend, shown in conversation history on refetch.
|
|
382
|
+
setPendingInteraction(null);
|
|
383
|
+
setStatusLog(null);
|
|
384
|
+
try {
|
|
385
|
+
const res = await fetch(`/api/interactive/chat/${featureId}/respond`, {
|
|
386
|
+
method: 'POST',
|
|
387
|
+
headers: { 'Content-Type': 'application/json' },
|
|
388
|
+
body: JSON.stringify({ answers }),
|
|
389
|
+
});
|
|
390
|
+
if (!res.ok) {
|
|
391
|
+
// eslint-disable-next-line no-console
|
|
392
|
+
console.error(`[respondToInteraction] failed: ${res.status}`);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
catch (err) {
|
|
396
|
+
// eslint-disable-next-line no-console
|
|
397
|
+
console.error('[respondToInteraction] error:', err);
|
|
398
|
+
}
|
|
399
|
+
// Refetch to show the persisted user message with answers
|
|
400
|
+
void queryClient.invalidateQueries({ queryKey: chatQueryKey(featureId) });
|
|
401
|
+
}, [featureId, queryClient]);
|
|
350
402
|
// ── Build assistant-ui runtime ──────────────────────────────────────────
|
|
351
403
|
const runtime = useExternalStoreRuntime({
|
|
352
404
|
messages: threadMessages,
|
|
@@ -359,5 +411,14 @@ export function useChatRuntime(featureId, worktreePath, options) {
|
|
|
359
411
|
cancelAwaiting();
|
|
360
412
|
}, [cancelAwaiting]),
|
|
361
413
|
});
|
|
362
|
-
return {
|
|
414
|
+
return {
|
|
415
|
+
runtime,
|
|
416
|
+
status,
|
|
417
|
+
clearChat,
|
|
418
|
+
stopAgent,
|
|
419
|
+
sessionInfo,
|
|
420
|
+
isChatLoading,
|
|
421
|
+
pendingInteraction,
|
|
422
|
+
respondToInteraction,
|
|
423
|
+
};
|
|
363
424
|
}
|
package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAIpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAgC5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAIpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAgC5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CAiezF"}
|
package/dist/src/presentation/web/components/features/control-center/control-center-inner.js
CHANGED
|
@@ -143,13 +143,28 @@ export function ControlCenterInner({ initialNodes, initialEdges }) {
|
|
|
143
143
|
}, AUTO_FOCUS_DRAWER_DELAY_MS);
|
|
144
144
|
}, 0);
|
|
145
145
|
}, [fitView, guardedNavigate, router]);
|
|
146
|
-
//
|
|
146
|
+
// Smoothly pan/zoom to a specific node after it appears on canvas
|
|
147
|
+
const focusOnNode = useCallback((nodeId) => {
|
|
148
|
+
// Wait for next render so the node exists in the DOM
|
|
149
|
+
setTimeout(() => {
|
|
150
|
+
fitView({
|
|
151
|
+
nodes: [{ id: nodeId }],
|
|
152
|
+
maxZoom: 1.0,
|
|
153
|
+
padding: 0.4,
|
|
154
|
+
duration: 600,
|
|
155
|
+
});
|
|
156
|
+
}, 0);
|
|
157
|
+
}, [fitView]);
|
|
158
|
+
// Wrapper: add repo + auto-focus on the new node
|
|
147
159
|
const addRepoAndFocus = useCallback((path) => {
|
|
148
|
-
const { wasEmpty, repoPath } = handleAddRepository(path);
|
|
160
|
+
const { wasEmpty, repoPath, tempNodeId } = handleAddRepository(path);
|
|
149
161
|
if (wasEmpty) {
|
|
150
162
|
focusAndOpenDrawer(repoPath);
|
|
151
163
|
}
|
|
152
|
-
|
|
164
|
+
else {
|
|
165
|
+
focusOnNode(tempNodeId);
|
|
166
|
+
}
|
|
167
|
+
}, [handleAddRepository, focusAndOpenDrawer, focusOnNode]);
|
|
153
168
|
// Listen for global "add repository" events from the top bar button
|
|
154
169
|
useEffect(() => {
|
|
155
170
|
const handler = (e) => {
|
package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export interface ControlCenterState {
|
|
|
12
12
|
handleAddRepository: (path: string) => {
|
|
13
13
|
wasEmpty: boolean;
|
|
14
14
|
repoPath: string;
|
|
15
|
+
tempNodeId: string;
|
|
15
16
|
};
|
|
16
17
|
handleLayout: (direction: LayoutDirection) => void;
|
|
17
18
|
handleArchiveFeature: (featureId: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAkBjC,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM7E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;
|
|
1
|
+
{"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAkBjC,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM7E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QACrC,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,mBAAmB,EAAE,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,OAAO,EACvB,OAAO,CAAC,EAAE,OAAO,KACd,IAAI,CAAC;IACV,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,sBAAsB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,sBAAsB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACvC,QAAQ,CAAC,EAAE,MAAM,KACd,MAAM,CAAC;IACZ,yDAAyD;IACzD,YAAY,EAAE,OAAO,CAAC;IACtB,0CAA0C;IAC1C,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,wDAAwD;IACxD,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,gDAAgD;IAChD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IACtE,0EAA0E;IAC1E,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAQD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,kBAAkB,CAilBpB"}
|
package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js
CHANGED
|
@@ -486,7 +486,7 @@ export function useControlCenterState(initialNodes, initialEdges) {
|
|
|
486
486
|
toast.error('Failed to add repository');
|
|
487
487
|
})
|
|
488
488
|
.finally(() => endMutation());
|
|
489
|
-
return { wasEmpty, repoPath: path };
|
|
489
|
+
return { wasEmpty, repoPath: path, tempNodeId: tempId };
|
|
490
490
|
}, [
|
|
491
491
|
addRepositoryToMap,
|
|
492
492
|
removeRepository,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SkillData } from '../../../lib/skills.js';
|
|
2
|
+
export interface AddSkillDialogProps {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
onAdded: () => void;
|
|
6
|
+
discoveredSkills: SkillData[];
|
|
7
|
+
existingSkillNames: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function AddSkillDialog({ open, onOpenChange, onAdded, discoveredSkills, existingSkillNames, }: AddSkillDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=add-skill-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-skill-dialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/add-skill-dialog.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,kBAAkB,GACnB,EAAE,mBAAmB,2CAuIrB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { toast } from 'sonner';
|
|
5
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from '../../ui/dialog.js';
|
|
6
|
+
import { Button } from '../../ui/button.js';
|
|
7
|
+
import { Input } from '../../ui/input.js';
|
|
8
|
+
import { Label } from '../../ui/label.js';
|
|
9
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../ui/tabs.js';
|
|
10
|
+
import { addInjectedSkill } from '../../../app/actions/add-injected-skill.js';
|
|
11
|
+
export function AddSkillDialog({ open, onOpenChange, onAdded, discoveredSkills, existingSkillNames, }) {
|
|
12
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
13
|
+
const [remoteName, setRemoteName] = useState('');
|
|
14
|
+
const [remoteSource, setRemoteSource] = useState('');
|
|
15
|
+
const [remoteSkillName, setRemoteSkillName] = useState('');
|
|
16
|
+
const availableSkills = discoveredSkills.filter((s) => !existingSkillNames.includes(s.name));
|
|
17
|
+
const handleAddLocal = async (skill) => {
|
|
18
|
+
setIsSubmitting(true);
|
|
19
|
+
const result = await addInjectedSkill({
|
|
20
|
+
name: skill.name,
|
|
21
|
+
type: 'local',
|
|
22
|
+
source: `.claude/skills/${skill.name}`,
|
|
23
|
+
});
|
|
24
|
+
setIsSubmitting(false);
|
|
25
|
+
if (!result.success) {
|
|
26
|
+
toast.error(result.error ?? 'Failed to add skill');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
toast.success(`Added "${skill.name}" to feature skills`);
|
|
30
|
+
onAdded();
|
|
31
|
+
};
|
|
32
|
+
const handleAddRemote = async () => {
|
|
33
|
+
if (!remoteName.trim() || !remoteSource.trim()) {
|
|
34
|
+
toast.error('Name and source are required');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
setIsSubmitting(true);
|
|
38
|
+
const result = await addInjectedSkill({
|
|
39
|
+
name: remoteName.trim(),
|
|
40
|
+
type: 'remote',
|
|
41
|
+
source: remoteSource.trim(),
|
|
42
|
+
...(remoteSkillName.trim() && { remoteSkillName: remoteSkillName.trim() }),
|
|
43
|
+
});
|
|
44
|
+
setIsSubmitting(false);
|
|
45
|
+
if (!result.success) {
|
|
46
|
+
toast.error(result.error ?? 'Failed to add skill');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
toast.success(`Added "${remoteName.trim()}" to feature skills`);
|
|
50
|
+
setRemoteName('');
|
|
51
|
+
setRemoteSource('');
|
|
52
|
+
setRemoteSkillName('');
|
|
53
|
+
onAdded();
|
|
54
|
+
};
|
|
55
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "sm:max-w-md", "data-testid": "add-skill-dialog", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Add Skill to Features" }) }), _jsxs(Tabs, { defaultValue: "local", children: [_jsxs(TabsList, { className: "w-full", children: [_jsx(TabsTrigger, { value: "local", className: "flex-1", children: "Local" }), _jsx(TabsTrigger, { value: "remote", className: "flex-1", children: "Remote" })] }), _jsx(TabsContent, { value: "local", className: "mt-4", children: availableSkills.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "All discovered skills are already configured." })) : (_jsx("div", { className: "flex max-h-60 flex-col gap-2 overflow-y-auto", children: availableSkills.map((skill) => (_jsxs("button", { type: "button", className: "hover:bg-accent flex flex-col gap-0.5 rounded-md border p-3 text-left transition-colors", onClick: () => handleAddLocal(skill), disabled: isSubmitting, "data-testid": `add-local-skill-${skill.name}`, children: [_jsx("span", { className: "text-sm font-medium", children: skill.displayName }), _jsx("span", { className: "text-muted-foreground line-clamp-1 text-xs", children: skill.description })] }, skill.name))) })) }), _jsx(TabsContent, { value: "remote", className: "mt-4", children: _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "remote-name", children: "Name" }), _jsx(Input, { id: "remote-name", placeholder: "e.g. remotion-best-practices", value: remoteName, onChange: (e) => setRemoteName(e.target.value), "data-testid": "remote-skill-name" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "remote-source", children: "Source (npm package or URL)" }), _jsx(Input, { id: "remote-source", placeholder: "e.g. @anthropic/remotion-skills", value: remoteSource, onChange: (e) => setRemoteSource(e.target.value), "data-testid": "remote-skill-source" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "remote-skill-name", children: "Skill Name (optional)" }), _jsx(Input, { id: "remote-skill-name", placeholder: "e.g. remotion-best-practices", value: remoteSkillName, onChange: (e) => setRemoteSkillName(e.target.value), "data-testid": "remote-skill-skill-name" })] }), _jsx(DialogFooter, { children: _jsx(Button, { onClick: handleAddRemote, disabled: isSubmitting || !remoteName.trim() || !remoteSource.trim(), "data-testid": "add-remote-skill-submit", children: "Add Remote Skill" }) })] }) })] })] }) }));
|
|
56
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
import { AddSkillDialog } from './add-skill-dialog.js';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof AddSkillDialog;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj<typeof meta>;
|
|
13
|
+
export declare const Default: Story;
|
|
14
|
+
export declare const SomeAlreadyConfigured: Story;
|
|
15
|
+
export declare const AllConfigured: Story;
|
|
16
|
+
//# sourceMappingURL=add-skill-dialog.stories.d.ts.map
|
package/dist/src/presentation/web/components/features/skills/add-skill-dialog.stories.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-skill-dialog.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/add-skill-dialog.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,QAAA,MAAM,IAAI;;;;;;;CAO6B,CAAC;AAExC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAgCnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAQnC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { AddSkillDialog } from './add-skill-dialog.js';
|
|
2
|
+
const meta = {
|
|
3
|
+
title: 'Features/Skills/AddSkillDialog',
|
|
4
|
+
component: AddSkillDialog,
|
|
5
|
+
tags: ['autodocs'],
|
|
6
|
+
parameters: {
|
|
7
|
+
layout: 'centered',
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
export default meta;
|
|
11
|
+
const sampleDiscoveredSkills = [
|
|
12
|
+
{
|
|
13
|
+
name: 'architecture-reviewer',
|
|
14
|
+
displayName: 'architecture-reviewer',
|
|
15
|
+
description: 'Review architecture decisions against Clean Architecture principles',
|
|
16
|
+
category: 'Analysis',
|
|
17
|
+
source: 'project',
|
|
18
|
+
body: '',
|
|
19
|
+
resources: [],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'cross-validate-artifacts',
|
|
23
|
+
displayName: 'cross-validate-artifacts',
|
|
24
|
+
description: 'Cross-validate documentation and artifacts across the codebase',
|
|
25
|
+
category: 'Analysis',
|
|
26
|
+
source: 'project',
|
|
27
|
+
body: '',
|
|
28
|
+
resources: [],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'tsp-model',
|
|
32
|
+
displayName: 'tsp-model',
|
|
33
|
+
description: 'Create and modify TypeSpec domain models',
|
|
34
|
+
category: 'Code Generation',
|
|
35
|
+
source: 'project',
|
|
36
|
+
body: '',
|
|
37
|
+
resources: [],
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
export const Default = {
|
|
41
|
+
args: {
|
|
42
|
+
open: true,
|
|
43
|
+
onOpenChange: () => undefined,
|
|
44
|
+
onAdded: () => undefined,
|
|
45
|
+
discoveredSkills: sampleDiscoveredSkills,
|
|
46
|
+
existingSkillNames: [],
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
export const SomeAlreadyConfigured = {
|
|
50
|
+
args: {
|
|
51
|
+
open: true,
|
|
52
|
+
onOpenChange: () => undefined,
|
|
53
|
+
onAdded: () => undefined,
|
|
54
|
+
discoveredSkills: sampleDiscoveredSkills,
|
|
55
|
+
existingSkillNames: ['architecture-reviewer'],
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
export const AllConfigured = {
|
|
59
|
+
args: {
|
|
60
|
+
open: true,
|
|
61
|
+
onOpenChange: () => undefined,
|
|
62
|
+
onAdded: () => undefined,
|
|
63
|
+
discoveredSkills: sampleDiscoveredSkills,
|
|
64
|
+
existingSkillNames: ['architecture-reviewer', 'cross-validate-artifacts', 'tsp-model'],
|
|
65
|
+
},
|
|
66
|
+
};
|
package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SkillInjectionConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
import type { SkillData } from '../../../lib/skills.js';
|
|
3
|
+
export interface AutoInjectedSkillsSectionProps {
|
|
4
|
+
config: SkillInjectionConfig;
|
|
5
|
+
discoveredSkills: SkillData[];
|
|
6
|
+
}
|
|
7
|
+
export declare function AutoInjectedSkillsSection({ config, discoveredSkills, }: AutoInjectedSkillsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=auto-injected-skills-section.d.ts.map
|
package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-injected-skills-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/auto-injected-skills-section.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAe,MAAM,sCAAsC,CAAC;AAM9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,oBAAoB,CAAC;IAC7B,gBAAgB,EAAE,SAAS,EAAE,CAAC;CAC/B;AAED,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,gBAAgB,GACjB,EAAE,8BAA8B,2CA2EhC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo, useState } from 'react';
|
|
4
|
+
import { useRouter } from 'next/navigation';
|
|
5
|
+
import { Plus, X } from 'lucide-react';
|
|
6
|
+
import { toast } from 'sonner';
|
|
7
|
+
import { Badge } from '../../ui/badge.js';
|
|
8
|
+
import { Button } from '../../ui/button.js';
|
|
9
|
+
import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
|
|
10
|
+
import { removeInjectedSkill } from '../../../app/actions/remove-injected-skill.js';
|
|
11
|
+
import { AddSkillDialog } from './add-skill-dialog.js';
|
|
12
|
+
export function AutoInjectedSkillsSection({ config, discoveredSkills, }) {
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
const [addDialogOpen, setAddDialogOpen] = useState(false);
|
|
15
|
+
const [removingSkill, setRemovingSkill] = useState(null);
|
|
16
|
+
const skillDescriptions = useMemo(() => {
|
|
17
|
+
const map = new Map();
|
|
18
|
+
for (const s of discoveredSkills) {
|
|
19
|
+
map.set(s.name, s.description);
|
|
20
|
+
}
|
|
21
|
+
return map;
|
|
22
|
+
}, [discoveredSkills]);
|
|
23
|
+
const handleRemove = async (skillName) => {
|
|
24
|
+
setRemovingSkill(skillName);
|
|
25
|
+
const result = await removeInjectedSkill(skillName);
|
|
26
|
+
setRemovingSkill(null);
|
|
27
|
+
if (!result.success) {
|
|
28
|
+
toast.error(result.error ?? 'Failed to remove skill');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
toast.success(`Removed "${skillName}" from feature skills`);
|
|
32
|
+
router.refresh();
|
|
33
|
+
};
|
|
34
|
+
const handleAdded = () => {
|
|
35
|
+
setAddDialogOpen(false);
|
|
36
|
+
router.refresh();
|
|
37
|
+
};
|
|
38
|
+
return (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-base font-semibold", children: "Feature Skills" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Curated skills included in new feature worktrees to guide the agent" })] }), config.skills.length > 0 ? (_jsx("div", { className: "grid gap-2 sm:grid-cols-2 lg:grid-cols-3", children: config.skills.map((skill) => (_jsx(InjectedSkillCard, { skill: skill, description: skillDescriptions.get(skill.name), onRemove: () => handleRemove(skill.name), isRemoving: removingSkill === skill.name }, skill.name))) })) : (_jsx("p", { className: "text-muted-foreground text-sm", children: "No skills configured. Add skills to guide the agent when working on new features." })), _jsx("div", { children: _jsxs(Button, { variant: "outline", size: "sm", onClick: () => setAddDialogOpen(true), "data-testid": "add-injected-skill-button", children: [_jsx(Plus, { className: "mr-1.5 size-4" }), "Add Skill"] }) }), _jsx(AddSkillDialog, { open: addDialogOpen, onOpenChange: setAddDialogOpen, onAdded: handleAdded, discoveredSkills: discoveredSkills, existingSkillNames: config.skills.map((s) => s.name) })] }));
|
|
39
|
+
}
|
|
40
|
+
function InjectedSkillCard({ skill, description, onRemove, isRemoving, }) {
|
|
41
|
+
return (_jsxs(Card, { "data-testid": `injected-skill-${skill.name}`, children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-2 pb-2", children: [_jsx("div", { className: "min-w-0", children: _jsx(CardTitle, { className: "truncate text-sm", children: skill.name }) }), _jsx(Button, { variant: "ghost", size: "icon-sm", className: "shrink-0", onClick: onRemove, disabled: isRemoving, "aria-label": `Remove ${skill.name}`, "data-testid": `remove-injected-skill-${skill.name}`, children: _jsx(X, { className: "size-4" }) })] }), _jsxs(CardContent, { className: "space-y-2 pt-0", children: [description ? (_jsx("p", { className: "text-muted-foreground line-clamp-2 text-xs", children: description })) : null, _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Badge, { variant: skill.type === 'local' ? 'secondary' : 'outline', className: "text-xs", children: skill.type === 'local' ? 'Local' : 'Remote' }), _jsx("span", { className: "text-muted-foreground max-w-37.5 truncate text-xs", children: skill.source })] })] })] }));
|
|
42
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
import { AutoInjectedSkillsSection } from './auto-injected-skills-section.js';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof AutoInjectedSkillsSection;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj<typeof meta>;
|
|
13
|
+
export declare const Default: Story;
|
|
14
|
+
export declare const SingleSkill: Story;
|
|
15
|
+
export declare const EmptySkills: Story;
|
|
16
|
+
//# sourceMappingURL=auto-injected-skills-section.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-injected-skills-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/auto-injected-skills-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,QAAA,MAAM,IAAI;;;;;;;CAOwC,CAAC;AAEnD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAyCnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAQzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC"}
|
package/dist/src/presentation/web/components/features/skills/auto-injected-skills-section.stories.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SkillSourceType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
import { AutoInjectedSkillsSection } from './auto-injected-skills-section.js';
|
|
3
|
+
const meta = {
|
|
4
|
+
title: 'Features/Skills/AutoInjectedSkillsSection',
|
|
5
|
+
component: AutoInjectedSkillsSection,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: 'padded',
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
export default meta;
|
|
12
|
+
const sampleConfig = {
|
|
13
|
+
enabled: true,
|
|
14
|
+
skills: [
|
|
15
|
+
{
|
|
16
|
+
name: 'architecture-reviewer',
|
|
17
|
+
type: SkillSourceType.Local,
|
|
18
|
+
source: '.claude/skills/architecture-reviewer',
|
|
19
|
+
},
|
|
20
|
+
{ name: 'tsp-model', type: SkillSourceType.Local, source: '.claude/skills/tsp-model' },
|
|
21
|
+
{
|
|
22
|
+
name: 'remotion-best-practices',
|
|
23
|
+
type: SkillSourceType.Remote,
|
|
24
|
+
source: '@anthropic/remotion-skills',
|
|
25
|
+
remoteSkillName: 'remotion-best-practices',
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
const sampleDiscoveredSkills = [
|
|
30
|
+
{
|
|
31
|
+
name: 'architecture-reviewer',
|
|
32
|
+
displayName: 'architecture-reviewer',
|
|
33
|
+
description: 'Review architecture decisions against Clean Architecture principles',
|
|
34
|
+
category: 'Analysis',
|
|
35
|
+
source: 'project',
|
|
36
|
+
body: '',
|
|
37
|
+
resources: [],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'cross-validate-artifacts',
|
|
41
|
+
displayName: 'cross-validate-artifacts',
|
|
42
|
+
description: 'Cross-validate documentation and artifacts across the codebase',
|
|
43
|
+
category: 'Analysis',
|
|
44
|
+
source: 'project',
|
|
45
|
+
body: '',
|
|
46
|
+
resources: [],
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
export const Default = {
|
|
50
|
+
args: {
|
|
51
|
+
config: sampleConfig,
|
|
52
|
+
discoveredSkills: sampleDiscoveredSkills,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export const SingleSkill = {
|
|
56
|
+
args: {
|
|
57
|
+
config: {
|
|
58
|
+
enabled: true,
|
|
59
|
+
skills: [sampleConfig.skills[0]],
|
|
60
|
+
},
|
|
61
|
+
discoveredSkills: sampleDiscoveredSkills,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
export const EmptySkills = {
|
|
65
|
+
args: {
|
|
66
|
+
config: { enabled: true, skills: [] },
|
|
67
|
+
discoveredSkills: sampleDiscoveredSkills,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { SkillInjectionConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
1
2
|
import type { SkillData } from '../../../lib/skills.js';
|
|
2
3
|
export interface SkillsPageClientProps {
|
|
3
4
|
skills: SkillData[];
|
|
5
|
+
injectionConfig: SkillInjectionConfig;
|
|
4
6
|
}
|
|
5
|
-
export declare function SkillsPageClient({ skills }: SkillsPageClientProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function SkillsPageClient({ skills, injectionConfig }: SkillsPageClientProps): import("react/jsx-runtime").JSX.Element;
|
|
6
8
|
//# sourceMappingURL=skills-page-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"skills-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,eAAe,EAAE,oBAAoB,CAAC;CACvC;AAeD,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,qBAAqB,2CAuFlF"}
|
|
@@ -9,6 +9,8 @@ import { EmptyState } from '../../common/empty-state/index.js';
|
|
|
9
9
|
import { SkillList } from './skill-list.js';
|
|
10
10
|
import { CategoryFilter } from './category-filter.js';
|
|
11
11
|
import { SkillDetailDrawer } from './skill-detail-drawer.js';
|
|
12
|
+
import { Separator } from '../../ui/separator.js';
|
|
13
|
+
import { AutoInjectedSkillsSection } from './auto-injected-skills-section.js';
|
|
12
14
|
function computeCategoryCounts(skills) {
|
|
13
15
|
const counts = {
|
|
14
16
|
Workflow: 0,
|
|
@@ -21,7 +23,7 @@ function computeCategoryCounts(skills) {
|
|
|
21
23
|
}
|
|
22
24
|
return counts;
|
|
23
25
|
}
|
|
24
|
-
export function SkillsPageClient({ skills }) {
|
|
26
|
+
export function SkillsPageClient({ skills, injectionConfig }) {
|
|
25
27
|
const [searchQuery, setSearchQuery] = useState('');
|
|
26
28
|
const [activeCategory, setActiveCategory] = useState(null);
|
|
27
29
|
const [selectedSkill, setSelectedSkill] = useState(null);
|
|
@@ -46,7 +48,7 @@ export function SkillsPageClient({ skills }) {
|
|
|
46
48
|
};
|
|
47
49
|
// No skills installed at all
|
|
48
50
|
if (skills.length === 0) {
|
|
49
|
-
return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(PageHeader, { title: "Skills", description: "Claude Code skills
|
|
51
|
+
return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(PageHeader, { title: "Skills", description: "Claude Code skills available to this project" }), _jsx(AutoInjectedSkillsSection, { config: injectionConfig, discoveredSkills: skills }), _jsx(Separator, {}), _jsx(EmptyState, { icon: _jsx(Puzzle, { className: "size-10" }), title: "No skills found", description: "No Claude Code skills are installed. Add skills to .claude/skills/ to get started." })] }));
|
|
50
52
|
}
|
|
51
|
-
return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(PageHeader, { title: "Skills", description: "Claude Code skills
|
|
53
|
+
return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(PageHeader, { title: "Skills", description: "Claude Code skills available to this project" }), _jsx(AutoInjectedSkillsSection, { config: injectionConfig, discoveredSkills: skills }), _jsx(Separator, {}), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2" }), _jsx(Input, { placeholder: "Search skills...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "ps-9" })] }), _jsx(CategoryFilter, { activeCategory: activeCategory, onCategoryChange: setActiveCategory, counts: categoryCounts }), filteredSkills.length > 0 ? (_jsx(SkillList, { skills: filteredSkills, onSkillSelect: setSelectedSkill })) : (_jsx(EmptyState, { icon: _jsx(Search, { className: "size-10" }), title: "No matching skills", description: "No skills match your current search and filter criteria.", action: _jsx(Button, { variant: "outline", onClick: clearFilters, children: "Clear filters" }) })), _jsx(SkillDetailDrawer, { skill: selectedSkill, onClose: () => setSelectedSkill(null) })] }));
|
|
52
54
|
}
|
package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"skills-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAKxD,QAAA,MAAM,IAAI;;;;;;;CAO+B,CAAC;AAE1C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAwKnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAqBhC,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { SkillSourceType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
1
2
|
import { SkillsPageClient } from './skills-page-client.js';
|
|
3
|
+
const emptyInjectionConfig = { enabled: false, skills: [] };
|
|
2
4
|
const meta = {
|
|
3
5
|
title: 'Features/SkillsPageClient',
|
|
4
6
|
component: SkillsPageClient,
|
|
@@ -172,15 +174,40 @@ const manySkills = [
|
|
|
172
174
|
export const Default = {
|
|
173
175
|
args: {
|
|
174
176
|
skills: sampleSkills,
|
|
177
|
+
injectionConfig: emptyInjectionConfig,
|
|
175
178
|
},
|
|
176
179
|
};
|
|
177
180
|
export const Empty = {
|
|
178
181
|
args: {
|
|
179
182
|
skills: [],
|
|
183
|
+
injectionConfig: emptyInjectionConfig,
|
|
180
184
|
},
|
|
181
185
|
};
|
|
182
186
|
export const ManySkills = {
|
|
183
187
|
args: {
|
|
184
188
|
skills: manySkills,
|
|
189
|
+
injectionConfig: emptyInjectionConfig,
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
export const WithInjectedSkills = {
|
|
193
|
+
args: {
|
|
194
|
+
skills: sampleSkills,
|
|
195
|
+
injectionConfig: {
|
|
196
|
+
enabled: true,
|
|
197
|
+
skills: [
|
|
198
|
+
{
|
|
199
|
+
name: 'architecture-reviewer',
|
|
200
|
+
type: SkillSourceType.Local,
|
|
201
|
+
source: '.claude/skills/architecture-reviewer',
|
|
202
|
+
},
|
|
203
|
+
{ name: 'tsp-model', type: SkillSourceType.Local, source: '.claude/skills/tsp-model' },
|
|
204
|
+
{
|
|
205
|
+
name: 'remotion-best-practices',
|
|
206
|
+
type: SkillSourceType.Remote,
|
|
207
|
+
source: '@anthropic/remotion-skills',
|
|
208
|
+
remoteSkillName: 'remotion-best-practices',
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
},
|
|
185
212
|
},
|
|
186
213
|
};
|