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
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* @version 1.0.0
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
import fs from 'fs/promises'
|
|
11
|
+
import path from 'path'
|
|
12
|
+
import pathManager from '../infrastructure/path-manager'
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Event Types - All events that can be emitted
|
|
@@ -50,9 +50,26 @@ const EventTypes = {
|
|
|
50
50
|
|
|
51
51
|
// Wildcard
|
|
52
52
|
ALL: '*'
|
|
53
|
+
} as const
|
|
54
|
+
|
|
55
|
+
type EventType = typeof EventTypes[keyof typeof EventTypes]
|
|
56
|
+
|
|
57
|
+
interface EventData {
|
|
58
|
+
type: string
|
|
59
|
+
timestamp: string
|
|
60
|
+
projectId: string | null
|
|
61
|
+
[key: string]: unknown
|
|
53
62
|
}
|
|
54
63
|
|
|
64
|
+
type EventCallback = (data: EventData) => void | Promise<void>
|
|
65
|
+
|
|
55
66
|
class EventBus {
|
|
67
|
+
private listeners: Map<string, Set<EventCallback>>
|
|
68
|
+
private onceListeners: Map<string, Set<EventCallback>>
|
|
69
|
+
private history: EventData[]
|
|
70
|
+
private historyLimit: number
|
|
71
|
+
projectId: string | null
|
|
72
|
+
|
|
56
73
|
constructor() {
|
|
57
74
|
this.listeners = new Map()
|
|
58
75
|
this.onceListeners = new Map()
|
|
@@ -63,23 +80,19 @@ class EventBus {
|
|
|
63
80
|
|
|
64
81
|
/**
|
|
65
82
|
* Initialize event bus for a project
|
|
66
|
-
* @param {string} projectId
|
|
67
83
|
*/
|
|
68
|
-
async initialize(projectId) {
|
|
84
|
+
async initialize(projectId: string): Promise<void> {
|
|
69
85
|
this.projectId = projectId
|
|
70
86
|
}
|
|
71
87
|
|
|
72
88
|
/**
|
|
73
89
|
* Subscribe to an event
|
|
74
|
-
* @param {string} event - Event type or wildcard pattern
|
|
75
|
-
* @param {Function} callback - Handler function
|
|
76
|
-
* @returns {Function} Unsubscribe function
|
|
77
90
|
*/
|
|
78
|
-
on(event, callback) {
|
|
91
|
+
on(event: string, callback: EventCallback): () => void {
|
|
79
92
|
if (!this.listeners.has(event)) {
|
|
80
93
|
this.listeners.set(event, new Set())
|
|
81
94
|
}
|
|
82
|
-
this.listeners.get(event)
|
|
95
|
+
this.listeners.get(event)!.add(callback)
|
|
83
96
|
|
|
84
97
|
// Return unsubscribe function
|
|
85
98
|
return () => this.off(event, callback)
|
|
@@ -87,15 +100,12 @@ class EventBus {
|
|
|
87
100
|
|
|
88
101
|
/**
|
|
89
102
|
* Subscribe to an event once
|
|
90
|
-
* @param {string} event
|
|
91
|
-
* @param {Function} callback
|
|
92
|
-
* @returns {Function} Unsubscribe function
|
|
93
103
|
*/
|
|
94
|
-
once(event, callback) {
|
|
104
|
+
once(event: string, callback: EventCallback): () => void {
|
|
95
105
|
if (!this.onceListeners.has(event)) {
|
|
96
106
|
this.onceListeners.set(event, new Set())
|
|
97
107
|
}
|
|
98
|
-
this.onceListeners.get(event)
|
|
108
|
+
this.onceListeners.get(event)!.add(callback)
|
|
99
109
|
|
|
100
110
|
return () => {
|
|
101
111
|
const listeners = this.onceListeners.get(event)
|
|
@@ -107,10 +117,8 @@ class EventBus {
|
|
|
107
117
|
|
|
108
118
|
/**
|
|
109
119
|
* Unsubscribe from an event
|
|
110
|
-
* @param {string} event
|
|
111
|
-
* @param {Function} callback
|
|
112
120
|
*/
|
|
113
|
-
off(event, callback) {
|
|
121
|
+
off(event: string, callback: EventCallback): void {
|
|
114
122
|
const listeners = this.listeners.get(event)
|
|
115
123
|
if (listeners) {
|
|
116
124
|
listeners.delete(callback)
|
|
@@ -119,13 +127,10 @@ class EventBus {
|
|
|
119
127
|
|
|
120
128
|
/**
|
|
121
129
|
* Emit an event
|
|
122
|
-
* @param {string} event - Event type
|
|
123
|
-
* @param {Object} data - Event payload
|
|
124
|
-
* @returns {Promise<void>}
|
|
125
130
|
*/
|
|
126
|
-
async emit(event, data = {}) {
|
|
131
|
+
async emit(event: string, data: Record<string, unknown> = {}): Promise<void> {
|
|
127
132
|
const timestamp = new Date().toISOString()
|
|
128
|
-
const eventData = {
|
|
133
|
+
const eventData: EventData = {
|
|
129
134
|
type: event,
|
|
130
135
|
timestamp,
|
|
131
136
|
projectId: this.projectId,
|
|
@@ -152,7 +157,7 @@ class EventBus {
|
|
|
152
157
|
)
|
|
153
158
|
|
|
154
159
|
// Log any errors
|
|
155
|
-
results.forEach((result
|
|
160
|
+
results.forEach((result) => {
|
|
156
161
|
if (result.status === 'rejected') {
|
|
157
162
|
console.error(`Event listener error for ${event}:`, result.reason)
|
|
158
163
|
}
|
|
@@ -179,11 +184,9 @@ class EventBus {
|
|
|
179
184
|
|
|
180
185
|
/**
|
|
181
186
|
* Get all listeners that match an event (including wildcards)
|
|
182
|
-
* @param {string} event
|
|
183
|
-
* @returns {Function[]}
|
|
184
187
|
*/
|
|
185
|
-
getMatchingListeners(event) {
|
|
186
|
-
const callbacks = []
|
|
188
|
+
getMatchingListeners(event: string): EventCallback[] {
|
|
189
|
+
const callbacks: EventCallback[] = []
|
|
187
190
|
|
|
188
191
|
// Exact match
|
|
189
192
|
const exact = this.listeners.get(event)
|
|
@@ -209,10 +212,8 @@ class EventBus {
|
|
|
209
212
|
|
|
210
213
|
/**
|
|
211
214
|
* Execute a callback safely (handles sync and async)
|
|
212
|
-
* @param {Function} callback
|
|
213
|
-
* @param {Object} data
|
|
214
215
|
*/
|
|
215
|
-
async executeCallback(callback, data) {
|
|
216
|
+
async executeCallback(callback: EventCallback, data: EventData): Promise<void> {
|
|
216
217
|
try {
|
|
217
218
|
const result = callback(data)
|
|
218
219
|
if (result instanceof Promise) {
|
|
@@ -226,11 +227,10 @@ class EventBus {
|
|
|
226
227
|
|
|
227
228
|
/**
|
|
228
229
|
* Log event to persistent storage
|
|
229
|
-
* @param {Object} eventData
|
|
230
230
|
*/
|
|
231
|
-
async logEvent(eventData) {
|
|
231
|
+
async logEvent(eventData: EventData): Promise<void> {
|
|
232
232
|
try {
|
|
233
|
-
const globalPath = pathManager.getGlobalProjectPath(this.projectId)
|
|
233
|
+
const globalPath = pathManager.getGlobalProjectPath(this.projectId!)
|
|
234
234
|
const eventsPath = path.join(globalPath, 'memory', 'events.jsonl')
|
|
235
235
|
|
|
236
236
|
// Ensure directory exists
|
|
@@ -246,11 +246,8 @@ class EventBus {
|
|
|
246
246
|
|
|
247
247
|
/**
|
|
248
248
|
* Get recent events from history
|
|
249
|
-
* @param {number} limit
|
|
250
|
-
* @param {string} [type] - Optional filter by event type
|
|
251
|
-
* @returns {Object[]}
|
|
252
249
|
*/
|
|
253
|
-
getHistory(limit = 10, type = null) {
|
|
250
|
+
getHistory(limit: number = 10, type: string | null = null): EventData[] {
|
|
254
251
|
let events = this.history
|
|
255
252
|
if (type) {
|
|
256
253
|
events = events.filter(e => e.type === type || e.type.startsWith(type))
|
|
@@ -261,26 +258,23 @@ class EventBus {
|
|
|
261
258
|
/**
|
|
262
259
|
* Clear all listeners
|
|
263
260
|
*/
|
|
264
|
-
clear() {
|
|
261
|
+
clear(): void {
|
|
265
262
|
this.listeners.clear()
|
|
266
263
|
this.onceListeners.clear()
|
|
267
264
|
}
|
|
268
265
|
|
|
269
266
|
/**
|
|
270
267
|
* Get count of listeners for an event
|
|
271
|
-
* @param {string} event
|
|
272
|
-
* @returns {number}
|
|
273
268
|
*/
|
|
274
|
-
listenerCount(event) {
|
|
269
|
+
listenerCount(event: string): number {
|
|
275
270
|
const listeners = this.listeners.get(event)
|
|
276
271
|
return listeners ? listeners.size : 0
|
|
277
272
|
}
|
|
278
273
|
|
|
279
274
|
/**
|
|
280
275
|
* Get all registered event types
|
|
281
|
-
* @returns {string[]}
|
|
282
276
|
*/
|
|
283
|
-
getRegisteredEvents() {
|
|
277
|
+
getRegisteredEvents(): string[] {
|
|
284
278
|
return Array.from(this.listeners.keys())
|
|
285
279
|
}
|
|
286
280
|
}
|
|
@@ -290,33 +284,35 @@ const eventBus = new EventBus()
|
|
|
290
284
|
|
|
291
285
|
// Convenience methods for common events
|
|
292
286
|
const emit = {
|
|
293
|
-
sessionStarted: (data) => eventBus.emit(EventTypes.SESSION_STARTED, data),
|
|
294
|
-
sessionPaused: (data) => eventBus.emit(EventTypes.SESSION_PAUSED, data),
|
|
295
|
-
sessionResumed: (data) => eventBus.emit(EventTypes.SESSION_RESUMED, data),
|
|
296
|
-
sessionCompleted: (data) => eventBus.emit(EventTypes.SESSION_COMPLETED, data),
|
|
287
|
+
sessionStarted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_STARTED, data),
|
|
288
|
+
sessionPaused: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_PAUSED, data),
|
|
289
|
+
sessionResumed: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_RESUMED, data),
|
|
290
|
+
sessionCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SESSION_COMPLETED, data),
|
|
297
291
|
|
|
298
|
-
taskCreated: (data) => eventBus.emit(EventTypes.TASK_CREATED, data),
|
|
299
|
-
taskCompleted: (data) => eventBus.emit(EventTypes.TASK_COMPLETED, data),
|
|
292
|
+
taskCreated: (data: Record<string, unknown>) => eventBus.emit(EventTypes.TASK_CREATED, data),
|
|
293
|
+
taskCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.TASK_COMPLETED, data),
|
|
300
294
|
|
|
301
|
-
featureAdded: (data) => eventBus.emit(EventTypes.FEATURE_ADDED, data),
|
|
302
|
-
featureShipped: (data) => eventBus.emit(EventTypes.FEATURE_SHIPPED, data),
|
|
295
|
+
featureAdded: (data: Record<string, unknown>) => eventBus.emit(EventTypes.FEATURE_ADDED, data),
|
|
296
|
+
featureShipped: (data: Record<string, unknown>) => eventBus.emit(EventTypes.FEATURE_SHIPPED, data),
|
|
303
297
|
|
|
304
|
-
ideaCaptured: (data) => eventBus.emit(EventTypes.IDEA_CAPTURED, data),
|
|
298
|
+
ideaCaptured: (data: Record<string, unknown>) => eventBus.emit(EventTypes.IDEA_CAPTURED, data),
|
|
305
299
|
|
|
306
|
-
snapshotCreated: (data) => eventBus.emit(EventTypes.SNAPSHOT_CREATED, data),
|
|
307
|
-
snapshotRestored: (data) => eventBus.emit(EventTypes.SNAPSHOT_RESTORED, data),
|
|
300
|
+
snapshotCreated: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SNAPSHOT_CREATED, data),
|
|
301
|
+
snapshotRestored: (data: Record<string, unknown>) => eventBus.emit(EventTypes.SNAPSHOT_RESTORED, data),
|
|
308
302
|
|
|
309
|
-
commitCreated: (data) => eventBus.emit(EventTypes.COMMIT_CREATED, data),
|
|
310
|
-
pushCompleted: (data) => eventBus.emit(EventTypes.PUSH_COMPLETED, data),
|
|
303
|
+
commitCreated: (data: Record<string, unknown>) => eventBus.emit(EventTypes.COMMIT_CREATED, data),
|
|
304
|
+
pushCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.PUSH_COMPLETED, data),
|
|
311
305
|
|
|
312
|
-
projectInitialized: (data) => eventBus.emit(EventTypes.PROJECT_INITIALIZED, data),
|
|
313
|
-
projectSynced: (data) => eventBus.emit(EventTypes.PROJECT_SYNCED, data),
|
|
314
|
-
analysisCompleted: (data) => eventBus.emit(EventTypes.ANALYSIS_COMPLETED, data)
|
|
306
|
+
projectInitialized: (data: Record<string, unknown>) => eventBus.emit(EventTypes.PROJECT_INITIALIZED, data),
|
|
307
|
+
projectSynced: (data: Record<string, unknown>) => eventBus.emit(EventTypes.PROJECT_SYNCED, data),
|
|
308
|
+
analysisCompleted: (data: Record<string, unknown>) => eventBus.emit(EventTypes.ANALYSIS_COMPLETED, data)
|
|
315
309
|
}
|
|
316
310
|
|
|
317
|
-
|
|
311
|
+
export {
|
|
318
312
|
EventBus,
|
|
319
313
|
EventTypes,
|
|
320
314
|
eventBus,
|
|
321
315
|
emit
|
|
322
316
|
}
|
|
317
|
+
|
|
318
|
+
export default { EventBus, EventTypes, eventBus, emit }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Category Definitions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { Categories } from './types'
|
|
6
|
+
|
|
7
|
+
export const CATEGORIES: Categories = {
|
|
8
|
+
core: {
|
|
9
|
+
title: 'Core Workflow',
|
|
10
|
+
description: '13 essential commands for daily development workflow',
|
|
11
|
+
order: 1,
|
|
12
|
+
},
|
|
13
|
+
optional: {
|
|
14
|
+
title: 'Optional Commands',
|
|
15
|
+
description: 'Advanced features for specialized workflows',
|
|
16
|
+
order: 2,
|
|
17
|
+
},
|
|
18
|
+
setup: {
|
|
19
|
+
title: 'Setup',
|
|
20
|
+
description: 'Installation and configuration (not for daily use)',
|
|
21
|
+
order: 3,
|
|
22
|
+
},
|
|
23
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Definitions
|
|
3
|
+
* All prjct commands combined from category modules.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Command } from './types'
|
|
7
|
+
import { CORE_COMMANDS } from './core-commands'
|
|
8
|
+
import { OPTIONAL_COMMANDS } from './optional-commands'
|
|
9
|
+
import { SETUP_COMMANDS } from './setup-commands'
|
|
10
|
+
|
|
11
|
+
export const COMMANDS: Command[] = [
|
|
12
|
+
...CORE_COMMANDS,
|
|
13
|
+
...OPTIONAL_COMMANDS,
|
|
14
|
+
...SETUP_COMMANDS,
|
|
15
|
+
]
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Workflow Commands
|
|
3
|
+
* 14 essential commands for daily development workflow.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Command } from './types'
|
|
7
|
+
|
|
8
|
+
export const CORE_COMMANDS: Command[] = [
|
|
9
|
+
{
|
|
10
|
+
name: 'init',
|
|
11
|
+
category: 'core',
|
|
12
|
+
description: 'Deep project analysis and initialization',
|
|
13
|
+
usage: {
|
|
14
|
+
claude: '/p:init "[idea]"',
|
|
15
|
+
terminal: 'prjct init "[idea]"',
|
|
16
|
+
},
|
|
17
|
+
params: '[idea]',
|
|
18
|
+
implemented: true,
|
|
19
|
+
hasTemplate: true,
|
|
20
|
+
requiresInit: false,
|
|
21
|
+
blockingRules: null,
|
|
22
|
+
features: [
|
|
23
|
+
'Architect mode for blank projects',
|
|
24
|
+
'Auto tech stack recommendation',
|
|
25
|
+
'Project structure generation',
|
|
26
|
+
'Initial roadmap creation',
|
|
27
|
+
'Analyzes existing codebases',
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
{
|
|
32
|
+
name: 'idea',
|
|
33
|
+
category: 'core',
|
|
34
|
+
description: 'Transform ideas into complete technical architectures',
|
|
35
|
+
usage: {
|
|
36
|
+
claude: '/p:idea "build a CRM with AI"',
|
|
37
|
+
terminal: 'prjct idea "build a CRM with AI"',
|
|
38
|
+
},
|
|
39
|
+
params: '<description>',
|
|
40
|
+
implemented: true,
|
|
41
|
+
hasTemplate: true,
|
|
42
|
+
requiresInit: true,
|
|
43
|
+
blockingRules: null,
|
|
44
|
+
features: [
|
|
45
|
+
'Simple ideas -> Quick capture',
|
|
46
|
+
'Complex ideas -> Full architecture',
|
|
47
|
+
'Interactive discovery process',
|
|
48
|
+
'Tech stack recommendation',
|
|
49
|
+
'Complete roadmap generation',
|
|
50
|
+
'Database schema design',
|
|
51
|
+
'API specification',
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
{
|
|
56
|
+
name: 'feature',
|
|
57
|
+
category: 'core',
|
|
58
|
+
description: 'Add feature with value analysis, roadmap, and task breakdown',
|
|
59
|
+
usage: {
|
|
60
|
+
claude: '/p:feature "add unit testing"',
|
|
61
|
+
terminal: 'prjct feature "add unit testing"',
|
|
62
|
+
},
|
|
63
|
+
params: '<description>',
|
|
64
|
+
implemented: true,
|
|
65
|
+
hasTemplate: true,
|
|
66
|
+
requiresInit: true,
|
|
67
|
+
blockingRules: null,
|
|
68
|
+
features: [
|
|
69
|
+
'Value analysis (impact/effort/timing)',
|
|
70
|
+
'Auto roadmap generation',
|
|
71
|
+
'Task breakdown',
|
|
72
|
+
'Auto-start first task',
|
|
73
|
+
'Timing recommendations',
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
{
|
|
78
|
+
name: 'spec',
|
|
79
|
+
category: 'core',
|
|
80
|
+
description: 'Create detailed specifications for complex features',
|
|
81
|
+
usage: {
|
|
82
|
+
claude: '/p:spec "Dark Mode"',
|
|
83
|
+
terminal: 'prjct spec "Dark Mode"',
|
|
84
|
+
},
|
|
85
|
+
params: '[feature]',
|
|
86
|
+
implemented: true,
|
|
87
|
+
hasTemplate: true,
|
|
88
|
+
requiresInit: true,
|
|
89
|
+
blockingRules: null,
|
|
90
|
+
features: [
|
|
91
|
+
'Requirements documentation',
|
|
92
|
+
'Design decisions tracking',
|
|
93
|
+
'Tasks broken into 20-30min chunks',
|
|
94
|
+
'User approval workflow',
|
|
95
|
+
'Auto-add tasks to queue on approve',
|
|
96
|
+
'Integrates with /p:feature',
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
{
|
|
101
|
+
name: 'work',
|
|
102
|
+
category: 'core',
|
|
103
|
+
description: 'Show current or start new task',
|
|
104
|
+
usage: {
|
|
105
|
+
claude: '/p:work ["task"]',
|
|
106
|
+
terminal: 'prjct work ["task"]',
|
|
107
|
+
},
|
|
108
|
+
params: '[task]',
|
|
109
|
+
implemented: true,
|
|
110
|
+
hasTemplate: true,
|
|
111
|
+
requiresInit: true,
|
|
112
|
+
blockingRules: null,
|
|
113
|
+
features: [
|
|
114
|
+
'No params -> Show current task',
|
|
115
|
+
'With task -> Start new task',
|
|
116
|
+
'Auto agent assignment',
|
|
117
|
+
'Supports task numbers',
|
|
118
|
+
'Replaces /p:now and /p:build',
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
{
|
|
123
|
+
name: 'pause',
|
|
124
|
+
category: 'core',
|
|
125
|
+
description: 'Pause active task to handle interruption',
|
|
126
|
+
usage: {
|
|
127
|
+
claude: '/p:pause ["reason"]',
|
|
128
|
+
terminal: 'prjct pause ["reason"]',
|
|
129
|
+
},
|
|
130
|
+
params: '[reason]',
|
|
131
|
+
implemented: true,
|
|
132
|
+
hasTemplate: true,
|
|
133
|
+
requiresInit: true,
|
|
134
|
+
blockingRules: {
|
|
135
|
+
check: 'Active task exists',
|
|
136
|
+
message: 'No active task to pause',
|
|
137
|
+
},
|
|
138
|
+
features: [
|
|
139
|
+
'Preserves task context',
|
|
140
|
+
'Optional pause reason',
|
|
141
|
+
'Tracks paused duration',
|
|
142
|
+
'Allows multiple paused tasks',
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
{
|
|
147
|
+
name: 'resume',
|
|
148
|
+
category: 'core',
|
|
149
|
+
description: 'Resume most recently paused task',
|
|
150
|
+
usage: {
|
|
151
|
+
claude: '/p:resume [task_id]',
|
|
152
|
+
terminal: 'prjct resume [task_id]',
|
|
153
|
+
},
|
|
154
|
+
params: '[task_id]',
|
|
155
|
+
implemented: true,
|
|
156
|
+
hasTemplate: true,
|
|
157
|
+
requiresInit: true,
|
|
158
|
+
blockingRules: {
|
|
159
|
+
check: 'Paused tasks exist',
|
|
160
|
+
message: 'No paused tasks to resume',
|
|
161
|
+
},
|
|
162
|
+
features: [
|
|
163
|
+
'Resume last paused',
|
|
164
|
+
'Resume specific task',
|
|
165
|
+
'Resume by number',
|
|
166
|
+
'Calculates active time',
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
{
|
|
171
|
+
name: 'next',
|
|
172
|
+
category: 'core',
|
|
173
|
+
description: 'Show top 5 non-blocking priority tasks',
|
|
174
|
+
usage: {
|
|
175
|
+
claude: '/p:next',
|
|
176
|
+
terminal: 'prjct next',
|
|
177
|
+
},
|
|
178
|
+
params: null,
|
|
179
|
+
implemented: true,
|
|
180
|
+
hasTemplate: true,
|
|
181
|
+
requiresInit: true,
|
|
182
|
+
blockingRules: {
|
|
183
|
+
check: 'filters blocked tasks',
|
|
184
|
+
message: 'Shows warning if now.md is active',
|
|
185
|
+
},
|
|
186
|
+
features: [
|
|
187
|
+
'Filters out blocked tasks',
|
|
188
|
+
'Shows top 5 by priority',
|
|
189
|
+
'Numbered 1-5 for quick selection',
|
|
190
|
+
'Warns if active task exists',
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
{
|
|
195
|
+
name: 'done',
|
|
196
|
+
category: 'core',
|
|
197
|
+
description: 'Mark current task as complete',
|
|
198
|
+
usage: {
|
|
199
|
+
claude: '/p:done',
|
|
200
|
+
terminal: 'prjct done',
|
|
201
|
+
},
|
|
202
|
+
params: null,
|
|
203
|
+
implemented: true,
|
|
204
|
+
hasTemplate: true,
|
|
205
|
+
requiresInit: true,
|
|
206
|
+
blockingRules: {
|
|
207
|
+
check: 'now.md must have content',
|
|
208
|
+
message: 'No active task to complete',
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
|
|
212
|
+
{
|
|
213
|
+
name: 'ship',
|
|
214
|
+
category: 'core',
|
|
215
|
+
description: 'Commit, push, and celebrate shipped feature',
|
|
216
|
+
usage: {
|
|
217
|
+
claude: '/p:ship "user authentication"',
|
|
218
|
+
terminal: 'prjct ship "user authentication"',
|
|
219
|
+
},
|
|
220
|
+
params: '<feature>',
|
|
221
|
+
implemented: true,
|
|
222
|
+
hasTemplate: true,
|
|
223
|
+
requiresInit: true,
|
|
224
|
+
blockingRules: null,
|
|
225
|
+
features: [
|
|
226
|
+
'Lint checks (non-blocking)',
|
|
227
|
+
'Run tests (non-blocking)',
|
|
228
|
+
'Update docs',
|
|
229
|
+
'Update version',
|
|
230
|
+
'Update CHANGELOG',
|
|
231
|
+
'Git commit + push',
|
|
232
|
+
'Recommend compact',
|
|
233
|
+
],
|
|
234
|
+
},
|
|
235
|
+
|
|
236
|
+
{
|
|
237
|
+
name: 'bug',
|
|
238
|
+
category: 'core',
|
|
239
|
+
description: 'Report and track bugs with priority',
|
|
240
|
+
usage: {
|
|
241
|
+
claude: '/p:bug "login button not working"',
|
|
242
|
+
terminal: 'prjct bug "login button not working"',
|
|
243
|
+
},
|
|
244
|
+
params: '<description>',
|
|
245
|
+
implemented: true,
|
|
246
|
+
hasTemplate: true,
|
|
247
|
+
requiresInit: true,
|
|
248
|
+
blockingRules: null,
|
|
249
|
+
features: [
|
|
250
|
+
'Auto-detect severity (critical/high/medium/low)',
|
|
251
|
+
'Priority placement in next.md',
|
|
252
|
+
'Bug tracking in memory',
|
|
253
|
+
'Quick bug resolution workflow',
|
|
254
|
+
],
|
|
255
|
+
},
|
|
256
|
+
|
|
257
|
+
{
|
|
258
|
+
name: 'dash',
|
|
259
|
+
category: 'core',
|
|
260
|
+
description: 'Unified dashboard - status, progress, and roadmap',
|
|
261
|
+
usage: {
|
|
262
|
+
claude: '/p:dash [view]',
|
|
263
|
+
terminal: 'prjct dash [view]',
|
|
264
|
+
},
|
|
265
|
+
params: '[week|month|roadmap|compact]',
|
|
266
|
+
implemented: true,
|
|
267
|
+
hasTemplate: true,
|
|
268
|
+
requiresInit: true,
|
|
269
|
+
blockingRules: null,
|
|
270
|
+
features: [
|
|
271
|
+
'Project overview',
|
|
272
|
+
'Weekly/monthly progress',
|
|
273
|
+
'Roadmap view',
|
|
274
|
+
'ASCII graphics',
|
|
275
|
+
'Replaces 4 commands',
|
|
276
|
+
],
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
{
|
|
280
|
+
name: 'help',
|
|
281
|
+
category: 'core',
|
|
282
|
+
description: 'Contextual help and guidance',
|
|
283
|
+
usage: {
|
|
284
|
+
claude: '/p:help [topic]',
|
|
285
|
+
terminal: 'prjct help [topic]',
|
|
286
|
+
},
|
|
287
|
+
params: '[topic]',
|
|
288
|
+
implemented: true,
|
|
289
|
+
hasTemplate: true,
|
|
290
|
+
requiresInit: false,
|
|
291
|
+
blockingRules: null,
|
|
292
|
+
features: [
|
|
293
|
+
'Context-aware suggestions',
|
|
294
|
+
'Intent to action translator',
|
|
295
|
+
'Problem solving guidance',
|
|
296
|
+
'Absorbs ask/suggest/stuck',
|
|
297
|
+
],
|
|
298
|
+
},
|
|
299
|
+
|
|
300
|
+
{
|
|
301
|
+
name: 'sync',
|
|
302
|
+
category: 'core',
|
|
303
|
+
description: 'Sync project state and update workflow agents',
|
|
304
|
+
usage: {
|
|
305
|
+
claude: '/p:sync',
|
|
306
|
+
terminal: 'prjct sync',
|
|
307
|
+
},
|
|
308
|
+
params: null,
|
|
309
|
+
implemented: true,
|
|
310
|
+
hasTemplate: true,
|
|
311
|
+
requiresInit: true,
|
|
312
|
+
blockingRules: null,
|
|
313
|
+
features: [
|
|
314
|
+
'Syncs project state',
|
|
315
|
+
'Updates dynamic agents',
|
|
316
|
+
'Refreshes context',
|
|
317
|
+
],
|
|
318
|
+
},
|
|
319
|
+
]
|