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
|
@@ -2,14 +2,23 @@
|
|
|
2
2
|
allowed-tools: [Read, Write, Bash]
|
|
3
3
|
description: 'Set or show current task with session tracking'
|
|
4
4
|
timestamp-rule: 'GetTimestamp() for ALL timestamps'
|
|
5
|
+
architecture: 'JSON-first - Write to data/*.json, views are generated'
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# /p:now - Current Task with Session Tracking
|
|
8
9
|
|
|
10
|
+
## Architecture: JSON-First
|
|
11
|
+
|
|
12
|
+
**Source of Truth**: `data/state.json`
|
|
13
|
+
**Generated View**: `views/now.md` (auto-generated, do not edit directly)
|
|
14
|
+
|
|
15
|
+
All writes go to JSON. After writing, run `prjct generate-views --project={projectId}` to regenerate MD views.
|
|
16
|
+
|
|
9
17
|
## Context Variables
|
|
10
18
|
- `{projectId}`: From `.prjct/prjct.config.json`
|
|
11
19
|
- `{globalPath}`: `~/.prjct-cli/projects/{projectId}`
|
|
12
|
-
- `{
|
|
20
|
+
- `{dataPath}`: `{globalPath}/data`
|
|
21
|
+
- `{statePath}`: `{dataPath}/state.json`
|
|
13
22
|
- `{sessionPath}`: `{globalPath}/sessions/current.json`
|
|
14
23
|
- `{memoryPath}`: `{globalPath}/memory/context.jsonl`
|
|
15
24
|
- `{task}`: User-provided task (optional)
|
|
@@ -25,15 +34,19 @@ IF file not found:
|
|
|
25
34
|
|
|
26
35
|
## Step 2: Check Current State
|
|
27
36
|
|
|
28
|
-
###
|
|
29
|
-
READ: `{
|
|
37
|
+
### Read state.json (source of truth)
|
|
38
|
+
READ: `{statePath}`
|
|
30
39
|
|
|
31
40
|
IF file exists:
|
|
32
41
|
PARSE as JSON
|
|
33
|
-
EXTRACT: {currentTask}
|
|
42
|
+
EXTRACT: {currentTask} from state.currentTask
|
|
43
|
+
|
|
44
|
+
### Check for active session (legacy support)
|
|
45
|
+
READ: `{sessionPath}`
|
|
34
46
|
|
|
35
|
-
|
|
36
|
-
|
|
47
|
+
IF file exists:
|
|
48
|
+
PARSE as JSON
|
|
49
|
+
EXTRACT: {session.task}, {session.status}, {session.startedAt}, {session.duration}
|
|
37
50
|
|
|
38
51
|
## Step 3: Handle Cases
|
|
39
52
|
|
|
@@ -91,7 +104,25 @@ IF {task} is provided:
|
|
|
91
104
|
GENERATE: {sessionId} = "sess_" + 8 random alphanumeric chars
|
|
92
105
|
SET: {startedAt} = GetTimestamp()
|
|
93
106
|
|
|
94
|
-
###
|
|
107
|
+
### Write state.json (SOURCE OF TRUTH)
|
|
108
|
+
READ: `{statePath}` (or create default if not exists)
|
|
109
|
+
|
|
110
|
+
UPDATE state.json:
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"currentTask": {
|
|
114
|
+
"id": "task_{8_random_chars}",
|
|
115
|
+
"description": "{task}",
|
|
116
|
+
"startedAt": "{startedAt}",
|
|
117
|
+
"sessionId": "{sessionId}"
|
|
118
|
+
},
|
|
119
|
+
"lastUpdated": "{startedAt}"
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
WRITE: `{statePath}`
|
|
124
|
+
|
|
125
|
+
### Create session JSON (for detailed tracking)
|
|
95
126
|
WRITE: `{sessionPath}`
|
|
96
127
|
Content:
|
|
97
128
|
```json
|
|
@@ -117,17 +148,10 @@ IF {task} is provided:
|
|
|
117
148
|
}
|
|
118
149
|
```
|
|
119
150
|
|
|
120
|
-
###
|
|
121
|
-
|
|
122
|
-
Content:
|
|
123
|
-
```markdown
|
|
124
|
-
# NOW
|
|
125
|
-
|
|
126
|
-
**{task}**
|
|
151
|
+
### Generate views (auto-regenerate MD from JSON)
|
|
152
|
+
BASH: `cd {projectRoot} && npx prjct-generate-views --project={projectId}`
|
|
127
153
|
|
|
128
|
-
|
|
129
|
-
Session: {sessionId}
|
|
130
|
-
```
|
|
154
|
+
Note: This regenerates views/now.md from data/state.json automatically.
|
|
131
155
|
|
|
132
156
|
### Log to memory
|
|
133
157
|
APPEND to: `{memoryPath}`
|
|
@@ -2,14 +2,22 @@
|
|
|
2
2
|
allowed-tools: [Read, Write, Bash]
|
|
3
3
|
description: 'Ship feature with automated workflow'
|
|
4
4
|
timestamp-rule: 'GetTimestamp() and GetDate() for ALL timestamps'
|
|
5
|
+
architecture: 'JSON-first - Write to data/*.json, views are generated'
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# /p:ship - Ship Feature Workflow
|
|
8
9
|
|
|
10
|
+
## Architecture: JSON-First
|
|
11
|
+
|
|
12
|
+
**Source of Truth**: `data/shipped.json`, `data/roadmap.json`
|
|
13
|
+
**Generated Views**: `views/shipped.md`, `views/roadmap.md` (auto-generated)
|
|
14
|
+
|
|
9
15
|
## Context Variables
|
|
10
16
|
- `{projectId}`: From `.prjct/prjct.config.json`
|
|
11
17
|
- `{globalPath}`: `~/.prjct-cli/projects/{projectId}`
|
|
12
|
-
- `{
|
|
18
|
+
- `{dataPath}`: `{globalPath}/data`
|
|
19
|
+
- `{shippedPath}`: `{dataPath}/shipped.json`
|
|
20
|
+
- `{roadmapPath}`: `{dataPath}/roadmap.json`
|
|
13
21
|
- `{memoryPath}`: `{globalPath}/memory/context.jsonl`
|
|
14
22
|
- `{snapshotDir}`: `{globalPath}/snapshots`
|
|
15
23
|
- `{feature}`: User-provided feature name
|
|
@@ -144,51 +152,82 @@ IF contains "rejected" OR contains "failed":
|
|
|
144
152
|
IF contains "no upstream":
|
|
145
153
|
BASH: `git push -u origin HEAD`
|
|
146
154
|
|
|
147
|
-
## Step 8:
|
|
155
|
+
## Step 8: Update Shipped (JSON)
|
|
148
156
|
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
SET: {now} = GetTimestamp()
|
|
158
|
+
GENERATE: {shipId} = "ship_" + 8 random alphanumeric chars
|
|
151
159
|
|
|
152
|
-
|
|
153
|
-
|
|
160
|
+
READ: `{shippedPath}` (or create default if not exists)
|
|
161
|
+
|
|
162
|
+
Default structure:
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"items": [],
|
|
166
|
+
"lastUpdated": ""
|
|
167
|
+
}
|
|
168
|
+
```
|
|
154
169
|
|
|
155
|
-
|
|
170
|
+
### Get changes from git
|
|
171
|
+
BASH: `git log --oneline -5`
|
|
172
|
+
CAPTURE commit messages as {changes}
|
|
156
173
|
|
|
157
|
-
|
|
174
|
+
### Create shipped item
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"id": "{shipId}",
|
|
178
|
+
"name": "{feature}",
|
|
179
|
+
"version": "{newVersion}",
|
|
180
|
+
"type": "feature",
|
|
181
|
+
"changes": [{changes as array}],
|
|
182
|
+
"metrics": {
|
|
183
|
+
"lintStatus": "{lintStatus}",
|
|
184
|
+
"testStatus": "{testStatus}"
|
|
185
|
+
},
|
|
186
|
+
"shippedAt": "{now}"
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Update shipped.json
|
|
158
191
|
```json
|
|
159
|
-
{
|
|
192
|
+
{
|
|
193
|
+
"items": [
|
|
194
|
+
{new shipped item},
|
|
195
|
+
...existing items
|
|
196
|
+
],
|
|
197
|
+
"lastUpdated": "{now}"
|
|
198
|
+
}
|
|
160
199
|
```
|
|
161
200
|
|
|
162
|
-
|
|
201
|
+
WRITE: `{shippedPath}`
|
|
163
202
|
|
|
164
|
-
|
|
203
|
+
## Step 9: Update Roadmap Status (JSON)
|
|
165
204
|
|
|
166
|
-
|
|
205
|
+
READ: `{roadmapPath}`
|
|
167
206
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
207
|
+
### Find matching feature and update status
|
|
208
|
+
For feature matching {feature}:
|
|
209
|
+
Set status = "shipped"
|
|
210
|
+
Set shippedAt = "{now}"
|
|
211
|
+
Set version = "{newVersion}"
|
|
173
212
|
|
|
174
|
-
|
|
213
|
+
WRITE: `{roadmapPath}`
|
|
175
214
|
|
|
176
|
-
|
|
177
|
-
IF file has entries older than 30 days:
|
|
178
|
-
MOVE old entries to: `{globalPath}/progress/archive/shipped-{yearMonth}.md`
|
|
215
|
+
## Step 10: Generate Views
|
|
179
216
|
|
|
180
|
-
|
|
217
|
+
BASH: `cd {projectRoot} && npx prjct-generate-views --project={projectId}`
|
|
218
|
+
|
|
219
|
+
Note: This regenerates views/shipped.md, views/roadmap.md from JSON automatically.
|
|
181
220
|
|
|
182
|
-
## Step
|
|
221
|
+
## Step 11: Log to Memory
|
|
183
222
|
|
|
184
223
|
APPEND to: `{memoryPath}`
|
|
185
224
|
|
|
186
225
|
Single line (JSONL):
|
|
187
226
|
```json
|
|
188
|
-
{"timestamp":"{
|
|
227
|
+
{"timestamp":"{now}","action":"feature_shipped","shipId":"{shipId}","feature":"{feature}","version":"{newVersion}"}
|
|
189
228
|
```
|
|
190
229
|
|
|
191
|
-
## Step
|
|
230
|
+
## Step 12: Create Snapshot (Undo/Redo Support)
|
|
192
231
|
|
|
193
232
|
This creates a snapshot for the undo/redo system.
|
|
194
233
|
|
|
@@ -2,10 +2,19 @@
|
|
|
2
2
|
allowed-tools: [Read, Write, Bash, Glob, Grep]
|
|
3
3
|
description: 'Sync state + generate agents + detect patterns'
|
|
4
4
|
timestamp-rule: 'GetTimestamp() for all timestamps'
|
|
5
|
+
architecture: 'JSON-first - Write to data/*.json, views are generated'
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# /p:sync - Sync Project State
|
|
8
9
|
|
|
10
|
+
## Architecture: JSON-First
|
|
11
|
+
|
|
12
|
+
This command:
|
|
13
|
+
1. Analyzes the repository
|
|
14
|
+
2. Generates agents
|
|
15
|
+
3. Updates `data/project.json` (source of truth)
|
|
16
|
+
4. Regenerates all MD views from JSON
|
|
17
|
+
|
|
9
18
|
## Context Variables
|
|
10
19
|
- `{projectId}`: From `.prjct/prjct.config.json`
|
|
11
20
|
- `{globalPath}`: `~/.prjct-cli/projects/{projectId}`
|
|
@@ -181,7 +190,7 @@ IF exists:
|
|
|
181
190
|
|
|
182
191
|
WRITE: `{globalPath}/CLAUDE.md`
|
|
183
192
|
|
|
184
|
-
## Step 6: Update project.json
|
|
193
|
+
## Step 6: Update project.json (in data/)
|
|
185
194
|
|
|
186
195
|
This file is the source of truth for the web dashboard. It maps projectId → repoPath.
|
|
187
196
|
|
|
@@ -191,7 +200,7 @@ This file is the source of truth for the web dashboard. It maps projectId → re
|
|
|
191
200
|
- Try pyproject.toml → `[project] name`
|
|
192
201
|
- Fallback to directory name (last segment of current path)
|
|
193
202
|
|
|
194
|
-
WRITE: `{globalPath}/project.json`
|
|
203
|
+
WRITE: `{globalPath}/data/project.json`
|
|
195
204
|
|
|
196
205
|
```json
|
|
197
206
|
{
|
|
@@ -214,7 +223,23 @@ WRITE: `{globalPath}/project.json`
|
|
|
214
223
|
|
|
215
224
|
NOTE: If project.json already exists, preserve `createdAt` field. Always update `lastSync` and `techStack`.
|
|
216
225
|
|
|
217
|
-
|
|
226
|
+
Also write to root for backwards compatibility:
|
|
227
|
+
WRITE: `{globalPath}/project.json` (same content)
|
|
228
|
+
|
|
229
|
+
## Step 7: Generate Views from JSON
|
|
230
|
+
|
|
231
|
+
Regenerate all MD views from the JSON source of truth:
|
|
232
|
+
|
|
233
|
+
BASH: `cd {projectRoot} && npx prjct-generate-views --project={projectId}`
|
|
234
|
+
|
|
235
|
+
This ensures:
|
|
236
|
+
- views/now.md reflects data/state.json
|
|
237
|
+
- views/next.md reflects data/queue.json
|
|
238
|
+
- views/ideas.md reflects data/ideas.json
|
|
239
|
+
- views/roadmap.md reflects data/roadmap.json
|
|
240
|
+
- views/shipped.md reflects data/shipped.json
|
|
241
|
+
|
|
242
|
+
## Step 8: Log to Memory
|
|
218
243
|
|
|
219
244
|
APPEND to: `{memoryPath}`
|
|
220
245
|
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Router
|
|
3
|
-
* Orchestrates agent loading and context building for Claude delegation.
|
|
4
|
-
*
|
|
5
|
-
* @module agentic/agent-router
|
|
6
|
-
* @version 2.0.0
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const fs = require('fs').promises
|
|
10
|
-
const path = require('path')
|
|
11
|
-
const configManager = require('../infrastructure/config-manager')
|
|
12
|
-
const pathManager = require('../infrastructure/path-manager')
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Routes tasks to specialized agents based on Claude's decisions.
|
|
16
|
-
* Handles agent loading, context building, and usage logging.
|
|
17
|
-
*/
|
|
18
|
-
class AgentRouter {
|
|
19
|
-
constructor() {
|
|
20
|
-
/** @type {string|null} */
|
|
21
|
-
this.projectId = null
|
|
22
|
-
/** @type {string|null} */
|
|
23
|
-
this.agentsPath = null
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Initialize router with project context
|
|
28
|
-
*
|
|
29
|
-
* @param {string} projectPath - Path to the project
|
|
30
|
-
*/
|
|
31
|
-
async initialize(projectPath) {
|
|
32
|
-
this.projectId = await configManager.getProjectId(projectPath)
|
|
33
|
-
this.agentsPath = pathManager.getPath(this.projectId, 'agents')
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Load all available agents from project
|
|
38
|
-
*
|
|
39
|
-
* @returns {Promise<Array<{name: string, content: string}>>} Available agents
|
|
40
|
-
*/
|
|
41
|
-
async loadAvailableAgents() {
|
|
42
|
-
try {
|
|
43
|
-
const files = await fs.readdir(this.agentsPath)
|
|
44
|
-
const agents = []
|
|
45
|
-
|
|
46
|
-
for (const file of files) {
|
|
47
|
-
if (file.endsWith('.md')) {
|
|
48
|
-
const name = file.replace('.md', '')
|
|
49
|
-
const content = await fs.readFile(
|
|
50
|
-
path.join(this.agentsPath, file),
|
|
51
|
-
'utf-8'
|
|
52
|
-
)
|
|
53
|
-
agents.push({ name, content })
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return agents
|
|
58
|
-
} catch {
|
|
59
|
-
return []
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Get list of available agent names
|
|
65
|
-
*
|
|
66
|
-
* @returns {Promise<string[]>} Agent names
|
|
67
|
-
*/
|
|
68
|
-
async getAgentNames() {
|
|
69
|
-
const agents = await this.loadAvailableAgents()
|
|
70
|
-
return agents.map(a => a.name)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Load a specific agent by name
|
|
75
|
-
*
|
|
76
|
-
* @param {string} name - Agent name (without .md extension)
|
|
77
|
-
* @returns {Promise<{name: string, content: string}|null>} Agent or null
|
|
78
|
-
*/
|
|
79
|
-
async loadAgent(name) {
|
|
80
|
-
try {
|
|
81
|
-
const filePath = path.join(this.agentsPath, `${name}.md`)
|
|
82
|
-
const content = await fs.readFile(filePath, 'utf-8')
|
|
83
|
-
return { name, content }
|
|
84
|
-
} catch {
|
|
85
|
-
return null
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Build context for Claude to decide agent assignment
|
|
91
|
-
*
|
|
92
|
-
* @param {string|Object} task - Task description or object
|
|
93
|
-
* @param {string} projectPath - Project path
|
|
94
|
-
* @returns {Promise<Object>} Assignment context for Claude
|
|
95
|
-
*/
|
|
96
|
-
async buildAssignmentContext(task, projectPath) {
|
|
97
|
-
const agents = await this.getAgentNames()
|
|
98
|
-
|
|
99
|
-
return {
|
|
100
|
-
task: task.description || task,
|
|
101
|
-
availableAgents: agents,
|
|
102
|
-
projectPath,
|
|
103
|
-
projectId: this.projectId,
|
|
104
|
-
// Claude reads this and decides via template
|
|
105
|
-
_template: 'templates/agent-assignment.md'
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Log agent usage to JSONL file
|
|
111
|
-
*
|
|
112
|
-
* @param {string|Object} task - Task description
|
|
113
|
-
* @param {string|Object} agent - Agent used
|
|
114
|
-
* @param {string} projectPath - Project path (unused, kept for API compat)
|
|
115
|
-
*/
|
|
116
|
-
async logUsage(task, agent, projectPath) {
|
|
117
|
-
try {
|
|
118
|
-
const logPath = path.join(
|
|
119
|
-
process.env.HOME,
|
|
120
|
-
'.prjct-cli',
|
|
121
|
-
'projects',
|
|
122
|
-
this.projectId,
|
|
123
|
-
'agent-usage.jsonl'
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
const entry = JSON.stringify({
|
|
127
|
-
timestamp: new Date().toISOString(),
|
|
128
|
-
task: typeof task === 'string' ? task : task.description,
|
|
129
|
-
agent: agent.name || agent,
|
|
130
|
-
projectId: this.projectId
|
|
131
|
-
}) + '\n'
|
|
132
|
-
|
|
133
|
-
await fs.appendFile(logPath, entry)
|
|
134
|
-
} catch {
|
|
135
|
-
// Silent fail for logging
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
module.exports = AgentRouter
|