prjct-cli 0.18.2 → 0.20.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 +82 -0
- package/CLAUDE.md +74 -211
- package/core/agentic/prompt-builder.ts +3 -7
- package/core/command-registry/optional-commands.ts +0 -20
- package/core/infrastructure/command-installer/command-installer.ts +8 -1
- package/core/infrastructure/command-installer/global-config.ts +31 -1
- package/core/infrastructure/command-installer/index.ts +1 -1
- package/core/infrastructure/setup.ts +3 -0
- package/package.json +3 -17
- package/templates/agentic/agents/uxui.md +210 -0
- package/templates/commands/bug.md +219 -41
- package/templates/commands/done.md +57 -258
- package/templates/commands/feature.md +368 -80
- package/templates/commands/now.md +72 -277
- package/templates/commands/ship.md +167 -246
- package/templates/commands/sync.md +62 -3
- package/templates/commands/test.md +160 -20
- package/templates/global/CLAUDE.md +40 -205
- package/templates/global/docs/agents.md +88 -0
- package/templates/global/docs/architecture.md +103 -0
- package/templates/global/docs/commands.md +98 -0
- package/templates/global/docs/validation.md +95 -0
- package/bin/dev.js +0 -216
- package/bin/serve.js +0 -361
- package/packages/web/README.md +0 -36
- package/packages/web/app/api/claude/sessions/route.ts +0 -44
- package/packages/web/app/api/claude/status/route.ts +0 -34
- package/packages/web/app/api/projects/[id]/icon/route.ts +0 -33
- package/packages/web/app/api/projects/[id]/momentum/route.ts +0 -257
- package/packages/web/app/api/projects/[id]/route.ts +0 -29
- package/packages/web/app/api/projects/[id]/stats/route.ts +0 -41
- package/packages/web/app/api/projects/[id]/status/route.ts +0 -21
- package/packages/web/app/api/projects/route.ts +0 -16
- package/packages/web/app/api/sessions/current/route.ts +0 -132
- package/packages/web/app/api/sessions/history/route.ts +0 -204
- package/packages/web/app/error.tsx +0 -34
- package/packages/web/app/favicon.ico +0 -0
- package/packages/web/app/globals.css +0 -198
- package/packages/web/app/layout.tsx +0 -53
- package/packages/web/app/loading.tsx +0 -7
- package/packages/web/app/not-found.tsx +0 -25
- package/packages/web/app/page.tsx +0 -12
- package/packages/web/app/project/[id]/code/layout.tsx +0 -18
- package/packages/web/app/project/[id]/code/page.tsx +0 -408
- package/packages/web/app/project/[id]/error.tsx +0 -41
- package/packages/web/app/project/[id]/loading.tsx +0 -9
- package/packages/web/app/project/[id]/not-found.tsx +0 -27
- package/packages/web/app/project/[id]/page.tsx +0 -384
- package/packages/web/app/project/[id]/reports/page.tsx +0 -59
- package/packages/web/app/project/[id]/reports/print/page.tsx +0 -58
- package/packages/web/app/sessions/page.tsx +0 -165
- package/packages/web/app/settings/page.tsx +0 -151
- package/packages/web/components/ActivityTimeline/ActivityTimeline.constants.ts +0 -2
- package/packages/web/components/ActivityTimeline/ActivityTimeline.tsx +0 -49
- package/packages/web/components/ActivityTimeline/ActivityTimeline.types.ts +0 -8
- package/packages/web/components/ActivityTimeline/hooks/index.ts +0 -2
- package/packages/web/components/ActivityTimeline/hooks/useExpandable.ts +0 -9
- package/packages/web/components/ActivityTimeline/hooks/useGroupedEvents.ts +0 -23
- package/packages/web/components/ActivityTimeline/index.ts +0 -2
- package/packages/web/components/AgentsCard/AgentsCard.tsx +0 -93
- package/packages/web/components/AgentsCard/AgentsCard.types.ts +0 -14
- package/packages/web/components/AgentsCard/index.ts +0 -2
- package/packages/web/components/AppSidebar/AppSidebar.tsx +0 -316
- package/packages/web/components/AppSidebar/index.ts +0 -1
- package/packages/web/components/BackLink/BackLink.tsx +0 -18
- package/packages/web/components/BackLink/BackLink.types.ts +0 -5
- package/packages/web/components/BackLink/index.ts +0 -2
- package/packages/web/components/BentoCard/BentoCard.constants.ts +0 -16
- package/packages/web/components/BentoCard/BentoCard.tsx +0 -48
- package/packages/web/components/BentoCard/BentoCard.types.ts +0 -15
- package/packages/web/components/BentoCard/index.ts +0 -2
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.constants.ts +0 -9
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.tsx +0 -18
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.types.ts +0 -5
- package/packages/web/components/BentoCardSkeleton/index.ts +0 -2
- package/packages/web/components/BentoGrid/BentoGrid.tsx +0 -18
- package/packages/web/components/BentoGrid/BentoGrid.types.ts +0 -4
- package/packages/web/components/BentoGrid/index.ts +0 -2
- package/packages/web/components/BlockersCard/BlockersCard.tsx +0 -75
- package/packages/web/components/BlockersCard/BlockersCard.types.ts +0 -12
- package/packages/web/components/BlockersCard/index.ts +0 -2
- package/packages/web/components/CommandBar/CommandBar.tsx +0 -67
- package/packages/web/components/CommandBar/index.ts +0 -1
- package/packages/web/components/CommandButton/CommandButton.tsx +0 -46
- package/packages/web/components/CommandButton/index.ts +0 -1
- package/packages/web/components/ConnectionStatus/ConnectionStatus.tsx +0 -29
- package/packages/web/components/ConnectionStatus/index.ts +0 -1
- package/packages/web/components/DashboardContent/DashboardContent.tsx +0 -284
- package/packages/web/components/DashboardContent/index.ts +0 -1
- package/packages/web/components/DateGroup/DateGroup.tsx +0 -18
- package/packages/web/components/DateGroup/DateGroup.types.ts +0 -6
- package/packages/web/components/DateGroup/DateGroup.utils.ts +0 -11
- package/packages/web/components/DateGroup/index.ts +0 -2
- package/packages/web/components/EmptyState/EmptyState.tsx +0 -76
- package/packages/web/components/EmptyState/EmptyState.types.ts +0 -11
- package/packages/web/components/EmptyState/index.ts +0 -2
- package/packages/web/components/EventRow/EventRow.constants.ts +0 -10
- package/packages/web/components/EventRow/EventRow.tsx +0 -49
- package/packages/web/components/EventRow/EventRow.types.ts +0 -7
- package/packages/web/components/EventRow/EventRow.utils.ts +0 -49
- package/packages/web/components/EventRow/index.ts +0 -2
- package/packages/web/components/ExpandButton/ExpandButton.tsx +0 -18
- package/packages/web/components/ExpandButton/ExpandButton.types.ts +0 -6
- package/packages/web/components/ExpandButton/index.ts +0 -2
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.tsx +0 -14
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.types.ts +0 -5
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.utils.ts +0 -13
- package/packages/web/components/HealthGradientBackground/index.ts +0 -2
- package/packages/web/components/HeroSection/HeroSection.tsx +0 -92
- package/packages/web/components/HeroSection/HeroSection.types.ts +0 -14
- package/packages/web/components/HeroSection/HeroSection.utils.ts +0 -11
- package/packages/web/components/HeroSection/hooks/index.ts +0 -2
- package/packages/web/components/HeroSection/hooks/useCountUp.ts +0 -45
- package/packages/web/components/HeroSection/hooks/useWeeklyActivity.ts +0 -18
- package/packages/web/components/HeroSection/index.ts +0 -2
- package/packages/web/components/IdeasCard/IdeasCard.tsx +0 -115
- package/packages/web/components/IdeasCard/IdeasCard.types.ts +0 -10
- package/packages/web/components/IdeasCard/index.ts +0 -2
- package/packages/web/components/InsightMessage/InsightMessage.tsx +0 -9
- package/packages/web/components/InsightMessage/InsightMessage.types.ts +0 -3
- package/packages/web/components/InsightMessage/index.ts +0 -2
- package/packages/web/components/Logo/Logo.tsx +0 -65
- package/packages/web/components/Logo/index.ts +0 -1
- package/packages/web/components/MarkdownContent/MarkdownContent.tsx +0 -123
- package/packages/web/components/MarkdownContent/index.ts +0 -1
- package/packages/web/components/MasonryGrid/MasonryGrid.tsx +0 -18
- package/packages/web/components/MasonryGrid/index.ts +0 -1
- package/packages/web/components/MomentumWidget/MomentumWidget.tsx +0 -119
- package/packages/web/components/MomentumWidget/MomentumWidget.types.ts +0 -16
- package/packages/web/components/MomentumWidget/index.ts +0 -2
- package/packages/web/components/NowCard/NowCard.tsx +0 -118
- package/packages/web/components/NowCard/NowCard.types.ts +0 -16
- package/packages/web/components/NowCard/index.ts +0 -2
- package/packages/web/components/PageHeader/PageHeader.tsx +0 -24
- package/packages/web/components/PageHeader/index.ts +0 -1
- package/packages/web/components/ProgressRing/ProgressRing.constants.ts +0 -20
- package/packages/web/components/ProgressRing/ProgressRing.tsx +0 -51
- package/packages/web/components/ProgressRing/ProgressRing.types.ts +0 -11
- package/packages/web/components/ProgressRing/index.ts +0 -2
- package/packages/web/components/ProjectAvatar/ProjectAvatar.tsx +0 -54
- package/packages/web/components/ProjectAvatar/index.ts +0 -1
- package/packages/web/components/ProjectColorDot/ProjectColorDot.tsx +0 -37
- package/packages/web/components/ProjectColorDot/index.ts +0 -1
- package/packages/web/components/ProjectSelectorModal/ProjectSelectorModal.tsx +0 -104
- package/packages/web/components/ProjectSelectorModal/index.ts +0 -1
- package/packages/web/components/Providers/Providers.tsx +0 -48
- package/packages/web/components/Providers/index.ts +0 -1
- package/packages/web/components/QueueCard/QueueCard.tsx +0 -125
- package/packages/web/components/QueueCard/QueueCard.types.ts +0 -12
- package/packages/web/components/QueueCard/QueueCard.utils.ts +0 -12
- package/packages/web/components/QueueCard/index.ts +0 -2
- package/packages/web/components/RecoverCard/RecoverCard.tsx +0 -72
- package/packages/web/components/RecoverCard/RecoverCard.types.ts +0 -16
- package/packages/web/components/RecoverCard/index.ts +0 -2
- package/packages/web/components/RoadmapCard/RoadmapCard.tsx +0 -145
- package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +0 -16
- package/packages/web/components/RoadmapCard/index.ts +0 -2
- package/packages/web/components/ShipsCard/ShipsCard.tsx +0 -95
- package/packages/web/components/ShipsCard/ShipsCard.types.ts +0 -14
- package/packages/web/components/ShipsCard/ShipsCard.utils.ts +0 -4
- package/packages/web/components/ShipsCard/index.ts +0 -2
- package/packages/web/components/SparklineChart/SparklineChart.tsx +0 -40
- package/packages/web/components/SparklineChart/SparklineChart.types.ts +0 -6
- package/packages/web/components/SparklineChart/index.ts +0 -2
- package/packages/web/components/StatsMasonry/StatsMasonry.tsx +0 -95
- package/packages/web/components/StatsMasonry/index.ts +0 -1
- package/packages/web/components/StreakCard/StreakCard.constants.ts +0 -2
- package/packages/web/components/StreakCard/StreakCard.tsx +0 -55
- package/packages/web/components/StreakCard/StreakCard.types.ts +0 -4
- package/packages/web/components/StreakCard/index.ts +0 -2
- package/packages/web/components/TasksCounter/TasksCounter.tsx +0 -14
- package/packages/web/components/TasksCounter/TasksCounter.types.ts +0 -3
- package/packages/web/components/TasksCounter/index.ts +0 -2
- package/packages/web/components/TechStackBadges/TechStackBadges.tsx +0 -28
- package/packages/web/components/TechStackBadges/index.ts +0 -1
- package/packages/web/components/TerminalDock/DockToggleTab.tsx +0 -29
- package/packages/web/components/TerminalDock/TerminalDock.tsx +0 -386
- package/packages/web/components/TerminalDock/TerminalDockTab.tsx +0 -130
- package/packages/web/components/TerminalDock/TerminalTabBar.tsx +0 -142
- package/packages/web/components/TerminalDock/index.ts +0 -2
- package/packages/web/components/TerminalTabs/TerminalTab.tsx +0 -95
- package/packages/web/components/TerminalTabs/TerminalTabs.tsx +0 -211
- package/packages/web/components/TerminalTabs/index.ts +0 -1
- package/packages/web/components/VelocityBadge/VelocityBadge.tsx +0 -32
- package/packages/web/components/VelocityBadge/VelocityBadge.types.ts +0 -3
- package/packages/web/components/VelocityBadge/index.ts +0 -2
- package/packages/web/components/VelocityCard/VelocityCard.tsx +0 -73
- package/packages/web/components/VelocityCard/VelocityCard.types.ts +0 -7
- package/packages/web/components/VelocityCard/index.ts +0 -2
- package/packages/web/components/WeeklyReports/PrintableReport.tsx +0 -259
- package/packages/web/components/WeeklyReports/ReportPreviewCard.tsx +0 -187
- package/packages/web/components/WeeklyReports/WeekCalendar.tsx +0 -288
- package/packages/web/components/WeeklyReports/WeeklyReports.tsx +0 -149
- package/packages/web/components/WeeklyReports/index.ts +0 -4
- package/packages/web/components/WeeklySparkline/WeeklySparkline.tsx +0 -25
- package/packages/web/components/WeeklySparkline/WeeklySparkline.types.ts +0 -4
- package/packages/web/components/WeeklySparkline/index.ts +0 -2
- package/packages/web/components/charts/SessionsChart.tsx +0 -175
- package/packages/web/components/ui/alert-dialog.tsx +0 -157
- package/packages/web/components/ui/badge.tsx +0 -46
- package/packages/web/components/ui/button.tsx +0 -60
- package/packages/web/components/ui/card.tsx +0 -92
- package/packages/web/components/ui/chart.tsx +0 -385
- package/packages/web/components/ui/dialog.tsx +0 -143
- package/packages/web/components/ui/drawer.tsx +0 -135
- package/packages/web/components/ui/dropdown-menu.tsx +0 -257
- package/packages/web/components/ui/input.tsx +0 -21
- package/packages/web/components/ui/scroll-area.tsx +0 -58
- package/packages/web/components/ui/select.tsx +0 -187
- package/packages/web/components/ui/sheet.tsx +0 -139
- package/packages/web/components/ui/tabs.tsx +0 -66
- package/packages/web/components/ui/tooltip.tsx +0 -61
- package/packages/web/components.json +0 -22
- package/packages/web/context/GlobalTerminalContext.tsx +0 -538
- package/packages/web/context/TerminalContext.tsx +0 -45
- package/packages/web/context/TerminalTabsContext.tsx +0 -181
- package/packages/web/eslint.config.mjs +0 -18
- package/packages/web/hooks/useClaudeTerminal.ts +0 -425
- package/packages/web/hooks/useProjectStats.ts +0 -93
- package/packages/web/hooks/useProjects.ts +0 -73
- package/packages/web/lib/actions/projects.ts +0 -15
- package/packages/web/lib/commands.ts +0 -81
- package/packages/web/lib/format.ts +0 -23
- package/packages/web/lib/generate-week-report.ts +0 -285
- package/packages/web/lib/parse-prjct-files.ts +0 -1123
- package/packages/web/lib/project-colors.ts +0 -58
- package/packages/web/lib/projects.ts +0 -506
- package/packages/web/lib/pty.ts +0 -101
- package/packages/web/lib/query-config.ts +0 -44
- package/packages/web/lib/services/index.ts +0 -9
- package/packages/web/lib/services/projects.server.ts +0 -66
- package/packages/web/lib/services/stats.server.ts +0 -562
- package/packages/web/lib/unified-loader.ts +0 -396
- package/packages/web/lib/utils.ts +0 -6
- package/packages/web/next-env.d.ts +0 -6
- package/packages/web/next.config.ts +0 -7
- package/packages/web/package.json +0 -57
- package/packages/web/postcss.config.mjs +0 -7
- package/packages/web/public/file.svg +0 -1
- package/packages/web/public/globe.svg +0 -1
- package/packages/web/public/next.svg +0 -1
- package/packages/web/public/vercel.svg +0 -1
- package/packages/web/public/window.svg +0 -1
- package/packages/web/server.ts +0 -312
- package/packages/web/tsconfig.json +0 -34
- package/templates/commands/serve.md +0 -121
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,87 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.20.0] - 2025-12-21
|
|
4
|
+
|
|
5
|
+
### Feature: UX/UI Design Agent Integration
|
|
6
|
+
|
|
7
|
+
Auto-generated UX/UI specialist agent for all frontend projects (web + mobile).
|
|
8
|
+
|
|
9
|
+
**Priority: UX > UI** - Experience is more important than visuals.
|
|
10
|
+
|
|
11
|
+
#### New Agent: `templates/agentic/agents/uxui.md`
|
|
12
|
+
- **Part 1: UX Principles** - User analysis, clarity, feedback, reduced friction, error handling, accessibility (a11y)
|
|
13
|
+
- **Part 2: UI Guidelines** - Aesthetic directions, typography trends (avoiding "AI slop"), color framework, purposeful animation
|
|
14
|
+
- **Part 3: Quality Checklists** - Mandatory UX/UI gates before shipping
|
|
15
|
+
|
|
16
|
+
#### Frontend Detection in `/p:sync`
|
|
17
|
+
Auto-generates uxui.md when ANY frontend tech is detected:
|
|
18
|
+
|
|
19
|
+
| Platform | Technologies |
|
|
20
|
+
|----------|-------------|
|
|
21
|
+
| Web | React, Vue, Svelte, Angular, Next.js, Nuxt |
|
|
22
|
+
| Mobile | React Native, Expo, Flutter, SwiftUI, Jetpack Compose |
|
|
23
|
+
|
|
24
|
+
#### Enhanced `/p:feature` Phase 4
|
|
25
|
+
For frontend features, now includes:
|
|
26
|
+
1. **UX Analysis** - Who, problem, happy path, edge cases
|
|
27
|
+
2. **UX Requirements Checklist** - 6 mandatory accessibility/usability checks
|
|
28
|
+
3. **Aesthetic Direction Selection** - Minimal, Bold, Soft, Brutalist
|
|
29
|
+
4. **UI Guidelines Application** - Typography, color, animation, layout
|
|
30
|
+
|
|
31
|
+
#### Anti-patterns Avoided ("AI Slop")
|
|
32
|
+
- Generic fonts: Inter, Roboto, Arial, Space Grotesk
|
|
33
|
+
- Purple/blue gradients on white
|
|
34
|
+
- Centered layouts without personality
|
|
35
|
+
- Unstyled component libraries
|
|
36
|
+
|
|
37
|
+
**Files Added:**
|
|
38
|
+
- `templates/agentic/agents/uxui.md` - Complete UX/UI specialist agent
|
|
39
|
+
|
|
40
|
+
**Files Modified:**
|
|
41
|
+
- `templates/commands/sync.md` - Frontend detection + uxui.md generation
|
|
42
|
+
- `templates/commands/feature.md` - Phase 4.0 UX/UI analysis
|
|
43
|
+
- `templates/commands/ship.md` - Pre-flight checks + confidence scoring
|
|
44
|
+
|
|
45
|
+
## [0.19.0] - 2025-12-21
|
|
46
|
+
|
|
47
|
+
### Breaking: Web Package Removed
|
|
48
|
+
|
|
49
|
+
The web dashboard (`packages/web/`) has been extracted to a separate repository for independent development.
|
|
50
|
+
|
|
51
|
+
**Removed:**
|
|
52
|
+
- `packages/web/` - Next.js dashboard app (~200 files)
|
|
53
|
+
- `bin/serve.js`, `bin/dev.js` - Web server scripts
|
|
54
|
+
- `templates/commands/serve.md` - /p:serve command
|
|
55
|
+
- `prjct-serve`, `prjct-dev` bin entries
|
|
56
|
+
|
|
57
|
+
### Fix: Prompt Builder Now Sends Full Templates
|
|
58
|
+
|
|
59
|
+
Fixed critical bug where `prompt-builder.ts` only extracted `## Flow` sections, causing Claude to miss important instructions.
|
|
60
|
+
|
|
61
|
+
**Before:** Claude only saw the Flow section (~30% of template)
|
|
62
|
+
**After:** Claude sees the full template content
|
|
63
|
+
|
|
64
|
+
**Files Modified:**
|
|
65
|
+
- `core/agentic/prompt-builder.ts` - Removed regex extraction, send full content
|
|
66
|
+
|
|
67
|
+
### Improved: Templates Simplified
|
|
68
|
+
|
|
69
|
+
Reduced template verbosity for better Claude comprehension:
|
|
70
|
+
|
|
71
|
+
| Template | Before | After |
|
|
72
|
+
|----------|--------|-------|
|
|
73
|
+
| ship.md | 359 lines | ~110 lines |
|
|
74
|
+
| done.md | 318 lines | ~117 lines |
|
|
75
|
+
| now.md | 346 lines | ~141 lines |
|
|
76
|
+
|
|
77
|
+
### Improved: Timestamp Generation
|
|
78
|
+
|
|
79
|
+
Changed from undefined `GetTimestamp()` to actual bash commands:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
bun -e "console.log(new Date().toISOString())" 2>/dev/null || node -e "console.log(new Date().toISOString())"
|
|
83
|
+
```
|
|
84
|
+
|
|
3
85
|
## [0.18.2] - 2025-12-15
|
|
4
86
|
|
|
5
87
|
### Fix: Agents Write to Global Storage
|
package/CLAUDE.md
CHANGED
|
@@ -6,255 +6,118 @@ This file provides guidance to Claude Code when working with prjct-cli.
|
|
|
6
6
|
|
|
7
7
|
**prjct-cli** is a developer momentum tool. Track progress through slash commands without meetings or traditional PM overhead.
|
|
8
8
|
|
|
9
|
-
## CRITICAL
|
|
9
|
+
## CRITICAL RULES
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
- `GetDate()` → YYYY-MM-DD format: "2025-10-07"
|
|
16
|
-
|
|
17
|
-
### Rules
|
|
18
|
-
1. **NEVER** generate timestamps manually - All hardcoded dates are WRONG
|
|
19
|
-
2. **ALWAYS** call GetTimestamp() for session files (*.jsonl)
|
|
20
|
-
3. **ALWAYS** call GetDate() for index files (shipped.md, roadmap.md, ideas.md)
|
|
21
|
-
|
|
22
|
-
## Core Workflow
|
|
11
|
+
### 1. Path Resolution
|
|
12
|
+
**ALL writes go to global storage**: `~/.prjct-cli/projects/{projectId}/`
|
|
13
|
+
- NEVER write to `.prjct/` (config only)
|
|
14
|
+
- NEVER write to `./` (current directory)
|
|
23
15
|
|
|
16
|
+
### 2. Timestamps
|
|
17
|
+
```bash
|
|
18
|
+
# Prefer bun, fallback to node
|
|
19
|
+
bun -e "console.log(new Date().toISOString())" 2>/dev/null || node -e "console.log(new Date().toISOString())"
|
|
24
20
|
```
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
p. done → Mark complete, next task
|
|
28
|
-
p. ship → Lint/test/commit/push
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Architecture: MD-First
|
|
21
|
+
- Result: `"2025-12-20T10:30:00.000Z"`
|
|
22
|
+
- NEVER hardcode dates or times
|
|
32
23
|
|
|
33
|
-
|
|
24
|
+
### 3. UUIDs
|
|
25
|
+
```bash
|
|
26
|
+
bun -e "console.log(crypto.randomUUID())" 2>/dev/null || node -e "console.log(require('crypto').randomUUID())"
|
|
27
|
+
```
|
|
34
28
|
|
|
35
|
-
###
|
|
29
|
+
### 4. Git Commit Footer
|
|
36
30
|
```
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
├── progress/ # shipped.md, sessions/
|
|
40
|
-
├── planning/ # ideas.md, roadmap.md
|
|
41
|
-
├── analysis/ # repo-summary.md
|
|
42
|
-
├── memory/ # context.jsonl (append-only logs)
|
|
43
|
-
├── agents/ # Generated specialists
|
|
44
|
-
└── project.json # Metadata only (name, repoPath, techStack)
|
|
31
|
+
🤖 Generated with [p/](https://www.prjct.app/)
|
|
32
|
+
Designed for [Claude](https://www.anthropic.com/claude)
|
|
45
33
|
```
|
|
46
34
|
|
|
47
|
-
|
|
48
|
-
| File | Purpose |
|
|
49
|
-
|------|---------|
|
|
50
|
-
| `core/now.md` | Current task state |
|
|
51
|
-
| `core/next.md` | Task queue |
|
|
52
|
-
| `planning/ideas.md` | Ideas backlog |
|
|
53
|
-
| `planning/roadmap.md` | Feature roadmap |
|
|
54
|
-
| `progress/shipped.md` | Shipped features |
|
|
35
|
+
## Architecture: Write-Through
|
|
55
36
|
|
|
56
|
-
### Local Config
|
|
57
37
|
```
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### Session Format (JSONL)
|
|
62
|
-
```jsonl
|
|
63
|
-
{"ts":"{GetTimestamp()}","type":"task_complete","task":"auth","duration":"2h15m"}
|
|
38
|
+
User Action → Storage (JSON) → Context (MD) → Sync Events
|
|
64
39
|
```
|
|
65
40
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
⚠️ **CRITICAL** - Always use SlashCommand, never work directly:
|
|
74
|
-
- ✅ `SlashCommand("/p:feature add dark mode")`
|
|
75
|
-
- ❌ Directly creating files without the command
|
|
76
|
-
|
|
77
|
-
If no project: "No prjct project. Run /p:init first."
|
|
78
|
-
|
|
79
|
-
### Intent Map
|
|
80
|
-
|
|
81
|
-
| User Intent | Command | What It Does |
|
|
82
|
-
|-------------|---------|--------------|
|
|
83
|
-
| Start/focus on task | `/p:now` | Sets current task |
|
|
84
|
-
| Finished work | `/p:done` | Marks complete |
|
|
85
|
-
| Ready to ship | `/p:ship` | Ship feature |
|
|
86
|
-
| Has an idea | `/p:idea` | Saves to backlog |
|
|
87
|
-
| See progress | `/p:recap` | Shows overview |
|
|
88
|
-
| What's next | `/p:next` | Priority queue |
|
|
89
|
-
| Need help | `/p:help` | Interactive guide |
|
|
90
|
-
|
|
91
|
-
**Any language works** - English, Spanish, etc.
|
|
92
|
-
|
|
93
|
-
## Command Execution
|
|
94
|
-
|
|
95
|
-
All `/p:*` commands:
|
|
96
|
-
1. Read `.prjct/prjct.config.json` → get projectId
|
|
97
|
-
2. Operate on `~/.prjct-cli/projects/{id}/`
|
|
98
|
-
3. Update files atomically
|
|
99
|
-
4. Return formatted response
|
|
100
|
-
|
|
101
|
-
### Confirmation Policy
|
|
102
|
-
|
|
103
|
-
**ALL commands MUST ask for confirmation before execution:**
|
|
104
|
-
1. User triggers command
|
|
105
|
-
2. Present plan of what will be done
|
|
106
|
-
3. User approves
|
|
107
|
-
4. Execute
|
|
108
|
-
|
|
109
|
-
### Command Distinctions
|
|
110
|
-
|
|
111
|
-
**`/p:idea`** - Quick idea capture (simple write)
|
|
112
|
-
**`/p:workflow`** - Multi-agent workflow management (state machine)
|
|
113
|
-
|
|
114
|
-
## Available Commands
|
|
115
|
-
|
|
116
|
-
### Work
|
|
117
|
-
- `/p:now [task]` - Set current task
|
|
118
|
-
- `/p:next` - Priority queue
|
|
119
|
-
- `/p:done` - Complete task
|
|
120
|
-
- `/p:ship <feature>` - Ship and celebrate
|
|
121
|
-
- `/p:bug <desc>` - Report bug
|
|
122
|
-
|
|
123
|
-
### Planning
|
|
124
|
-
- `/p:idea <text>` - Capture idea
|
|
125
|
-
- `/p:feature <desc>` - Add feature
|
|
126
|
-
- `/p:workflow` - Workflow status
|
|
127
|
-
|
|
128
|
-
### Progress
|
|
129
|
-
- `/p:recap` - Project overview
|
|
130
|
-
- `/p:progress [period]` - Metrics
|
|
131
|
-
- `/p:status` - KPI dashboard
|
|
41
|
+
| Layer | Path | Purpose |
|
|
42
|
+
|-------|------|---------|
|
|
43
|
+
| Storage | `storage/*.json` | Source of truth |
|
|
44
|
+
| Context | `context/*.md` | Claude-readable (generated) |
|
|
45
|
+
| Sync | `sync/pending.json` | Backend events |
|
|
46
|
+
| Memory | `memory/events.jsonl` | Audit trail |
|
|
132
47
|
|
|
133
|
-
###
|
|
134
|
-
- `/p:init` - Initialize project
|
|
135
|
-
- `/p:help` - Interactive guide
|
|
136
|
-
- `/p:ask <question>` - Intent translator
|
|
137
|
-
- `/p:suggest` - Smart recommendations
|
|
138
|
-
- `/p:analyze` - Analyze repository
|
|
139
|
-
- `/p:sync` - Sync state
|
|
140
|
-
|
|
141
|
-
### Quality
|
|
142
|
-
- `/p:cleanup` - Clean up
|
|
143
|
-
- `/p:design` - System design
|
|
144
|
-
|
|
145
|
-
## Agentic Architecture
|
|
146
|
-
|
|
147
|
-
prjct-cli is template-driven. Claude reads templates and executes using tools.
|
|
148
|
-
|
|
149
|
-
### Flow
|
|
48
|
+
### File Structure
|
|
150
49
|
```
|
|
151
|
-
|
|
50
|
+
~/.prjct-cli/projects/{projectId}/
|
|
51
|
+
├── storage/
|
|
52
|
+
│ ├── state.json # Current task (source of truth)
|
|
53
|
+
│ ├── shipped.json # Shipped features
|
|
54
|
+
│ └── queue.json # Task queue
|
|
55
|
+
├── context/
|
|
56
|
+
│ ├── now.md # Generated from state.json
|
|
57
|
+
│ └── shipped.md # Generated from shipped.json
|
|
58
|
+
├── sync/pending.json # Backend events
|
|
59
|
+
├── memory/events.jsonl # Audit trail
|
|
60
|
+
└── agents/ # Domain specialists
|
|
152
61
|
```
|
|
153
62
|
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
core/agentic/
|
|
157
|
-
├── template-loader.js # Loads command templates
|
|
158
|
-
├── context-builder.js # Builds project context
|
|
159
|
-
├── prompt-builder.js # Generates prompts
|
|
160
|
-
├── command-executor.js # Executes commands
|
|
161
|
-
└── tool-registry.js # Maps tools
|
|
63
|
+
## Core Workflow
|
|
162
64
|
|
|
163
|
-
templates/commands/ # Command instructions
|
|
164
|
-
templates/workflows/ # Workflow guides
|
|
165
|
-
templates/analysis/ # Analysis instructions
|
|
166
65
|
```
|
|
167
|
-
|
|
168
|
-
### Templates as Source of Truth
|
|
169
|
-
|
|
170
|
-
Templates define what Claude should do:
|
|
171
|
-
|
|
172
|
-
```markdown
|
|
173
|
-
# /p:done
|
|
174
|
-
|
|
175
|
-
## Validation
|
|
176
|
-
- Requires: `core/now.md` has content
|
|
177
|
-
|
|
178
|
-
## Flow
|
|
179
|
-
1. Read `core/now.md` → calculate duration
|
|
180
|
-
2. Clear now.md
|
|
181
|
-
3. Update metrics
|
|
182
|
-
|
|
183
|
-
## Response
|
|
184
|
-
✅ {task} ({duration})
|
|
66
|
+
/p:sync → /p:now "task" → [work] → /p:done → /p:ship
|
|
185
67
|
```
|
|
186
68
|
|
|
187
|
-
|
|
188
|
-
1. Checks validation
|
|
189
|
-
2. Executes flow using tools
|
|
190
|
-
3. Generates response
|
|
191
|
-
4. Suggests next actions
|
|
69
|
+
## Commands
|
|
192
70
|
|
|
193
|
-
|
|
71
|
+
| Command | Purpose |
|
|
72
|
+
|---------|---------|
|
|
73
|
+
| `/p:sync` | Analyze repo, generate agents |
|
|
74
|
+
| `/p:now [task]` | Start/show current task |
|
|
75
|
+
| `/p:done` | Complete current task |
|
|
76
|
+
| `/p:ship [feature]` | Ship with quality checks |
|
|
77
|
+
| `/p:feature` | Add to roadmap |
|
|
78
|
+
| `/p:idea` | Quick idea capture |
|
|
79
|
+
| `/p:recap` | Project overview |
|
|
194
80
|
|
|
195
|
-
|
|
81
|
+
## Natural Language Trigger
|
|
196
82
|
|
|
83
|
+
Messages starting with `p.` trigger commands:
|
|
197
84
|
```
|
|
198
|
-
|
|
199
|
-
|
|
85
|
+
p. start auth → /p:now "auth"
|
|
86
|
+
p. done → /p:done
|
|
87
|
+
p. ship login → /p:ship "login"
|
|
200
88
|
```
|
|
201
89
|
|
|
202
|
-
|
|
203
|
-
- "Generated with Claude Code"
|
|
204
|
-
- "Co-Authored-By: Claude"
|
|
205
|
-
|
|
206
|
-
## Agent Generation
|
|
90
|
+
## Template-Driven Execution
|
|
207
91
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
92
|
+
Templates define command behavior:
|
|
93
|
+
```
|
|
94
|
+
templates/commands/{command}.md
|
|
95
|
+
```
|
|
211
96
|
|
|
212
|
-
|
|
97
|
+
Claude reads template → executes flow → generates response.
|
|
213
98
|
|
|
214
99
|
## Key Rules
|
|
215
100
|
|
|
216
101
|
1. **Read files before editing** - Never assume structure
|
|
217
|
-
2. **Use
|
|
102
|
+
2. **Use node commands for timestamps** - Never hardcode dates
|
|
218
103
|
3. **Follow template instructions** - Templates are source of truth
|
|
219
|
-
4. **
|
|
220
|
-
5. **
|
|
221
|
-
6. **Suggest next actions** - Maintain user momentum
|
|
222
|
-
|
|
223
|
-
## Output Philosophy
|
|
104
|
+
4. **Log to memory** - Append to `memory/events.jsonl`
|
|
105
|
+
5. **Suggest next actions** - Maintain user momentum
|
|
224
106
|
|
|
225
|
-
|
|
107
|
+
## Output Format
|
|
226
108
|
|
|
227
|
-
|
|
109
|
+
Concise responses (< 4 lines):
|
|
228
110
|
```
|
|
229
111
|
✅ [What was done]
|
|
230
112
|
|
|
231
|
-
|
|
232
|
-
Next: [action]
|
|
113
|
+
[Key metrics]
|
|
114
|
+
Next: [suggested action]
|
|
233
115
|
```
|
|
234
116
|
|
|
235
|
-
|
|
236
|
-
- Tables listing files
|
|
237
|
-
- "Created Files" / "Modified Files" sections
|
|
238
|
-
- "How It Works" explanations
|
|
239
|
-
- Code snippets or implementation details
|
|
240
|
-
- Detailed breakdowns of what was done
|
|
117
|
+
## Documentation
|
|
241
118
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
Next: /p:ship or test with /p:now
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
**Example (BAD):**
|
|
251
|
-
```
|
|
252
|
-
Created Files:
|
|
253
|
-
| File | Purpose |
|
|
254
|
-
|------|---------|
|
|
255
|
-
| x.md | Does X |
|
|
256
|
-
...
|
|
257
|
-
|
|
258
|
-
How It Works:
|
|
259
|
-
Claude reads → decides → applies...
|
|
260
|
-
```
|
|
119
|
+
For detailed information:
|
|
120
|
+
- Architecture: `~/.prjct-cli/docs/architecture.md`
|
|
121
|
+
- Commands: `~/.prjct-cli/docs/commands.md`
|
|
122
|
+
- Validation: `~/.prjct-cli/docs/validation.md`
|
|
123
|
+
- Agents: `~/.prjct-cli/docs/agents.md`
|
|
@@ -330,13 +330,9 @@ class PromptBuilder {
|
|
|
330
330
|
|
|
331
331
|
parts.push('\n---\n')
|
|
332
332
|
|
|
333
|
-
// Template (
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
parts.push(flowMatch[0])
|
|
337
|
-
} else {
|
|
338
|
-
parts.push(template.content)
|
|
339
|
-
}
|
|
333
|
+
// Template content (include full template, frontmatter already stripped by loader)
|
|
334
|
+
// This ensures Claude sees ALL instructions including critical rules at the top
|
|
335
|
+
parts.push(template.content)
|
|
340
336
|
|
|
341
337
|
// Current state (only if exists and relevant)
|
|
342
338
|
const relevantState = this.filterRelevantState(state)
|
|
@@ -160,24 +160,4 @@ export const OPTIONAL_COMMANDS: Command[] = [
|
|
|
160
160
|
],
|
|
161
161
|
},
|
|
162
162
|
|
|
163
|
-
{
|
|
164
|
-
name: 'serve',
|
|
165
|
-
category: 'optional',
|
|
166
|
-
description: 'Start prjct web server',
|
|
167
|
-
usage: {
|
|
168
|
-
claude: '/p:serve',
|
|
169
|
-
terminal: 'prjct serve',
|
|
170
|
-
},
|
|
171
|
-
params: '[port]',
|
|
172
|
-
implemented: true,
|
|
173
|
-
hasTemplate: true,
|
|
174
|
-
requiresInit: true,
|
|
175
|
-
blockingRules: null,
|
|
176
|
-
isOptional: true,
|
|
177
|
-
features: [
|
|
178
|
-
'Local dashboard server',
|
|
179
|
-
'API endpoints',
|
|
180
|
-
'Real-time updates',
|
|
181
|
-
],
|
|
182
|
-
},
|
|
183
163
|
]
|
|
@@ -7,7 +7,7 @@ import fs from 'fs/promises'
|
|
|
7
7
|
import path from 'path'
|
|
8
8
|
import os from 'os'
|
|
9
9
|
import type { InstallResult, UninstallResult, CheckResult, SyncResult, GlobalConfigResult } from './types'
|
|
10
|
-
import { installGlobalConfig } from './global-config'
|
|
10
|
+
import { installGlobalConfig, installDocs } from './global-config'
|
|
11
11
|
|
|
12
12
|
export class CommandInstaller {
|
|
13
13
|
homeDir: string
|
|
@@ -317,4 +317,11 @@ export class CommandInstaller {
|
|
|
317
317
|
async installGlobalConfig(): Promise<GlobalConfigResult> {
|
|
318
318
|
return installGlobalConfig(this.claudeConfigPath, () => this.detectClaude())
|
|
319
319
|
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Install documentation files to ~/.prjct-cli/docs/
|
|
323
|
+
*/
|
|
324
|
+
async installDocs(): Promise<{ success: boolean; error?: string }> {
|
|
325
|
+
return installDocs()
|
|
326
|
+
}
|
|
320
327
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Global Config Operations
|
|
3
|
-
* Install/update global CLAUDE.md configuration
|
|
3
|
+
* Install/update global CLAUDE.md configuration and docs
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import fs from 'fs/promises'
|
|
@@ -8,6 +8,36 @@ import path from 'path'
|
|
|
8
8
|
import os from 'os'
|
|
9
9
|
import type { GlobalConfigResult } from './types'
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Install documentation files to ~/.prjct-cli/docs/
|
|
13
|
+
*/
|
|
14
|
+
export async function installDocs(): Promise<{ success: boolean; error?: string }> {
|
|
15
|
+
try {
|
|
16
|
+
const docsDir = path.join(os.homedir(), '.prjct-cli', 'docs')
|
|
17
|
+
const templateDocsDir = path.join(__dirname, '../../../templates/global/docs')
|
|
18
|
+
|
|
19
|
+
// Ensure docs directory exists
|
|
20
|
+
await fs.mkdir(docsDir, { recursive: true })
|
|
21
|
+
|
|
22
|
+
// Read all doc files from template
|
|
23
|
+
const docFiles = await fs.readdir(templateDocsDir)
|
|
24
|
+
|
|
25
|
+
// Copy each doc file
|
|
26
|
+
for (const file of docFiles) {
|
|
27
|
+
if (file.endsWith('.md')) {
|
|
28
|
+
const srcPath = path.join(templateDocsDir, file)
|
|
29
|
+
const destPath = path.join(docsDir, file)
|
|
30
|
+
const content = await fs.readFile(srcPath, 'utf-8')
|
|
31
|
+
await fs.writeFile(destPath, content, 'utf-8')
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return { success: true }
|
|
36
|
+
} catch (error) {
|
|
37
|
+
return { success: false, error: (error as Error).message }
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
11
41
|
/**
|
|
12
42
|
* Install or update global CLAUDE.md configuration
|
|
13
43
|
*/
|
|
@@ -16,7 +16,7 @@ export type {
|
|
|
16
16
|
GlobalConfigResult,
|
|
17
17
|
} from './types'
|
|
18
18
|
|
|
19
|
-
export { installGlobalConfig } from './global-config'
|
|
19
|
+
export { installGlobalConfig, installDocs } from './global-config'
|
|
20
20
|
export { CommandInstaller } from './command-installer'
|
|
21
21
|
|
|
22
22
|
import { CommandInstaller } from './command-installer'
|
|
@@ -103,6 +103,9 @@ export async function run(): Promise<SetupResults> {
|
|
|
103
103
|
if (configResult.success) {
|
|
104
104
|
results.configAction = configResult.action
|
|
105
105
|
}
|
|
106
|
+
|
|
107
|
+
// Step 4b: Install documentation files
|
|
108
|
+
await installer.installDocs()
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
// Step 5: Save version in editors-config
|
package/package.json
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prjct-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Built for Claude - Ship fast, track progress, stay focused. Developer momentum tool for indie hackers.",
|
|
5
5
|
"main": "core/index.ts",
|
|
6
6
|
"bin": {
|
|
7
|
-
"prjct": "bin/prjct"
|
|
8
|
-
"prjct-dev": "bin/dev.js",
|
|
9
|
-
"prjct-serve": "bin/serve.js"
|
|
7
|
+
"prjct": "bin/prjct"
|
|
10
8
|
},
|
|
11
9
|
"workspaces": [
|
|
12
10
|
"packages/*"
|
|
@@ -16,11 +14,8 @@
|
|
|
16
14
|
"registry": "https://registry.npmjs.org"
|
|
17
15
|
},
|
|
18
16
|
"scripts": {
|
|
19
|
-
"
|
|
20
|
-
"build": "bun run --filter '@prjct/shared' build && bun run --filter 'web' build",
|
|
17
|
+
"build": "bun run --filter '@prjct/shared' build",
|
|
21
18
|
"build:shared": "bun run --filter '@prjct/shared' build",
|
|
22
|
-
"build:web": "bun run --filter 'web' build",
|
|
23
|
-
"serve": "bun run --filter 'web' dev",
|
|
24
19
|
"postinstall": "bun scripts/postinstall.js",
|
|
25
20
|
"update-commands": "bun -e \"const installer = require('./core/infrastructure/command-installer'); installer.syncCommands().then(r => console.log('Commands updated:', r)).catch(e => console.error('Error:', e.message))\"",
|
|
26
21
|
"install-global": "./scripts/install.sh",
|
|
@@ -84,15 +79,6 @@
|
|
|
84
79
|
"bin/",
|
|
85
80
|
"core/",
|
|
86
81
|
"packages/shared/",
|
|
87
|
-
"packages/web/app/",
|
|
88
|
-
"packages/web/components/",
|
|
89
|
-
"packages/web/context/",
|
|
90
|
-
"packages/web/hooks/",
|
|
91
|
-
"packages/web/lib/",
|
|
92
|
-
"packages/web/public/",
|
|
93
|
-
"packages/web/*.ts",
|
|
94
|
-
"packages/web/*.json",
|
|
95
|
-
"packages/web/*.mjs",
|
|
96
82
|
"templates/",
|
|
97
83
|
"scripts/postinstall.js",
|
|
98
84
|
"scripts/install.sh",
|