prjct-cli 0.11.4 → 0.12.0
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 +72 -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 +246 -54
- 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.ts +405 -0
- 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} +99 -89
- 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} +35 -18
- 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} +62 -23
- 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 +203 -403
- 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 +134 -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/BentoGrid/BentoGrid.tsx +18 -0
- 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/EmptyState/EmptyState.tsx +58 -0
- 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/IdeasCard/IdeasCard.tsx +48 -0
- 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/ProgressRing/ProgressRing.tsx +51 -0
- 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/RoadmapCard/RoadmapCard.tsx +77 -0
- package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +15 -0
- package/packages/web/components/RoadmapCard/index.ts +2 -0
- package/packages/web/components/ShipsCard/ShipsCard.tsx +52 -0
- 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/SparklineChart/SparklineChart.tsx +38 -0
- 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/StreakCard/StreakCard.tsx +53 -0
- 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/components/ui/tooltip.tsx +2 -2
- 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 +598 -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/next-env.d.ts +1 -1
- package/packages/web/package.json +10 -6
- package/packages/web/server.ts +36 -6
- 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 -128
- package/core/agentic/chain-of-thought.js +0 -578
- package/core/agentic/command-executor.js +0 -421
- 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 -850
- package/core/agentic/parallel-tools.js +0 -366
- package/core/agentic/plan-mode.js +0 -572
- package/core/agentic/prompt-builder.js +0 -338
- 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 -799
- 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/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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,77 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.12.0] - 2025-12-10
|
|
4
|
+
|
|
5
|
+
### Added - JSON-First Architecture (Zero Data Loss)
|
|
6
|
+
|
|
7
|
+
Major refactor: JSON is now source of truth. Claude reads/writes JSON, MD views are auto-generated.
|
|
8
|
+
|
|
9
|
+
- **New Data Flow**
|
|
10
|
+
- `data/*.json` - Source of truth (Claude reads/writes)
|
|
11
|
+
- `views/*.md` - Auto-generated from JSON (Claude does NOT write MD)
|
|
12
|
+
- Web app reads JSON directly (no regex parsing)
|
|
13
|
+
|
|
14
|
+
- **LLM-Based Migration** (`/api/migrate`)
|
|
15
|
+
- OpenRouter Claude-3.5-haiku extracts structured data from legacy MD
|
|
16
|
+
- Comprehensive pattern extraction rules for ZERO data loss
|
|
17
|
+
- Migrates: state, queue, ideas, roadmap, shipped, metrics, project
|
|
18
|
+
|
|
19
|
+
- **Enriched Schemas** (capturing ALL data from MD)
|
|
20
|
+
- `shipped.json`: Added `agent`, `description`, `codeSnippets[]`, `commit{hash,message}`
|
|
21
|
+
- `queue.json`: Added `agent`, `groupName`, `groupId` per task
|
|
22
|
+
- `ideas.json`: Added `source`, `sourceFiles[]`, `stack{}`, `modules[]`, `roles[]`, `risks[]`
|
|
23
|
+
- `roadmap.json`: Added `duration{}`, `taskCount`, `agent`, `sprintName`, `completedDate`
|
|
24
|
+
|
|
25
|
+
- **View Generator** (`bin/generate-views.js`)
|
|
26
|
+
- Generates MD from JSON for Claude context
|
|
27
|
+
- Templates: now.md, next.md, ideas.md, roadmap.md, shipped.md
|
|
28
|
+
|
|
29
|
+
- **Files Added**:
|
|
30
|
+
- `packages/web/lib/services/migration.server.ts` - LLM migration service
|
|
31
|
+
- `packages/web/app/api/migrate/route.ts` - Migration API endpoint
|
|
32
|
+
- `core/view-generator.ts` - View generation from JSON
|
|
33
|
+
- `bin/generate-views.js` - CLI for view generation
|
|
34
|
+
|
|
35
|
+
- **Files Modified**:
|
|
36
|
+
- `core/schemas/*.ts` - All schemas with enriched fields
|
|
37
|
+
- `packages/web/lib/json-loader.ts` - Types synced with schemas
|
|
38
|
+
|
|
39
|
+
## [0.11.6] - 2025-12-09
|
|
40
|
+
|
|
41
|
+
### Fixed - Terminal Responsive & Performance Issues
|
|
42
|
+
|
|
43
|
+
Bug fixes for terminal UX issues when resizing browser and handling large output.
|
|
44
|
+
|
|
45
|
+
- **Resize Bug Fixed** - Terminal no longer gets stuck at ~100px² when resizing browser
|
|
46
|
+
- Replaced `window.addEventListener('resize')` with `ResizeObserver`
|
|
47
|
+
- Added dimension validation before fitting (handles hidden tabs correctly)
|
|
48
|
+
- Added proper cleanup on unmount
|
|
49
|
+
- Added re-fit on tab activation
|
|
50
|
+
|
|
51
|
+
- **Performance Improvements** - Terminal now handles large output smoothly
|
|
52
|
+
- Added client-side output buffering with `requestAnimationFrame`
|
|
53
|
+
- Added server-side PTY output buffering (16ms batch window)
|
|
54
|
+
- Added terminal config optimizations (`scrollback: 5000`, `smoothScrollDuration: 0`)
|
|
55
|
+
|
|
56
|
+
- **Files Modified**:
|
|
57
|
+
- `packages/web/hooks/useClaudeTerminal.ts` - ResizeObserver, output batching, fit function
|
|
58
|
+
- `packages/web/components/TerminalTab.tsx` - Re-fit on tab activation
|
|
59
|
+
- `packages/web/server.ts` - PTY output buffering
|
|
60
|
+
|
|
61
|
+
## [0.11.5] - 2025-12-09
|
|
62
|
+
|
|
63
|
+
### Fixed - Production Server Mode
|
|
64
|
+
|
|
65
|
+
Critical bug fix: `prjct serve` now runs in production mode instead of development mode.
|
|
66
|
+
|
|
67
|
+
- **Server Mode** - Changed from dev to production
|
|
68
|
+
- Default port: 3000 → 9472 (avoids conflicts)
|
|
69
|
+
- Mode: `npm run dev` → `npm run start:prod` with `NODE_ENV=production`
|
|
70
|
+
- Auto-build on first run if `.next/` doesn't exist
|
|
71
|
+
- All features now work correctly (were broken in dev mode)
|
|
72
|
+
|
|
73
|
+
- **packages/web/package.json** - Added `start:prod` script
|
|
74
|
+
|
|
3
75
|
## [0.11.0] - 2025-12-08
|
|
4
76
|
|
|
5
77
|
### Added - Web Application & Server Components
|
package/README.md
CHANGED
|
@@ -17,6 +17,34 @@ Developer momentum tool for indie hackers and small teams.
|
|
|
17
17
|
[](https://github.com/jlopezlira/prjct-cli/actions/workflows/test.yml)
|
|
18
18
|
[](https://prjct.app)
|
|
19
19
|
|
|
20
|
+
> **New to prjct?** You don't need to memorize commands. Just use `p.` and talk naturally:
|
|
21
|
+
> - `p. start working on user auth`
|
|
22
|
+
> - `p. I'm done`
|
|
23
|
+
> - `p. ship the authentication`
|
|
24
|
+
|
|
25
|
+
## 💬 p. Trigger - Zero Memorization
|
|
26
|
+
|
|
27
|
+
**You don't need to memorize commands.** Just use the `p.` prefix and talk naturally!
|
|
28
|
+
|
|
29
|
+
The system detects your intent and maps it to the right command - **works in any language**:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Instead of: Just say:
|
|
33
|
+
/p:now "implement auth" → "p. I want to start building the auth system"
|
|
34
|
+
/p:done → "p. I'm done" or "p. finished"
|
|
35
|
+
/p:ship "feature" → "p. ship the authentication"
|
|
36
|
+
/p:stuck "error" → "p. I'm stuck on this error"
|
|
37
|
+
/p:idea "add feature" → "p. I have an idea about dark mode"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**How it works:**
|
|
41
|
+
|
|
42
|
+
- Simple `p.` prefix signals prjct context
|
|
43
|
+
- Works in English, Spanish, German, French - any language
|
|
44
|
+
- System detects intent and executes the right command
|
|
45
|
+
- Auto-validates you're in a prjct project before execution
|
|
46
|
+
- Every command response suggests what to do next
|
|
47
|
+
|
|
20
48
|
## 🤖 Claude-Native Architecture
|
|
21
49
|
|
|
22
50
|
**prjct-cli is purpose-built for Claude's unique capabilities:**
|
|
@@ -38,25 +66,25 @@ We chose to focus 100% on Claude to deliver:
|
|
|
38
66
|
|
|
39
67
|
## ⚡ Installation
|
|
40
68
|
|
|
41
|
-
###
|
|
69
|
+
### Using Bun (Recommended)
|
|
42
70
|
|
|
43
|
-
|
|
71
|
+
prjct-cli is built with Bun for maximum performance:
|
|
44
72
|
|
|
45
73
|
```bash
|
|
46
|
-
|
|
74
|
+
bun install -g prjct-cli
|
|
47
75
|
```
|
|
48
76
|
|
|
49
|
-
|
|
77
|
+
### Alternative Package Managers
|
|
50
78
|
|
|
51
79
|
```bash
|
|
80
|
+
# Using npm
|
|
81
|
+
npm install -g prjct-cli
|
|
82
|
+
|
|
52
83
|
# Using yarn
|
|
53
84
|
yarn global add prjct-cli
|
|
54
85
|
|
|
55
86
|
# Using pnpm
|
|
56
87
|
pnpm add -g prjct-cli
|
|
57
|
-
|
|
58
|
-
# Using bun
|
|
59
|
-
bun install -g prjct-cli
|
|
60
88
|
```
|
|
61
89
|
|
|
62
90
|
### From GitHub Packages
|
|
@@ -69,7 +97,7 @@ npm install -g @jlopezlira/prjct-cli --registry=https://npm.pkg.github.com
|
|
|
69
97
|
|
|
70
98
|
For easier installation from GitHub Packages, see [GitHub Packages Setup](docs/GITHUB_PACKAGES.md).
|
|
71
99
|
|
|
72
|
-
**Requirements**: Node.js 18
|
|
100
|
+
**Requirements**: Bun 1.0+ or Node.js 18+
|
|
73
101
|
|
|
74
102
|
> **Note**: The CLI automatically detects updates and notifies you when a new version is available. Simply run `npm update -g prjct-cli` to upgrade.
|
|
75
103
|
|
|
@@ -127,32 +155,60 @@ cd prjct-cli
|
|
|
127
155
|
- ✅ **Auto-detects your environment** (Claude or Terminal fallback)
|
|
128
156
|
- ✅ **Configures shell** (bash/zsh) automatically
|
|
129
157
|
|
|
130
|
-
##
|
|
158
|
+
## ⚡ 5-Minute Quick Start
|
|
131
159
|
|
|
132
|
-
|
|
160
|
+
Get productive with prjct-cli in under 5 minutes.
|
|
133
161
|
|
|
134
|
-
|
|
162
|
+
### Step 1: Initialize Your Project
|
|
135
163
|
|
|
164
|
+
```bash
|
|
165
|
+
cd your-project
|
|
136
166
|
```
|
|
137
|
-
✨ Natural Language with p. Trigger:
|
|
138
167
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
/p:
|
|
142
|
-
/p:ship "feature" → "p. ship the authentication"
|
|
143
|
-
/p:stuck "error" → "p. I'm stuck on this error"
|
|
144
|
-
/p:idea "add feature" → "p. I have an idea about dark mode"
|
|
168
|
+
In Claude Code or Claude Desktop:
|
|
169
|
+
```
|
|
170
|
+
/p:init
|
|
145
171
|
```
|
|
146
172
|
|
|
147
|
-
|
|
173
|
+
Or just say: `p. initialize this project`
|
|
148
174
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
175
|
+
### Step 2: Start Your First Task
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
/p:now "implement user login"
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Or naturally: `p. I want to start working on user login`
|
|
182
|
+
|
|
183
|
+
### Step 3: Work on Your Task
|
|
184
|
+
|
|
185
|
+
Just code! prjct tracks your focus.
|
|
186
|
+
|
|
187
|
+
### Step 4: Complete Your Task
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
/p:done
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Or naturally: `p. finished`
|
|
194
|
+
|
|
195
|
+
### Step 5: Ship It!
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
/p:ship "user authentication"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Or naturally: `p. ship the authentication`
|
|
202
|
+
|
|
203
|
+
**That's it!** You now know the core workflow.
|
|
204
|
+
|
|
205
|
+
### What's Next?
|
|
206
|
+
|
|
207
|
+
- `/p:recap` - See your progress
|
|
208
|
+
- `/p:help` - Get contextual guidance
|
|
209
|
+
- `/p:idea "something cool"` - Capture ideas without interrupting
|
|
154
210
|
|
|
155
|
-
**
|
|
211
|
+
> **Pro tip:** You don't need to memorize commands. Just use `p.` and describe what you want!
|
|
156
212
|
|
|
157
213
|
## 🚀 Built for Claude - Ship Fast, No BS
|
|
158
214
|
|
package/bin/dev.js
CHANGED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* prjct generate-views - Generate MD views from JSON data
|
|
5
|
+
*
|
|
6
|
+
* Converts JSON source of truth to readable MD files for Claude.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* prjct generate-views --project=<projectId> Generate views for specific project
|
|
10
|
+
* prjct generate-views --all Generate views for all projects
|
|
11
|
+
* prjct generate-views --view=<name> Generate specific view (now, next, ideas, roadmap, shipped)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const path = require('path')
|
|
15
|
+
const fs = require('fs/promises')
|
|
16
|
+
const os = require('os')
|
|
17
|
+
|
|
18
|
+
// Colors for terminal output
|
|
19
|
+
const colors = {
|
|
20
|
+
reset: '\x1b[0m',
|
|
21
|
+
bright: '\x1b[1m',
|
|
22
|
+
dim: '\x1b[2m',
|
|
23
|
+
cyan: '\x1b[36m',
|
|
24
|
+
green: '\x1b[32m',
|
|
25
|
+
yellow: '\x1b[33m',
|
|
26
|
+
red: '\x1b[31m',
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const GLOBAL_STORAGE = path.join(os.homedir(), '.prjct-cli', 'projects')
|
|
30
|
+
|
|
31
|
+
// Parse command line arguments
|
|
32
|
+
function parseArgs(argv) {
|
|
33
|
+
const args = {
|
|
34
|
+
project: null,
|
|
35
|
+
all: false,
|
|
36
|
+
view: null,
|
|
37
|
+
help: false,
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
for (const arg of argv.slice(2)) {
|
|
41
|
+
if (arg === '--help' || arg === '-h') {
|
|
42
|
+
args.help = true
|
|
43
|
+
} else if (arg === '--all') {
|
|
44
|
+
args.all = true
|
|
45
|
+
} else if (arg.startsWith('--project=')) {
|
|
46
|
+
args.project = arg.split('=')[1]
|
|
47
|
+
} else if (arg.startsWith('--view=')) {
|
|
48
|
+
args.view = arg.split('=')[1]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return args
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Print help message
|
|
56
|
+
function printHelp() {
|
|
57
|
+
console.log(`
|
|
58
|
+
${colors.cyan}${colors.bright}prjct generate-views${colors.reset}
|
|
59
|
+
|
|
60
|
+
Generate MD views from JSON data files.
|
|
61
|
+
|
|
62
|
+
${colors.bright}Usage:${colors.reset}
|
|
63
|
+
prjct generate-views --project=<projectId> Generate views for specific project
|
|
64
|
+
prjct generate-views --all Generate views for all projects
|
|
65
|
+
prjct generate-views --view=<name> Generate specific view only
|
|
66
|
+
|
|
67
|
+
${colors.bright}Options:${colors.reset}
|
|
68
|
+
--project=<id> Project ID to generate views for
|
|
69
|
+
--all Generate views for all projects
|
|
70
|
+
--view=<name> Generate specific view (now, next, ideas, roadmap, shipped)
|
|
71
|
+
--help, -h Show this help message
|
|
72
|
+
|
|
73
|
+
${colors.bright}Views:${colors.reset}
|
|
74
|
+
now Current task status (from state.json)
|
|
75
|
+
next Priority queue (from queue.json)
|
|
76
|
+
ideas Idea backlog (from ideas.json)
|
|
77
|
+
roadmap Feature roadmap (from roadmap.json)
|
|
78
|
+
shipped Shipped items (from shipped.json)
|
|
79
|
+
|
|
80
|
+
${colors.bright}Examples:${colors.reset}
|
|
81
|
+
prjct generate-views --project=abc123
|
|
82
|
+
prjct generate-views --all
|
|
83
|
+
prjct generate-views --project=abc123 --view=now
|
|
84
|
+
`)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Get list of all project IDs
|
|
88
|
+
async function getAllProjects() {
|
|
89
|
+
try {
|
|
90
|
+
const entries = await fs.readdir(GLOBAL_STORAGE, { withFileTypes: true })
|
|
91
|
+
return entries
|
|
92
|
+
.filter((entry) => entry.isDirectory())
|
|
93
|
+
.map((entry) => entry.name)
|
|
94
|
+
} catch {
|
|
95
|
+
return []
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Import and run the view generator
|
|
100
|
+
async function generateViews(projectId, viewName = null) {
|
|
101
|
+
// Dynamic import of the TypeScript module
|
|
102
|
+
const generatorPath = path.join(__dirname, '..', 'core', 'view-generator.ts')
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
const generator = await import(generatorPath)
|
|
106
|
+
|
|
107
|
+
if (viewName) {
|
|
108
|
+
// Generate specific view
|
|
109
|
+
await generator.generateView(projectId, viewName)
|
|
110
|
+
return { generated: [`${viewName}.md`], errors: [] }
|
|
111
|
+
} else {
|
|
112
|
+
// Generate all views
|
|
113
|
+
return await generator.generateViews(projectId)
|
|
114
|
+
}
|
|
115
|
+
} catch (err) {
|
|
116
|
+
return {
|
|
117
|
+
generated: [],
|
|
118
|
+
errors: [err instanceof Error ? err.message : 'Unknown error'],
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Main function
|
|
124
|
+
async function main() {
|
|
125
|
+
const args = parseArgs(process.argv)
|
|
126
|
+
|
|
127
|
+
if (args.help) {
|
|
128
|
+
printHelp()
|
|
129
|
+
process.exit(0)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Validate arguments
|
|
133
|
+
if (!args.project && !args.all) {
|
|
134
|
+
console.log(`${colors.red}Error: Specify --project=<id> or --all${colors.reset}`)
|
|
135
|
+
console.log(`${colors.dim}Run 'prjct generate-views --help' for usage${colors.reset}`)
|
|
136
|
+
process.exit(1)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Validate view name if specified
|
|
140
|
+
const validViews = ['now', 'next', 'ideas', 'roadmap', 'shipped']
|
|
141
|
+
if (args.view && !validViews.includes(args.view)) {
|
|
142
|
+
console.log(`${colors.red}Error: Invalid view '${args.view}'${colors.reset}`)
|
|
143
|
+
console.log(`${colors.dim}Valid views: ${validViews.join(', ')}${colors.reset}`)
|
|
144
|
+
process.exit(1)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Get projects to process
|
|
148
|
+
let projects = []
|
|
149
|
+
if (args.all) {
|
|
150
|
+
projects = await getAllProjects()
|
|
151
|
+
if (projects.length === 0) {
|
|
152
|
+
console.log(`${colors.yellow}No projects found in ${GLOBAL_STORAGE}${colors.reset}`)
|
|
153
|
+
process.exit(0)
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
projects = [args.project]
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
console.log(`${colors.cyan}${colors.bright}Generating views...${colors.reset}\n`)
|
|
160
|
+
|
|
161
|
+
let totalGenerated = 0
|
|
162
|
+
let totalErrors = 0
|
|
163
|
+
|
|
164
|
+
for (const projectId of projects) {
|
|
165
|
+
const projectPath = path.join(GLOBAL_STORAGE, projectId)
|
|
166
|
+
|
|
167
|
+
// Check project exists
|
|
168
|
+
try {
|
|
169
|
+
await fs.access(projectPath)
|
|
170
|
+
} catch {
|
|
171
|
+
console.log(`${colors.yellow}⚠ Project not found: ${projectId}${colors.reset}`)
|
|
172
|
+
totalErrors++
|
|
173
|
+
continue
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const result = await generateViews(projectId, args.view)
|
|
177
|
+
|
|
178
|
+
if (result.generated.length > 0) {
|
|
179
|
+
console.log(`${colors.green}✓ ${projectId}${colors.reset}`)
|
|
180
|
+
for (const file of result.generated) {
|
|
181
|
+
console.log(` ${colors.dim}→ ${file}${colors.reset}`)
|
|
182
|
+
}
|
|
183
|
+
totalGenerated += result.generated.length
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (result.errors.length > 0) {
|
|
187
|
+
console.log(`${colors.red}✗ ${projectId}${colors.reset}`)
|
|
188
|
+
for (const error of result.errors) {
|
|
189
|
+
console.log(` ${colors.red}→ ${error}${colors.reset}`)
|
|
190
|
+
}
|
|
191
|
+
totalErrors += result.errors.length
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Summary
|
|
196
|
+
console.log('')
|
|
197
|
+
if (totalGenerated > 0) {
|
|
198
|
+
console.log(`${colors.green}${colors.bright}✓ Generated ${totalGenerated} view(s)${colors.reset}`)
|
|
199
|
+
}
|
|
200
|
+
if (totalErrors > 0) {
|
|
201
|
+
console.log(`${colors.red}✗ ${totalErrors} error(s)${colors.reset}`)
|
|
202
|
+
process.exit(1)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
main().catch((err) => {
|
|
207
|
+
console.error(`${colors.red}Error: ${err.message}${colors.reset}`)
|
|
208
|
+
process.exit(1)
|
|
209
|
+
})
|