prjct-cli 0.11.5 → 0.12.1
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/CHANGELOG.md +58 -0
- package/README.md +81 -25
- package/bin/dev.js +1 -1
- package/bin/generate-views.js +209 -0
- package/bin/migrate-to-json.js +742 -0
- package/bin/prjct +5 -5
- package/bin/serve.js +226 -50
- package/core/__tests__/agentic/{memory-system.test.js → memory-system.test.ts} +12 -23
- package/core/__tests__/agentic/{plan-mode.test.js → plan-mode.test.ts} +26 -24
- package/core/__tests__/agentic/{prompt-builder.test.js → prompt-builder.test.ts} +3 -8
- package/core/__tests__/utils/{date-helper.test.js → date-helper.test.ts} +19 -30
- package/core/__tests__/utils/{output.test.js → output.test.ts} +12 -24
- package/core/agentic/agent-router.ts +137 -0
- package/core/agentic/chain-of-thought.ts +228 -0
- package/core/agentic/command-executor/command-executor.ts +384 -0
- package/core/agentic/command-executor/index.ts +16 -0
- package/core/agentic/command-executor/status-signal.ts +38 -0
- package/core/agentic/command-executor/types.ts +79 -0
- package/core/agentic/command-executor.ts +8 -0
- package/core/agentic/{context-builder.js → context-builder.ts} +92 -81
- package/core/agentic/context-filter.ts +365 -0
- package/core/agentic/ground-truth/index.ts +76 -0
- package/core/agentic/ground-truth/types.ts +33 -0
- package/core/agentic/ground-truth/utils.ts +48 -0
- package/core/agentic/ground-truth/verifiers/analyze.ts +54 -0
- package/core/agentic/ground-truth/verifiers/done.ts +75 -0
- package/core/agentic/ground-truth/verifiers/feature.ts +70 -0
- package/core/agentic/ground-truth/verifiers/index.ts +37 -0
- package/core/agentic/ground-truth/verifiers/init.ts +52 -0
- package/core/agentic/ground-truth/verifiers/now.ts +57 -0
- package/core/agentic/ground-truth/verifiers/ship.ts +85 -0
- package/core/agentic/ground-truth/verifiers/spec.ts +45 -0
- package/core/agentic/ground-truth/verifiers/sync.ts +47 -0
- package/core/agentic/ground-truth/verifiers.ts +6 -0
- package/core/agentic/ground-truth.ts +8 -0
- package/core/agentic/loop-detector/error-analysis.ts +97 -0
- package/core/agentic/loop-detector/hallucination.ts +71 -0
- package/core/agentic/loop-detector/index.ts +41 -0
- package/core/agentic/loop-detector/loop-detector.ts +222 -0
- package/core/agentic/loop-detector/types.ts +66 -0
- package/core/agentic/loop-detector.ts +8 -0
- package/core/agentic/memory-system/history.ts +53 -0
- package/core/agentic/memory-system/index.ts +192 -0
- package/core/agentic/memory-system/patterns.ts +156 -0
- package/core/agentic/memory-system/semantic-memories.ts +277 -0
- package/core/agentic/memory-system/session.ts +21 -0
- package/core/agentic/memory-system/types.ts +159 -0
- package/core/agentic/memory-system.ts +8 -0
- package/core/agentic/parallel-tools.ts +165 -0
- package/core/agentic/plan-mode/approval.ts +57 -0
- package/core/agentic/plan-mode/constants.ts +44 -0
- package/core/agentic/plan-mode/index.ts +28 -0
- package/core/agentic/plan-mode/plan-mode.ts +406 -0
- package/core/agentic/plan-mode/types.ts +193 -0
- package/core/agentic/plan-mode.ts +8 -0
- package/core/agentic/prompt-builder.ts +566 -0
- package/core/agentic/response-templates.ts +164 -0
- package/core/agentic/semantic-compression.ts +273 -0
- package/core/agentic/services.ts +206 -0
- package/core/agentic/smart-context.ts +476 -0
- package/core/agentic/{template-loader.js → template-loader.ts} +27 -16
- package/core/agentic/think-blocks.ts +202 -0
- package/core/agentic/tool-registry.ts +119 -0
- package/core/agentic/validation-rules.ts +313 -0
- package/core/agents/index.ts +28 -0
- package/core/agents/performance.ts +444 -0
- package/core/agents/types.ts +126 -0
- package/core/bus/{index.js → index.ts} +57 -61
- package/core/command-registry/categories.ts +23 -0
- package/core/command-registry/commands.ts +15 -0
- package/core/command-registry/core-commands.ts +319 -0
- package/core/command-registry/index.ts +158 -0
- package/core/command-registry/optional-commands.ts +119 -0
- package/core/command-registry/setup-commands.ts +53 -0
- package/core/command-registry/types.ts +59 -0
- package/core/command-registry.ts +9 -0
- package/core/commands/analysis.ts +298 -0
- package/core/commands/analytics.ts +288 -0
- package/core/commands/base.ts +273 -0
- package/core/commands/index.ts +211 -0
- package/core/commands/maintenance.ts +226 -0
- package/core/commands/planning.ts +311 -0
- package/core/commands/setup.ts +309 -0
- package/core/commands/shipping.ts +188 -0
- package/core/commands/types.ts +183 -0
- package/core/commands/workflow.ts +226 -0
- package/core/commands.ts +11 -0
- package/core/constants/formats.ts +187 -0
- package/core/constants/index.ts +7 -0
- package/core/{context-sync.js → context-sync.ts} +59 -26
- package/core/data/agents-manager.ts +76 -0
- package/core/data/analysis-manager.ts +83 -0
- package/core/data/base-manager.ts +156 -0
- package/core/data/ideas-manager.ts +81 -0
- package/core/data/index.ts +32 -0
- package/core/data/outcomes-manager.ts +96 -0
- package/core/data/project-manager.ts +75 -0
- package/core/data/roadmap-manager.ts +118 -0
- package/core/data/shipped-manager.ts +65 -0
- package/core/data/state-manager.ts +214 -0
- package/core/domain/{agent-generator.js → agent-generator.ts} +77 -57
- package/core/domain/{agent-loader.js → agent-loader.ts} +65 -56
- package/core/domain/{agent-matcher.js → agent-matcher.ts} +51 -24
- package/core/domain/{agent-validator.js → agent-validator.ts} +70 -37
- package/core/domain/{analyzer.js → analyzer.ts} +91 -85
- package/core/domain/{architect-session.js → architect-session.ts} +49 -34
- package/core/domain/{architecture-generator.js → architecture-generator.ts} +25 -13
- package/core/domain/{context-estimator.js → context-estimator.ts} +57 -36
- package/core/domain/{product-standards.js → product-standards.ts} +40 -26
- package/core/domain/{smart-cache.js → smart-cache.ts} +39 -30
- package/core/domain/{snapshot-manager.js → snapshot-manager.ts} +103 -100
- package/core/domain/{task-analyzer.js → task-analyzer.ts} +82 -43
- package/core/domain/task-stack/index.ts +19 -0
- package/core/domain/task-stack/parser.ts +86 -0
- package/core/domain/task-stack/storage.ts +123 -0
- package/core/domain/task-stack/task-stack.ts +340 -0
- package/core/domain/task-stack/types.ts +51 -0
- package/core/domain/task-stack.ts +8 -0
- package/core/{index.js → index.ts} +61 -18
- package/core/infrastructure/{agent-detector.js → agent-detector.ts} +55 -19
- package/core/infrastructure/agents/{claude-agent.js → claude-agent.ts} +61 -21
- package/core/infrastructure/{author-detector.js → author-detector.ts} +42 -49
- package/core/infrastructure/{capability-installer.js → capability-installer.ts} +51 -27
- package/core/infrastructure/{command-installer.js → command-installer/command-installer.ts} +43 -144
- package/core/infrastructure/command-installer/global-config.ts +106 -0
- package/core/infrastructure/command-installer/index.ts +25 -0
- package/core/infrastructure/command-installer/types.ts +41 -0
- package/core/infrastructure/command-installer.ts +8 -0
- package/core/infrastructure/{config-manager.js → config-manager.ts} +60 -80
- package/core/infrastructure/{editors-config.js → editors-config.ts} +33 -31
- package/core/infrastructure/legacy-installer-detector/cleanup.ts +216 -0
- package/core/infrastructure/legacy-installer-detector/detection.ts +95 -0
- package/core/infrastructure/legacy-installer-detector/index.ts +171 -0
- package/core/infrastructure/legacy-installer-detector/migration.ts +87 -0
- package/core/infrastructure/legacy-installer-detector/types.ts +42 -0
- package/core/infrastructure/legacy-installer-detector.ts +7 -0
- package/core/infrastructure/migrator/file-operations.ts +125 -0
- package/core/infrastructure/migrator/index.ts +288 -0
- package/core/infrastructure/migrator/project-scanner.ts +89 -0
- package/core/infrastructure/migrator/reports.ts +117 -0
- package/core/infrastructure/migrator/types.ts +124 -0
- package/core/infrastructure/migrator/validation.ts +94 -0
- package/core/infrastructure/migrator/version-migration.ts +117 -0
- package/core/infrastructure/migrator.ts +10 -0
- package/core/infrastructure/{path-manager.js → path-manager.ts} +51 -91
- package/core/infrastructure/session-manager/index.ts +23 -0
- package/core/infrastructure/session-manager/migration.ts +88 -0
- package/core/infrastructure/session-manager/session-manager.ts +307 -0
- package/core/infrastructure/session-manager/types.ts +45 -0
- package/core/infrastructure/session-manager.ts +8 -0
- package/core/infrastructure/{setup.js → setup.ts} +29 -21
- package/core/infrastructure/{update-checker.js → update-checker.ts} +40 -18
- package/core/outcomes/analyzer.ts +333 -0
- package/core/outcomes/index.ts +34 -0
- package/core/outcomes/recorder.ts +194 -0
- package/core/outcomes/types.ts +145 -0
- package/core/plugin/{hooks.js → hooks.ts} +56 -58
- package/core/plugin/{index.js → index.ts} +19 -8
- package/core/plugin/{loader.js → loader.ts} +87 -69
- package/core/plugin/{registry.js → registry.ts} +49 -45
- package/core/plugins/{webhook.js → webhook.ts} +43 -27
- package/core/schemas/agents.ts +27 -0
- package/core/schemas/analysis.ts +41 -0
- package/core/schemas/ideas.ts +83 -0
- package/core/schemas/index.ts +73 -0
- package/core/schemas/outcomes.ts +22 -0
- package/core/schemas/project.ts +26 -0
- package/core/schemas/roadmap.ts +90 -0
- package/core/schemas/shipped.ts +82 -0
- package/core/schemas/state.ts +107 -0
- package/core/session/index.ts +17 -0
- package/core/session/{metrics.js → metrics.ts} +64 -46
- package/core/session/{index.js → session-manager.ts} +51 -117
- package/core/session/types.ts +29 -0
- package/core/session/utils.ts +57 -0
- package/core/state/index.ts +25 -0
- package/core/state/manager.ts +376 -0
- package/core/state/types.ts +185 -0
- package/core/tsconfig.json +22 -0
- package/core/types/index.ts +506 -0
- package/core/utils/{animations.js → animations.ts} +74 -28
- package/core/utils/{branding.js → branding.ts} +29 -4
- package/core/utils/{date-helper.js → date-helper.ts} +31 -74
- package/core/utils/file-helper.ts +262 -0
- package/core/utils/{jsonl-helper.js → jsonl-helper.ts} +71 -107
- package/core/utils/{logger.js → logger.ts} +24 -12
- package/core/utils/{output.js → output.ts} +25 -13
- package/core/utils/{project-capabilities.js → project-capabilities.ts} +31 -18
- package/core/utils/{session-helper.js → session-helper.ts} +79 -66
- package/core/utils/{version.js → version.ts} +23 -31
- package/core/view-generator.ts +536 -0
- package/package.json +23 -17
- package/packages/shared/.turbo/turbo-build.log +14 -0
- package/packages/shared/dist/index.d.ts +8 -613
- package/packages/shared/dist/index.d.ts.map +1 -0
- package/packages/shared/dist/index.js +4110 -118
- package/packages/shared/dist/schemas.d.ts +408 -0
- package/packages/shared/dist/schemas.d.ts.map +1 -0
- package/packages/shared/dist/types.d.ts +144 -0
- package/packages/shared/dist/types.d.ts.map +1 -0
- package/packages/shared/dist/unified.d.ts +139 -0
- package/packages/shared/dist/unified.d.ts.map +1 -0
- package/packages/shared/dist/utils.d.ts +60 -0
- package/packages/shared/dist/utils.d.ts.map +1 -0
- package/packages/shared/package.json +4 -4
- package/packages/shared/src/index.ts +1 -0
- package/packages/shared/src/unified.ts +174 -0
- package/packages/web/app/api/claude/sessions/route.ts +1 -1
- package/packages/web/app/api/claude/status/route.ts +1 -1
- package/packages/web/app/api/migrate/route.ts +46 -0
- package/packages/web/app/api/projects/[id]/route.ts +1 -1
- package/packages/web/app/api/projects/[id]/stats/route.ts +30 -2
- package/packages/web/app/api/projects/[id]/status/route.ts +1 -1
- package/packages/web/app/api/projects/route.ts +1 -1
- package/packages/web/app/api/settings/route.ts +97 -0
- package/packages/web/app/api/v2/projects/[id]/unified/route.ts +57 -0
- package/packages/web/app/globals.css +38 -0
- package/packages/web/app/layout.tsx +10 -2
- package/packages/web/app/page.tsx +9 -224
- package/packages/web/app/project/[id]/page.tsx +191 -63
- package/packages/web/app/project/[id]/stats/loading.tsx +43 -0
- package/packages/web/app/project/[id]/stats/page.tsx +204 -163
- package/packages/web/app/settings/page.tsx +222 -2
- package/packages/web/components/ActivityTimeline/ActivityTimeline.constants.ts +2 -0
- package/packages/web/components/ActivityTimeline/ActivityTimeline.tsx +50 -0
- package/packages/web/components/ActivityTimeline/ActivityTimeline.types.ts +8 -0
- package/packages/web/components/ActivityTimeline/hooks/index.ts +2 -0
- package/packages/web/components/ActivityTimeline/hooks/useExpandable.ts +9 -0
- package/packages/web/components/ActivityTimeline/hooks/useGroupedEvents.ts +23 -0
- package/packages/web/components/ActivityTimeline/index.ts +2 -0
- package/packages/web/components/AgentsCard/AgentsCard.tsx +63 -0
- package/packages/web/components/AgentsCard/AgentsCard.types.ts +13 -0
- package/packages/web/components/AgentsCard/index.ts +2 -0
- package/packages/web/components/AppSidebar/AppSidebar.tsx +190 -0
- package/packages/web/components/AppSidebar/index.ts +1 -0
- package/packages/web/components/BackLink/BackLink.tsx +18 -0
- package/packages/web/components/BackLink/BackLink.types.ts +5 -0
- package/packages/web/components/BackLink/index.ts +2 -0
- package/packages/web/components/BentoCard/BentoCard.constants.ts +16 -0
- package/packages/web/components/BentoCard/BentoCard.tsx +47 -0
- package/packages/web/components/BentoCard/BentoCard.types.ts +15 -0
- package/packages/web/components/BentoCard/index.ts +2 -0
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.constants.ts +9 -0
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.tsx +18 -0
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.types.ts +5 -0
- package/packages/web/components/BentoCardSkeleton/index.ts +2 -0
- package/packages/web/components/{stats → BentoGrid}/BentoGrid.tsx +4 -8
- package/packages/web/components/BentoGrid/BentoGrid.types.ts +4 -0
- package/packages/web/components/BentoGrid/index.ts +2 -0
- package/packages/web/components/CommandButton/index.ts +1 -0
- package/packages/web/components/ConnectionStatus/index.ts +1 -0
- package/packages/web/components/DashboardContent/DashboardContent.tsx +254 -0
- package/packages/web/components/DashboardContent/index.ts +1 -0
- package/packages/web/components/DateGroup/DateGroup.tsx +18 -0
- package/packages/web/components/DateGroup/DateGroup.types.ts +6 -0
- package/packages/web/components/DateGroup/DateGroup.utils.ts +11 -0
- package/packages/web/components/DateGroup/index.ts +2 -0
- package/packages/web/components/{stats → EmptyState}/EmptyState.tsx +1 -10
- package/packages/web/components/EmptyState/EmptyState.types.ts +10 -0
- package/packages/web/components/EmptyState/index.ts +2 -0
- package/packages/web/components/EventRow/EventRow.constants.ts +10 -0
- package/packages/web/components/EventRow/EventRow.tsx +49 -0
- package/packages/web/components/EventRow/EventRow.types.ts +7 -0
- package/packages/web/components/EventRow/EventRow.utils.ts +49 -0
- package/packages/web/components/EventRow/index.ts +2 -0
- package/packages/web/components/ExpandButton/ExpandButton.tsx +18 -0
- package/packages/web/components/ExpandButton/ExpandButton.types.ts +6 -0
- package/packages/web/components/ExpandButton/index.ts +2 -0
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.tsx +14 -0
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.types.ts +5 -0
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.utils.ts +13 -0
- package/packages/web/components/HealthGradientBackground/index.ts +2 -0
- package/packages/web/components/HeroSection/HeroSection.tsx +55 -0
- package/packages/web/components/HeroSection/HeroSection.types.ts +14 -0
- package/packages/web/components/HeroSection/HeroSection.utils.ts +7 -0
- package/packages/web/components/HeroSection/hooks/index.ts +2 -0
- package/packages/web/components/HeroSection/hooks/useCountUp.ts +45 -0
- package/packages/web/components/HeroSection/hooks/useWeeklyActivity.ts +18 -0
- package/packages/web/components/HeroSection/index.ts +2 -0
- package/packages/web/components/{stats → IdeasCard}/IdeasCard.tsx +3 -14
- package/packages/web/components/IdeasCard/IdeasCard.types.ts +9 -0
- package/packages/web/components/IdeasCard/index.ts +2 -0
- package/packages/web/components/InsightMessage/InsightMessage.tsx +9 -0
- package/packages/web/components/InsightMessage/InsightMessage.types.ts +3 -0
- package/packages/web/components/InsightMessage/index.ts +2 -0
- package/packages/web/components/Logo/index.ts +1 -0
- package/packages/web/components/MarkdownContent/index.ts +1 -0
- package/packages/web/components/NowCard/NowCard.tsx +93 -0
- package/packages/web/components/NowCard/NowCard.types.ts +15 -0
- package/packages/web/components/NowCard/index.ts +2 -0
- package/packages/web/components/ProgressRing/ProgressRing.constants.ts +20 -0
- package/packages/web/components/{stats → ProgressRing}/ProgressRing.tsx +4 -27
- package/packages/web/components/ProgressRing/ProgressRing.types.ts +11 -0
- package/packages/web/components/ProgressRing/index.ts +2 -0
- package/packages/web/components/ProjectAvatar/index.ts +1 -0
- package/packages/web/components/Providers/index.ts +1 -0
- package/packages/web/components/QueueCard/QueueCard.tsx +72 -0
- package/packages/web/components/QueueCard/QueueCard.types.ts +11 -0
- package/packages/web/components/QueueCard/QueueCard.utils.ts +12 -0
- package/packages/web/components/QueueCard/index.ts +2 -0
- package/packages/web/components/{stats → RoadmapCard}/RoadmapCard.tsx +3 -23
- package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +15 -0
- package/packages/web/components/RoadmapCard/index.ts +2 -0
- package/packages/web/components/{stats → ShipsCard}/ShipsCard.tsx +4 -22
- package/packages/web/components/ShipsCard/ShipsCard.types.ts +12 -0
- package/packages/web/components/ShipsCard/ShipsCard.utils.ts +4 -0
- package/packages/web/components/ShipsCard/index.ts +2 -0
- package/packages/web/components/{stats → SparklineChart}/SparklineChart.tsx +1 -7
- package/packages/web/components/SparklineChart/SparklineChart.types.ts +6 -0
- package/packages/web/components/SparklineChart/index.ts +2 -0
- package/packages/web/components/StreakCard/StreakCard.constants.ts +2 -0
- package/packages/web/components/{stats → StreakCard}/StreakCard.tsx +5 -11
- package/packages/web/components/StreakCard/StreakCard.types.ts +4 -0
- package/packages/web/components/StreakCard/index.ts +2 -0
- package/packages/web/components/TasksCounter/TasksCounter.tsx +14 -0
- package/packages/web/components/TasksCounter/TasksCounter.types.ts +3 -0
- package/packages/web/components/TasksCounter/index.ts +2 -0
- package/packages/web/components/TechStackBadges/index.ts +1 -0
- package/packages/web/components/{TerminalTab.tsx → TerminalTabs/TerminalTab.tsx} +11 -0
- package/packages/web/components/{TerminalTabs.tsx → TerminalTabs/TerminalTabs.tsx} +29 -28
- package/packages/web/components/TerminalTabs/index.ts +1 -0
- package/packages/web/components/VelocityBadge/VelocityBadge.tsx +27 -0
- package/packages/web/components/VelocityBadge/VelocityBadge.types.ts +3 -0
- package/packages/web/components/VelocityBadge/index.ts +2 -0
- package/packages/web/components/VelocityCard/VelocityCard.tsx +71 -0
- package/packages/web/components/VelocityCard/VelocityCard.types.ts +7 -0
- package/packages/web/components/VelocityCard/index.ts +2 -0
- package/packages/web/components/WeeklySparkline/WeeklySparkline.tsx +13 -0
- package/packages/web/components/WeeklySparkline/WeeklySparkline.types.ts +3 -0
- package/packages/web/components/WeeklySparkline/index.ts +2 -0
- package/packages/web/components/ui/input.tsx +21 -0
- package/packages/web/context/TerminalTabsContext.tsx +46 -1
- package/packages/web/hooks/useClaudeTerminal.ts +71 -21
- package/packages/web/hooks/useProjectStats.ts +55 -0
- package/packages/web/hooks/useProjects.ts +6 -6
- package/packages/web/lib/actions/projects.ts +15 -0
- package/packages/web/lib/json-loader.ts +630 -0
- package/packages/web/lib/services/index.ts +9 -0
- package/packages/web/lib/services/migration.server.ts +600 -0
- package/packages/web/lib/services/projects.server.ts +52 -0
- package/packages/web/lib/services/stats.server.ts +264 -0
- package/packages/web/lib/unified-loader.ts +396 -0
- package/packages/web/package.json +10 -7
- package/packages/web/server.ts +58 -8
- package/templates/commands/done.md +76 -32
- package/templates/commands/feature.md +121 -47
- package/templates/commands/idea.md +81 -8
- package/templates/commands/now.md +41 -17
- package/templates/commands/ship.md +64 -25
- package/templates/commands/sync.md +28 -3
- package/core/agentic/agent-router.js +0 -140
- package/core/agentic/chain-of-thought.js +0 -578
- package/core/agentic/command-executor.js +0 -417
- package/core/agentic/context-filter.js +0 -354
- package/core/agentic/ground-truth.js +0 -591
- package/core/agentic/loop-detector.js +0 -406
- package/core/agentic/memory-system.js +0 -845
- package/core/agentic/parallel-tools.js +0 -366
- package/core/agentic/plan-mode.js +0 -572
- package/core/agentic/prompt-builder.js +0 -352
- package/core/agentic/response-templates.js +0 -290
- package/core/agentic/semantic-compression.js +0 -517
- package/core/agentic/think-blocks.js +0 -657
- package/core/agentic/tool-registry.js +0 -184
- package/core/agentic/validation-rules.js +0 -380
- package/core/command-registry.js +0 -698
- package/core/commands.js +0 -2237
- package/core/domain/task-stack.js +0 -497
- package/core/infrastructure/legacy-installer-detector.js +0 -546
- package/core/infrastructure/migrator.js +0 -796
- package/core/infrastructure/session-manager.js +0 -390
- package/core/utils/file-helper.js +0 -329
- package/packages/web/app/api/projects/[id]/delete/route.ts +0 -21
- package/packages/web/app/api/stats/route.ts +0 -38
- package/packages/web/components/AppSidebar.tsx +0 -113
- package/packages/web/components/stats/ActivityTimeline.tsx +0 -201
- package/packages/web/components/stats/AgentsCard.tsx +0 -56
- package/packages/web/components/stats/BentoCard.tsx +0 -88
- package/packages/web/components/stats/HeroSection.tsx +0 -172
- package/packages/web/components/stats/NowCard.tsx +0 -71
- package/packages/web/components/stats/QueueCard.tsx +0 -58
- package/packages/web/components/stats/VelocityCard.tsx +0 -60
- package/packages/web/components/stats/index.ts +0 -17
- package/packages/web/hooks/useStats.ts +0 -28
- /package/packages/web/components/{CommandButton.tsx → CommandButton/CommandButton.tsx} +0 -0
- /package/packages/web/components/{ConnectionStatus.tsx → ConnectionStatus/ConnectionStatus.tsx} +0 -0
- /package/packages/web/components/{Logo.tsx → Logo/Logo.tsx} +0 -0
- /package/packages/web/components/{MarkdownContent.tsx → MarkdownContent/MarkdownContent.tsx} +0 -0
- /package/packages/web/components/{ProjectAvatar.tsx → ProjectAvatar/ProjectAvatar.tsx} +0 -0
- /package/packages/web/components/{providers.tsx → Providers/Providers.tsx} +0 -0
- /package/packages/web/components/{TechStackBadges.tsx → TechStackBadges/TechStackBadges.tsx} +0 -0
|
@@ -3,9 +3,43 @@
|
|
|
3
3
|
* Implements prjct commands for Claude Code environment
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import fs from 'fs/promises'
|
|
7
|
+
|
|
8
|
+
declare const global: typeof globalThis & {
|
|
9
|
+
mcp?: {
|
|
10
|
+
filesystem?: {
|
|
11
|
+
read: (path: string) => Promise<string>
|
|
12
|
+
write: (path: string, content: string) => Promise<void>
|
|
13
|
+
list: (path: string) => Promise<string[]>
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface RecapData {
|
|
19
|
+
currentTask?: string | null
|
|
20
|
+
shippedCount: number
|
|
21
|
+
queuedCount: number
|
|
22
|
+
ideasCount: number
|
|
23
|
+
recentActivity?: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface ProgressData {
|
|
27
|
+
period: string
|
|
28
|
+
count: number
|
|
29
|
+
velocity: number
|
|
30
|
+
previousVelocity: number
|
|
31
|
+
recentFeatures?: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface IntentResult {
|
|
35
|
+
intent: string
|
|
36
|
+
command: string | null
|
|
37
|
+
}
|
|
7
38
|
|
|
8
39
|
class ClaudeAgent {
|
|
40
|
+
name: string
|
|
41
|
+
type: string
|
|
42
|
+
|
|
9
43
|
constructor() {
|
|
10
44
|
this.name = 'Claude Code'
|
|
11
45
|
this.type = 'claude'
|
|
@@ -14,8 +48,8 @@ class ClaudeAgent {
|
|
|
14
48
|
/**
|
|
15
49
|
* Format response - minimal, actionable
|
|
16
50
|
*/
|
|
17
|
-
formatResponse(message, type = 'info') {
|
|
18
|
-
const emojis = {
|
|
51
|
+
formatResponse(message: string, type: string = 'info'): string {
|
|
52
|
+
const emojis: Record<string, string> = {
|
|
19
53
|
success: '✅',
|
|
20
54
|
error: '❌',
|
|
21
55
|
warning: '⚠️',
|
|
@@ -34,12 +68,14 @@ class ClaudeAgent {
|
|
|
34
68
|
/**
|
|
35
69
|
* Read file using MCP if available, fallback to fs
|
|
36
70
|
*/
|
|
37
|
-
async readFile(filePath) {
|
|
71
|
+
async readFile(filePath: string): Promise<string> {
|
|
38
72
|
try {
|
|
39
73
|
if (global.mcp && global.mcp.filesystem) {
|
|
40
74
|
return await global.mcp.filesystem.read(filePath)
|
|
41
75
|
}
|
|
42
|
-
} catch
|
|
76
|
+
} catch {
|
|
77
|
+
// Fall through to fs
|
|
78
|
+
}
|
|
43
79
|
|
|
44
80
|
return await fs.readFile(filePath, 'utf8')
|
|
45
81
|
}
|
|
@@ -47,12 +83,14 @@ class ClaudeAgent {
|
|
|
47
83
|
/**
|
|
48
84
|
* Write file using MCP if available, fallback to fs
|
|
49
85
|
*/
|
|
50
|
-
async writeFile(filePath, content) {
|
|
86
|
+
async writeFile(filePath: string, content: string): Promise<void> {
|
|
51
87
|
try {
|
|
52
88
|
if (global.mcp && global.mcp.filesystem) {
|
|
53
89
|
return await global.mcp.filesystem.write(filePath, content)
|
|
54
90
|
}
|
|
55
|
-
} catch
|
|
91
|
+
} catch {
|
|
92
|
+
// Fall through to fs
|
|
93
|
+
}
|
|
56
94
|
|
|
57
95
|
await fs.writeFile(filePath, content, 'utf8')
|
|
58
96
|
}
|
|
@@ -60,12 +98,14 @@ class ClaudeAgent {
|
|
|
60
98
|
/**
|
|
61
99
|
* List directory contents
|
|
62
100
|
*/
|
|
63
|
-
async listDirectory(dirPath) {
|
|
101
|
+
async listDirectory(dirPath: string): Promise<string[]> {
|
|
64
102
|
try {
|
|
65
103
|
if (global.mcp && global.mcp.filesystem) {
|
|
66
104
|
return await global.mcp.filesystem.list(dirPath)
|
|
67
105
|
}
|
|
68
|
-
} catch
|
|
106
|
+
} catch {
|
|
107
|
+
// Fall through to fs
|
|
108
|
+
}
|
|
69
109
|
|
|
70
110
|
return await fs.readdir(dirPath)
|
|
71
111
|
}
|
|
@@ -73,7 +113,7 @@ class ClaudeAgent {
|
|
|
73
113
|
/**
|
|
74
114
|
* Check if file exists
|
|
75
115
|
*/
|
|
76
|
-
async fileExists(filePath) {
|
|
116
|
+
async fileExists(filePath: string): Promise<boolean> {
|
|
77
117
|
try {
|
|
78
118
|
await fs.access(filePath)
|
|
79
119
|
return true
|
|
@@ -85,21 +125,21 @@ class ClaudeAgent {
|
|
|
85
125
|
/**
|
|
86
126
|
* Create directory
|
|
87
127
|
*/
|
|
88
|
-
async createDirectory(dirPath) {
|
|
128
|
+
async createDirectory(dirPath: string): Promise<void> {
|
|
89
129
|
await fs.mkdir(dirPath, { recursive: true })
|
|
90
130
|
}
|
|
91
131
|
|
|
92
132
|
/**
|
|
93
133
|
* Get current timestamp in ISO format
|
|
94
134
|
*/
|
|
95
|
-
getTimestamp() {
|
|
135
|
+
getTimestamp(): string {
|
|
96
136
|
return new Date().toISOString()
|
|
97
137
|
}
|
|
98
138
|
|
|
99
139
|
/**
|
|
100
140
|
* Format task list - data only
|
|
101
141
|
*/
|
|
102
|
-
formatTaskList(tasks) {
|
|
142
|
+
formatTaskList(tasks: string[] | null): string {
|
|
103
143
|
if (!tasks || tasks.length === 0) {
|
|
104
144
|
return '📋 No tasks queued'
|
|
105
145
|
}
|
|
@@ -110,7 +150,7 @@ class ClaudeAgent {
|
|
|
110
150
|
/**
|
|
111
151
|
* Format recap - metrics only
|
|
112
152
|
*/
|
|
113
|
-
formatRecap(data) {
|
|
153
|
+
formatRecap(data: RecapData): string {
|
|
114
154
|
return `📊 Recap
|
|
115
155
|
|
|
116
156
|
🎯 Current: ${data.currentTask || 'None'}
|
|
@@ -123,7 +163,7 @@ ${data.recentActivity ? '\n' + data.recentActivity : ''}`
|
|
|
123
163
|
/**
|
|
124
164
|
* Format progress - data only
|
|
125
165
|
*/
|
|
126
|
-
formatProgress(data) {
|
|
166
|
+
formatProgress(data: ProgressData): string {
|
|
127
167
|
const trend =
|
|
128
168
|
data.velocity > data.previousVelocity
|
|
129
169
|
? '📈'
|
|
@@ -141,8 +181,8 @@ ${data.recentFeatures || ''}`
|
|
|
141
181
|
/**
|
|
142
182
|
* Get help - actionable steps only
|
|
143
183
|
*/
|
|
144
|
-
getHelpContent(issue) {
|
|
145
|
-
const helps = {
|
|
184
|
+
getHelpContent(issue: string): string {
|
|
185
|
+
const helps: Record<string, string> = {
|
|
146
186
|
debugging:
|
|
147
187
|
'🔍 1. Isolate code causing error\n2. Add logs at key points\n3. Search exact error message',
|
|
148
188
|
design: '🎨 1. Define problem clearly\n2. Start with simplest solution\n3. Ship MVP, iterate',
|
|
@@ -159,8 +199,8 @@ ${data.recentFeatures || ''}`
|
|
|
159
199
|
/**
|
|
160
200
|
* Suggest next action - conversational prompts
|
|
161
201
|
*/
|
|
162
|
-
suggestNextAction(context) {
|
|
163
|
-
const suggestions = {
|
|
202
|
+
suggestNextAction(context: string): string {
|
|
203
|
+
const suggestions: Record<string, string> = {
|
|
164
204
|
taskCompleted: `What's next?
|
|
165
205
|
• "start [task]" → Begin working
|
|
166
206
|
• "ship feature" → Track & celebrate
|
|
@@ -205,7 +245,7 @@ Type /p:help to see all options`
|
|
|
205
245
|
/**
|
|
206
246
|
* Detect user intent from natural language
|
|
207
247
|
*/
|
|
208
|
-
detectIntent(message) {
|
|
248
|
+
detectIntent(message: string): IntentResult {
|
|
209
249
|
const msg = message.toLowerCase()
|
|
210
250
|
|
|
211
251
|
// Start/begin task
|
|
@@ -250,4 +290,4 @@ Type /p:help to see all options`
|
|
|
250
290
|
}
|
|
251
291
|
}
|
|
252
292
|
|
|
253
|
-
|
|
293
|
+
export default ClaudeAgent
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
const { promisify } = require('util')
|
|
2
|
-
const { exec: execCallback } = require('child_process')
|
|
3
|
-
const exec = promisify(execCallback)
|
|
4
|
-
|
|
5
1
|
/**
|
|
6
2
|
* AuthorDetector - Detects author information from multiple sources
|
|
7
3
|
*
|
|
@@ -12,22 +8,43 @@ const exec = promisify(execCallback)
|
|
|
12
8
|
*
|
|
13
9
|
* @version 0.2.0
|
|
14
10
|
*/
|
|
11
|
+
|
|
12
|
+
import { promisify } from 'util'
|
|
13
|
+
import { exec as execCallback } from 'child_process'
|
|
14
|
+
|
|
15
|
+
const exec = promisify(execCallback)
|
|
16
|
+
|
|
17
|
+
interface Author {
|
|
18
|
+
name: string | null
|
|
19
|
+
email: string | null
|
|
20
|
+
github: string | null
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface ExecResult {
|
|
24
|
+
success: boolean
|
|
25
|
+
output: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface ConfigStatus {
|
|
29
|
+
hasGitHub: boolean
|
|
30
|
+
hasGit: boolean
|
|
31
|
+
author: Author
|
|
32
|
+
isComplete: boolean
|
|
33
|
+
recommendations: string[]
|
|
34
|
+
}
|
|
35
|
+
|
|
15
36
|
class AuthorDetector {
|
|
16
37
|
/**
|
|
17
38
|
* Execute a shell command safely
|
|
18
|
-
*
|
|
19
|
-
* @param {string} command - Command to execute
|
|
20
|
-
* @returns {Promise<{success: boolean, output: string}>}
|
|
21
|
-
* @private
|
|
22
39
|
*/
|
|
23
|
-
async execCommand(command) {
|
|
40
|
+
private async execCommand(command: string): Promise<ExecResult> {
|
|
24
41
|
try {
|
|
25
42
|
const { stdout } = await exec(command, { timeout: 5000 })
|
|
26
43
|
return {
|
|
27
44
|
success: true,
|
|
28
45
|
output: stdout.trim(),
|
|
29
46
|
}
|
|
30
|
-
} catch
|
|
47
|
+
} catch {
|
|
31
48
|
return {
|
|
32
49
|
success: false,
|
|
33
50
|
output: '',
|
|
@@ -37,10 +54,8 @@ class AuthorDetector {
|
|
|
37
54
|
|
|
38
55
|
/**
|
|
39
56
|
* Detect GitHub username using GitHub CLI
|
|
40
|
-
*
|
|
41
|
-
* @returns {Promise<string|null>} - GitHub username or null
|
|
42
57
|
*/
|
|
43
|
-
async detectGitHubUsername() {
|
|
58
|
+
async detectGitHubUsername(): Promise<string | null> {
|
|
44
59
|
let result = await this.execCommand('gh api user --jq .login')
|
|
45
60
|
if (result.success && result.output) {
|
|
46
61
|
return result.output
|
|
@@ -56,31 +71,25 @@ class AuthorDetector {
|
|
|
56
71
|
|
|
57
72
|
/**
|
|
58
73
|
* Detect git config name
|
|
59
|
-
*
|
|
60
|
-
* @returns {Promise<string|null>} - Git name or null
|
|
61
74
|
*/
|
|
62
|
-
async detectGitName() {
|
|
75
|
+
async detectGitName(): Promise<string | null> {
|
|
63
76
|
const result = await this.execCommand('git config user.name')
|
|
64
77
|
return result.success && result.output ? result.output : null
|
|
65
78
|
}
|
|
66
79
|
|
|
67
80
|
/**
|
|
68
81
|
* Detect git config email
|
|
69
|
-
*
|
|
70
|
-
* @returns {Promise<string|null>} - Git email or null
|
|
71
82
|
*/
|
|
72
|
-
async detectGitEmail() {
|
|
83
|
+
async detectGitEmail(): Promise<string | null> {
|
|
73
84
|
const result = await this.execCommand('git config user.email')
|
|
74
85
|
return result.success && result.output ? result.output : null
|
|
75
86
|
}
|
|
76
87
|
|
|
77
88
|
/**
|
|
78
89
|
* Detect author information from all available sources
|
|
79
|
-
*
|
|
80
|
-
* @returns {Promise<Object>} - Author information {name, email, github}
|
|
81
90
|
*/
|
|
82
|
-
async detect() {
|
|
83
|
-
const author = {
|
|
91
|
+
async detect(): Promise<Author> {
|
|
92
|
+
const author: Author = {
|
|
84
93
|
name: null,
|
|
85
94
|
email: null,
|
|
86
95
|
github: null,
|
|
@@ -105,10 +114,8 @@ class AuthorDetector {
|
|
|
105
114
|
/**
|
|
106
115
|
* Detect and format author for memory logs
|
|
107
116
|
* Returns just the GitHub username or git name
|
|
108
|
-
*
|
|
109
|
-
* @returns {Promise<string>} - Author identifier for logs
|
|
110
117
|
*/
|
|
111
|
-
async detectAuthorForLogs() {
|
|
118
|
+
async detectAuthorForLogs(): Promise<string> {
|
|
112
119
|
const author = await this.detect()
|
|
113
120
|
|
|
114
121
|
if (author.github) {
|
|
@@ -124,20 +131,16 @@ class AuthorDetector {
|
|
|
124
131
|
|
|
125
132
|
/**
|
|
126
133
|
* Check if GitHub CLI is available
|
|
127
|
-
*
|
|
128
|
-
* @returns {Promise<boolean>} - True if gh command is available
|
|
129
134
|
*/
|
|
130
|
-
async isGitHubCLIAvailable() {
|
|
135
|
+
async isGitHubCLIAvailable(): Promise<boolean> {
|
|
131
136
|
const result = await this.execCommand('gh --version')
|
|
132
137
|
return result.success
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
/**
|
|
136
141
|
* Check if git is configured
|
|
137
|
-
*
|
|
138
|
-
* @returns {Promise<boolean>} - True if git name and email are set
|
|
139
142
|
*/
|
|
140
|
-
async isGitConfigured() {
|
|
143
|
+
async isGitConfigured(): Promise<boolean> {
|
|
141
144
|
const name = await this.detectGitName()
|
|
142
145
|
const email = await this.detectGitEmail()
|
|
143
146
|
return !!(name && email)
|
|
@@ -145,10 +148,8 @@ class AuthorDetector {
|
|
|
145
148
|
|
|
146
149
|
/**
|
|
147
150
|
* Get configuration status and recommendations
|
|
148
|
-
*
|
|
149
|
-
* @returns {Promise<Object>} - Status and recommendations
|
|
150
151
|
*/
|
|
151
|
-
async getConfigStatus() {
|
|
152
|
+
async getConfigStatus(): Promise<ConfigStatus> {
|
|
152
153
|
const hasGitHub = await this.isGitHubCLIAvailable()
|
|
153
154
|
const hasGit = await this.isGitConfigured()
|
|
154
155
|
const author = await this.detect()
|
|
@@ -164,15 +165,9 @@ class AuthorDetector {
|
|
|
164
165
|
|
|
165
166
|
/**
|
|
166
167
|
* Generate recommendations based on detected configuration
|
|
167
|
-
*
|
|
168
|
-
* @param {boolean} hasGitHub - GitHub CLI available
|
|
169
|
-
* @param {boolean} hasGit - Git configured
|
|
170
|
-
* @param {Object} author - Detected author
|
|
171
|
-
* @returns {string[]} - Array of recommendations
|
|
172
|
-
* @private
|
|
173
168
|
*/
|
|
174
|
-
_getRecommendations(hasGitHub, hasGit, author) {
|
|
175
|
-
const recommendations = []
|
|
169
|
+
private _getRecommendations(hasGitHub: boolean, hasGit: boolean, author: Author): string[] {
|
|
170
|
+
const recommendations: string[] = []
|
|
176
171
|
|
|
177
172
|
if (!hasGitHub && !author.github) {
|
|
178
173
|
recommendations.push(
|
|
@@ -194,12 +189,9 @@ class AuthorDetector {
|
|
|
194
189
|
|
|
195
190
|
/**
|
|
196
191
|
* Format author information for display
|
|
197
|
-
*
|
|
198
|
-
* @param {Object} author - Author object
|
|
199
|
-
* @returns {string} - Formatted author string
|
|
200
192
|
*/
|
|
201
|
-
formatAuthor(author) {
|
|
202
|
-
const parts = []
|
|
193
|
+
formatAuthor(author: Author): string {
|
|
194
|
+
const parts: string[] = []
|
|
203
195
|
|
|
204
196
|
if (author.name && author.name !== 'Unknown') {
|
|
205
197
|
parts.push(author.name)
|
|
@@ -217,4 +209,5 @@ class AuthorDetector {
|
|
|
217
209
|
}
|
|
218
210
|
}
|
|
219
211
|
|
|
220
|
-
|
|
212
|
+
const authorDetector = new AuthorDetector()
|
|
213
|
+
export default authorDetector
|
|
@@ -3,15 +3,48 @@
|
|
|
3
3
|
* Handles installation of missing tools and tracks them as workflow tasks
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import { exec } from 'child_process'
|
|
7
|
+
import { promisify } from 'util'
|
|
8
|
+
import fs from 'fs/promises'
|
|
9
|
+
import path from 'path'
|
|
10
|
+
import projectCapabilities from '../utils/project-capabilities'
|
|
11
|
+
|
|
8
12
|
const execAsync = promisify(exec)
|
|
9
13
|
|
|
14
|
+
interface Recommendation {
|
|
15
|
+
install: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface InstallResult {
|
|
19
|
+
success: boolean
|
|
20
|
+
capability: string
|
|
21
|
+
command: string
|
|
22
|
+
duration?: number
|
|
23
|
+
output?: string
|
|
24
|
+
errors?: string | null
|
|
25
|
+
error?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface ConfigureResult {
|
|
29
|
+
configured: boolean
|
|
30
|
+
framework?: string
|
|
31
|
+
tool?: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface PackageJson {
|
|
35
|
+
devDependencies?: Record<string, string>
|
|
36
|
+
scripts?: Record<string, string>
|
|
37
|
+
}
|
|
38
|
+
|
|
10
39
|
class CapabilityInstaller {
|
|
11
40
|
/**
|
|
12
41
|
* Install capability and create tracking task
|
|
13
42
|
*/
|
|
14
|
-
async install(
|
|
43
|
+
async install(
|
|
44
|
+
capability: string,
|
|
45
|
+
recommendation: Recommendation,
|
|
46
|
+
_dataPath: string
|
|
47
|
+
): Promise<InstallResult> {
|
|
15
48
|
const command = recommendation.install
|
|
16
49
|
const startTime = Date.now()
|
|
17
50
|
|
|
@@ -35,7 +68,7 @@ class CapabilityInstaller {
|
|
|
35
68
|
success: false,
|
|
36
69
|
capability,
|
|
37
70
|
command,
|
|
38
|
-
error: error.message,
|
|
71
|
+
error: (error as Error).message,
|
|
39
72
|
}
|
|
40
73
|
}
|
|
41
74
|
}
|
|
@@ -43,8 +76,8 @@ class CapabilityInstaller {
|
|
|
43
76
|
/**
|
|
44
77
|
* Create configuration for installed tool
|
|
45
78
|
*/
|
|
46
|
-
async configure(capability, projectPath) {
|
|
47
|
-
const configs = {
|
|
79
|
+
async configure(capability: string, projectPath: string): Promise<ConfigureResult> {
|
|
80
|
+
const configs: Record<string, () => Promise<ConfigureResult>> = {
|
|
48
81
|
test: () => this.configureTest(projectPath),
|
|
49
82
|
design: () => this.configureDesign(projectPath),
|
|
50
83
|
docs: () => this.configureDocs(projectPath),
|
|
@@ -60,13 +93,10 @@ class CapabilityInstaller {
|
|
|
60
93
|
/**
|
|
61
94
|
* Configure test framework
|
|
62
95
|
*/
|
|
63
|
-
async configureTest(projectPath) {
|
|
64
|
-
const fs = require('fs').promises
|
|
65
|
-
const path = require('path')
|
|
66
|
-
|
|
96
|
+
async configureTest(projectPath: string): Promise<ConfigureResult> {
|
|
67
97
|
// Check if package.json exists
|
|
68
98
|
const pkgPath = path.join(projectPath, 'package.json')
|
|
69
|
-
const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'))
|
|
99
|
+
const pkg: PackageJson = JSON.parse(await fs.readFile(pkgPath, 'utf8'))
|
|
70
100
|
|
|
71
101
|
const hasVitest = pkg.devDependencies?.vitest
|
|
72
102
|
const hasJest = pkg.devDependencies?.jest
|
|
@@ -121,12 +151,9 @@ export default defineConfig({
|
|
|
121
151
|
/**
|
|
122
152
|
* Configure design system
|
|
123
153
|
*/
|
|
124
|
-
async configureDesign(projectPath) {
|
|
125
|
-
const fs = require('fs').promises
|
|
126
|
-
const path = require('path')
|
|
127
|
-
|
|
154
|
+
async configureDesign(projectPath: string): Promise<ConfigureResult> {
|
|
128
155
|
const pkgPath = path.join(projectPath, 'package.json')
|
|
129
|
-
const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'))
|
|
156
|
+
const pkg: PackageJson = JSON.parse(await fs.readFile(pkgPath, 'utf8'))
|
|
130
157
|
|
|
131
158
|
if (pkg.devDependencies?.storybook) {
|
|
132
159
|
// Storybook auto-configures itself during init
|
|
@@ -139,19 +166,16 @@ export default defineConfig({
|
|
|
139
166
|
/**
|
|
140
167
|
* Configure documentation
|
|
141
168
|
*/
|
|
142
|
-
async configureDocs(projectPath) {
|
|
143
|
-
const fs = require('fs').promises
|
|
144
|
-
const path = require('path')
|
|
145
|
-
|
|
169
|
+
async configureDocs(projectPath: string): Promise<ConfigureResult> {
|
|
146
170
|
const pkgPath = path.join(projectPath, 'package.json')
|
|
147
|
-
const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'))
|
|
171
|
+
const pkg: PackageJson = JSON.parse(await fs.readFile(pkgPath, 'utf8'))
|
|
148
172
|
|
|
149
173
|
if (pkg.devDependencies?.jsdoc) {
|
|
150
174
|
// Create jsdoc.json
|
|
151
175
|
const config = {
|
|
152
176
|
source: {
|
|
153
177
|
include: ['src'],
|
|
154
|
-
includePattern: '
|
|
178
|
+
includePattern: '.+\\.js(doc|x)?$',
|
|
155
179
|
excludePattern: '(node_modules|docs)',
|
|
156
180
|
},
|
|
157
181
|
opts: {
|
|
@@ -176,12 +200,12 @@ export default defineConfig({
|
|
|
176
200
|
/**
|
|
177
201
|
* Verify installation succeeded
|
|
178
202
|
*/
|
|
179
|
-
async verify(capability, projectPath) {
|
|
180
|
-
const
|
|
181
|
-
const detected = await caps.detect(projectPath)
|
|
203
|
+
async verify(capability: string, projectPath: string): Promise<boolean> {
|
|
204
|
+
const detected = await projectCapabilities.detect(projectPath)
|
|
182
205
|
|
|
183
|
-
return detected[capability] === true
|
|
206
|
+
return detected[capability as keyof typeof detected] === true
|
|
184
207
|
}
|
|
185
208
|
}
|
|
186
209
|
|
|
187
|
-
|
|
210
|
+
const capabilityInstaller = new CapabilityInstaller()
|
|
211
|
+
export default capabilityInstaller
|