prjct-cli 0.4.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.
Files changed (71) hide show
  1. package/CHANGELOG.md +312 -0
  2. package/CLAUDE.md +300 -0
  3. package/LICENSE +21 -0
  4. package/README.md +424 -0
  5. package/bin/prjct +214 -0
  6. package/core/agent-detector.js +249 -0
  7. package/core/agents/claude-agent.js +250 -0
  8. package/core/agents/codex-agent.js +256 -0
  9. package/core/agents/terminal-agent.js +465 -0
  10. package/core/analyzer.js +596 -0
  11. package/core/animations-simple.js +240 -0
  12. package/core/animations.js +277 -0
  13. package/core/author-detector.js +218 -0
  14. package/core/capability-installer.js +190 -0
  15. package/core/command-installer.js +775 -0
  16. package/core/commands.js +2050 -0
  17. package/core/config-manager.js +335 -0
  18. package/core/migrator.js +784 -0
  19. package/core/path-manager.js +324 -0
  20. package/core/project-capabilities.js +144 -0
  21. package/core/session-manager.js +439 -0
  22. package/core/version.js +107 -0
  23. package/core/workflow-engine.js +213 -0
  24. package/core/workflow-prompts.js +192 -0
  25. package/core/workflow-rules.js +147 -0
  26. package/package.json +80 -0
  27. package/scripts/install.sh +433 -0
  28. package/scripts/verify-installation.sh +158 -0
  29. package/templates/agents/AGENTS.md +164 -0
  30. package/templates/commands/analyze.md +125 -0
  31. package/templates/commands/cleanup.md +102 -0
  32. package/templates/commands/context.md +105 -0
  33. package/templates/commands/design.md +113 -0
  34. package/templates/commands/done.md +44 -0
  35. package/templates/commands/fix.md +87 -0
  36. package/templates/commands/git.md +79 -0
  37. package/templates/commands/help.md +72 -0
  38. package/templates/commands/idea.md +50 -0
  39. package/templates/commands/init.md +237 -0
  40. package/templates/commands/next.md +74 -0
  41. package/templates/commands/now.md +35 -0
  42. package/templates/commands/progress.md +92 -0
  43. package/templates/commands/recap.md +86 -0
  44. package/templates/commands/roadmap.md +107 -0
  45. package/templates/commands/ship.md +41 -0
  46. package/templates/commands/stuck.md +48 -0
  47. package/templates/commands/task.md +97 -0
  48. package/templates/commands/test.md +94 -0
  49. package/templates/commands/workflow.md +224 -0
  50. package/templates/examples/natural-language-examples.md +320 -0
  51. package/templates/mcp-config.json +8 -0
  52. package/templates/workflows/analyze.md +159 -0
  53. package/templates/workflows/cleanup.md +73 -0
  54. package/templates/workflows/context.md +72 -0
  55. package/templates/workflows/design.md +88 -0
  56. package/templates/workflows/done.md +20 -0
  57. package/templates/workflows/fix.md +201 -0
  58. package/templates/workflows/git.md +192 -0
  59. package/templates/workflows/help.md +13 -0
  60. package/templates/workflows/idea.md +22 -0
  61. package/templates/workflows/init.md +80 -0
  62. package/templates/workflows/natural-language-handler.md +183 -0
  63. package/templates/workflows/next.md +44 -0
  64. package/templates/workflows/now.md +19 -0
  65. package/templates/workflows/progress.md +113 -0
  66. package/templates/workflows/recap.md +66 -0
  67. package/templates/workflows/roadmap.md +95 -0
  68. package/templates/workflows/ship.md +18 -0
  69. package/templates/workflows/stuck.md +25 -0
  70. package/templates/workflows/task.md +109 -0
  71. package/templates/workflows/test.md +243 -0
@@ -0,0 +1,433 @@
1
+ #!/bin/bash
2
+
3
+ # prjct/cli - Turn ideas into AI-ready roadmaps
4
+ # Usage: curl -fsSL https://prjct.app/install.sh | bash
5
+ # Options:
6
+ # --force Force reinstall even if up to date
7
+ # --dev Install from development branch
8
+ # --silent Silent mode (no interactive prompts)
9
+ # -y, --yes Auto-accept all prompts
10
+ # --help, -h Show this help message
11
+
12
+ set -e
13
+
14
+ # Show help if requested
15
+ show_help() {
16
+ echo "prjct/cli installer"
17
+ echo ""
18
+ echo "Usage:"
19
+ echo " curl -fsSL https://prjct.app/install.sh | bash [OPTIONS]"
20
+ echo " bash install.sh [OPTIONS]"
21
+ echo ""
22
+ echo "Options:"
23
+ echo " --force Force reinstall even if up to date"
24
+ echo " --dev Install from development branch"
25
+ echo " --silent Silent mode (minimal output)"
26
+ echo " -y, --yes Auto-accept all prompts"
27
+ echo " --help, -h Show this help message"
28
+ echo ""
29
+ echo "Examples:"
30
+ echo " # Normal installation"
31
+ echo " curl -fsSL https://prjct.app/install.sh | bash"
32
+ echo ""
33
+ echo " # Force reinstall"
34
+ echo " curl -fsSL https://prjct.app/install.sh | bash -s -- --force"
35
+ echo ""
36
+ echo " # Auto-accept all prompts"
37
+ echo " curl -fsSL https://prjct.app/install.sh | bash -s -- -y"
38
+ exit 0
39
+ }
40
+
41
+ # Parse arguments
42
+ FORCE_INSTALL=false
43
+ DEV_MODE=false
44
+ SILENT_MODE=false
45
+ AUTO_ACCEPT=false
46
+
47
+ for arg in "$@"; do
48
+ case $arg in
49
+ --help|-h)
50
+ show_help
51
+ ;;
52
+ --force)
53
+ FORCE_INSTALL=true
54
+ shift
55
+ ;;
56
+ --dev)
57
+ DEV_MODE=true
58
+ shift
59
+ ;;
60
+ --silent)
61
+ SILENT_MODE=true
62
+ shift
63
+ ;;
64
+ -y|--yes)
65
+ AUTO_ACCEPT=true
66
+ shift
67
+ ;;
68
+ *)
69
+ ;;
70
+ esac
71
+ done
72
+
73
+ # Detect if being run in a pipe
74
+ if [ ! -t 0 ]; then
75
+ AUTO_ACCEPT=true
76
+ fi
77
+
78
+ # Colors and formatting
79
+ RED='\033[0;31m'
80
+ GREEN='\033[0;32m'
81
+ YELLOW='\033[1;33m'
82
+ BLUE='\033[0;34m'
83
+ MAGENTA='\033[0;35m'
84
+ CYAN='\033[0;36m'
85
+ WHITE='\033[1;37m'
86
+ NC='\033[0m'
87
+ BOLD='\033[1m'
88
+ DIM='\033[2m'
89
+
90
+ # Unicode characters
91
+ CHECK="โœ“"
92
+ CROSS="โœ—"
93
+ ARROW="โ–ธ"
94
+ DOT="โ€ข"
95
+
96
+ # Clear for clean experience
97
+ clear
98
+
99
+ # Clean header with Catppuccin colors
100
+ echo ""
101
+ echo ""
102
+ echo -e " ${BOLD}${CYAN}(๏พ‰โ—•ใƒฎโ—•)๏พ‰*:๏ฝฅ๏พŸโœง${NC}"
103
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—${NC}"
104
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ•šโ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•${NC}"
105
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ• โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘${NC}"
106
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ•”โ•โ•โ•โ• โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘${NC}"
107
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘${NC}"
108
+ echo -e " ${BOLD}${CYAN}โ•šโ•โ• โ•šโ•โ• โ•šโ•โ• โ•šโ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•${NC}"
109
+ echo -e " ${BOLD}${CYAN}prjct${NC}${MAGENTA}/${NC}${GREEN}cli${NC} ${DIM}${WHITE}v0.3.1${NC}"
110
+ echo ""
111
+ echo -e " ${DIM}Turn ideas into AI-ready roadmaps${NC}"
112
+ echo ""
113
+ echo -e " ${YELLOW}โšก${NC} Ship faster with zero friction"
114
+ echo -e " ${GREEN}๐Ÿ“${NC} From idea to technical tasks in minutes"
115
+ echo -e " ${BLUE}๐Ÿค–${NC} Perfect context for AI agents"
116
+ echo ""
117
+ echo ""
118
+
119
+ # Spinner function
120
+ spin() {
121
+ local pid=$1
122
+ local delay=0.1
123
+ local spinstr='โ ‹โ ™โ นโ ธโ ผโ ดโ ฆโ งโ ‡โ '
124
+ while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
125
+ local temp=${spinstr#?}
126
+ printf " [%c] " "$spinstr"
127
+ local spinstr=$temp${spinstr%"$temp"}
128
+ sleep $delay
129
+ printf "\b\b\b\b\b\b"
130
+ done
131
+ printf " \b\b\b\b"
132
+ }
133
+
134
+ # Step counter
135
+ STEP=1
136
+ TOTAL_STEPS=5
137
+
138
+ print_step() {
139
+ echo -e "\n${BOLD}${CYAN}[$STEP/$TOTAL_STEPS]${NC} ${BOLD}$1${NC}"
140
+ ((STEP++))
141
+ }
142
+
143
+ # Installation directory
144
+ INSTALL_DIR="$HOME/.prjct-cli"
145
+
146
+ # Version check function
147
+ get_version() {
148
+ if [ -f "$1/package.json" ]; then
149
+ grep -o '"version":[[:space:]]*"[^"]*"' "$1/package.json" | head -1 | cut -d'"' -f4
150
+ else
151
+ echo "unknown"
152
+ fi
153
+ }
154
+
155
+ # Check prerequisites
156
+ print_step "Checking prerequisites"
157
+
158
+ # Check Node.js
159
+ printf " ${ARROW} Checking Node.js..."
160
+ if ! command -v node &> /dev/null; then
161
+ echo -e " ${RED}${CROSS}${NC}"
162
+ echo -e "\n ${RED}Node.js is required but not installed.${NC}"
163
+ echo -e " Install from: ${CYAN}https://nodejs.org${NC}"
164
+ exit 1
165
+ fi
166
+
167
+ NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
168
+ if [ "$NODE_VERSION" -lt 18 ]; then
169
+ echo -e " ${RED}${CROSS}${NC}"
170
+ echo -e "\n ${RED}Node.js 18+ is required (found v$NODE_VERSION)${NC}"
171
+ exit 1
172
+ fi
173
+ echo -e " ${GREEN}${CHECK}${NC} $(node --version)"
174
+
175
+ # Check Git
176
+ printf " ${ARROW} Checking Git..."
177
+ if ! command -v git &> /dev/null; then
178
+ echo -e " ${RED}${CROSS}${NC}"
179
+ echo -e "\n ${RED}Git is required but not installed.${NC}"
180
+ echo -e " Install from: ${CYAN}https://git-scm.com${NC}"
181
+ exit 1
182
+ fi
183
+ echo -e " ${GREEN}${CHECK}${NC} $(git --version | cut -d' ' -f3)"
184
+
185
+ # Clone or update repository
186
+ print_step "Downloading prjct/cli"
187
+
188
+ if [ -d "$INSTALL_DIR" ]; then
189
+ # Check current version
190
+ CURRENT_VERSION=$(get_version "$INSTALL_DIR")
191
+ printf " ${ARROW} Found existing installation"
192
+ echo -e " ${DIM}(v${CURRENT_VERSION})${NC}"
193
+
194
+ # Fetch latest version from remote
195
+ printf " ${ARROW} Checking for updates..."
196
+ cd "$INSTALL_DIR"
197
+ git fetch origin main --quiet > /dev/null 2>&1
198
+
199
+ # Get remote version
200
+ TEMP_DIR=$(mktemp -d)
201
+ git show origin/main:package.json > "$TEMP_DIR/package.json" 2>/dev/null
202
+ REMOTE_VERSION=$(get_version "$TEMP_DIR")
203
+ rm -rf "$TEMP_DIR"
204
+
205
+ if [ "$CURRENT_VERSION" = "$REMOTE_VERSION" ] && [ "$FORCE_INSTALL" = false ]; then
206
+ echo -e " ${GREEN}${CHECK}${NC} Already up to date (v${CURRENT_VERSION})"
207
+
208
+ # Ask if they want to reinstall anyway
209
+ if [ "$AUTO_ACCEPT" = false ]; then
210
+ echo ""
211
+ read -p " Do you want to reinstall anyway? (y/N): " -n 1 -r
212
+ echo ""
213
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
214
+ echo -e "\n${GREEN}โœจ You're all set! Happy shipping! ๐Ÿš€${NC}"
215
+ exit 0
216
+ fi
217
+ else
218
+ echo -e "\n${GREEN}โœจ You're all set! Happy shipping! ๐Ÿš€${NC}"
219
+ exit 0
220
+ fi
221
+ elif [ "$CURRENT_VERSION" = "$REMOTE_VERSION" ] && [ "$FORCE_INSTALL" = true ]; then
222
+ echo -e " ${YELLOW}!${NC} Force reinstalling (v${CURRENT_VERSION})"
223
+ else
224
+ echo -e " ${YELLOW}Update available!${NC}"
225
+ echo -e " Current: v${CURRENT_VERSION}"
226
+ echo -e " Latest: v${REMOTE_VERSION}"
227
+
228
+ if [ "$AUTO_ACCEPT" = false ]; then
229
+ echo ""
230
+ read -p " Update to v${REMOTE_VERSION}? (Y/n): " -n 1 -r
231
+ echo ""
232
+ if [[ $REPLY =~ ^[Nn]$ ]]; then
233
+ echo -e "\n${YELLOW}Update cancelled.${NC}"
234
+ exit 0
235
+ fi
236
+ else
237
+ echo -e " ${DIM}Auto-updating...${NC}"
238
+ fi
239
+ fi
240
+
241
+ # Perform update
242
+ printf " ${ARROW} Updating prjct/cli"
243
+ (
244
+ git pull origin main --quiet > /dev/null 2>&1
245
+ ) &
246
+ spin $!
247
+ echo -e " ${GREEN}${CHECK}${NC} Updated to v${REMOTE_VERSION}"
248
+ else
249
+ printf " ${ARROW} Cloning repository"
250
+ (
251
+ git clone https://github.com/jlopezlira/prjct-cli.git "$INSTALL_DIR" --quiet > /dev/null 2>&1
252
+ ) &
253
+ spin $!
254
+
255
+ # Get installed version
256
+ NEW_VERSION=$(get_version "$INSTALL_DIR")
257
+ echo -e " ${GREEN}${CHECK}${NC} Installed v${NEW_VERSION}"
258
+ cd "$INSTALL_DIR"
259
+ fi
260
+
261
+ # Run setup script
262
+ print_step "Running setup"
263
+
264
+ printf " ${ARROW} Installing components"
265
+ chmod +x scripts/setup.sh
266
+ [ -f scripts/interactive-install.js ] && chmod +x scripts/interactive-install.js
267
+ (
268
+ ./scripts/setup.sh > /tmp/prjct-setup.log 2>&1
269
+ ) &
270
+ spin $!
271
+
272
+ if [ $? -eq 0 ]; then
273
+ echo -e " ${GREEN}${CHECK}${NC}"
274
+ else
275
+ echo -e " ${RED}${CROSS}${NC}"
276
+ echo -e "\n ${RED}Setup failed. Check /tmp/prjct-setup.log for details${NC}"
277
+ exit 1
278
+ fi
279
+
280
+ # Install commands to AI editors
281
+ print_step "Configuring AI platforms"
282
+
283
+ cd "$INSTALL_DIR"
284
+
285
+ # Check if we should use interactive mode
286
+ if [ "$AUTO_ACCEPT" = false ]; then
287
+ # Interactive mode: Let user select editors
288
+ printf " ${ARROW} Launching interactive editor selection...\n"
289
+
290
+ # Run interactive installer with Node.js
291
+ INSTALL_OUTPUT=$(node scripts/interactive-install.js 2>&1)
292
+ INSTALL_EXIT=$?
293
+
294
+ if [ $INSTALL_EXIT -eq 0 ]; then
295
+ # Parse JSON result from between markers
296
+ RESULT_JSON=$(echo "$INSTALL_OUTPUT" | sed -n '/__RESULT_START__/,/__RESULT_END__/p' | grep -v '__RESULT_')
297
+
298
+ # Extract summary info
299
+ EDITORS_INSTALLED=$(echo "$RESULT_JSON" | grep -o '"editors":\s*\[[^]]*\]' | sed 's/"editors":\s*\[\(.*\)\]/\1/' | tr -d '"' | tr ',' ' ')
300
+ TOTAL_INSTALLED=$(echo "$RESULT_JSON" | grep -o '"totalInstalled":\s*[0-9]*' | grep -o '[0-9]*')
301
+
302
+ echo ""
303
+ echo -e " ${GREEN}${CHECK}${NC} Commands installed successfully!"
304
+ echo -e " ${GREEN}๐Ÿ“ฆ${NC} Editors: ${CYAN}${EDITORS_INSTALLED}${NC}"
305
+ echo -e " ${GREEN}๐Ÿ“${NC} Commands: ${CYAN}${TOTAL_INSTALLED}${NC}"
306
+ else
307
+ echo -e " ${RED}${CROSS}${NC} Installation failed"
308
+ echo "$INSTALL_OUTPUT" | grep -v '__RESULT_'
309
+ exit 1
310
+ fi
311
+ else
312
+ # Non-interactive mode: Install to all detected editors
313
+ printf " ${ARROW} Auto-installing to all detected editors...\n"
314
+
315
+ INSTALL_RESULT=$(node -e "
316
+ const installer = require('./core/command-installer');
317
+ installer.installToAll(false).then(result => {
318
+ console.log('__RESULT_START__');
319
+ console.log(JSON.stringify(result));
320
+ console.log('__RESULT_END__');
321
+ process.exit(result.success ? 0 : 1);
322
+ }).catch(err => {
323
+ console.error(err.message);
324
+ process.exit(1);
325
+ });
326
+ " 2>&1)
327
+
328
+ INSTALL_EXIT=$?
329
+
330
+ if [ $INSTALL_EXIT -eq 0 ]; then
331
+ # Parse result
332
+ RESULT_JSON=$(echo "$INSTALL_RESULT" | sed -n '/__RESULT_START__/,/__RESULT_END__/p' | grep -v '__RESULT_')
333
+ EDITORS_INSTALLED=$(echo "$RESULT_JSON" | grep -o '"editors":\s*\[[^]]*\]' | sed 's/"editors":\s*\[\(.*\)\]/\1/' | tr -d '"' | tr ',' ' ')
334
+ TOTAL_INSTALLED=$(echo "$RESULT_JSON" | grep -o '"totalInstalled":\s*[0-9]*' | grep -o '[0-9]*')
335
+
336
+ echo -e " ${GREEN}${CHECK}${NC} Installed to: ${CYAN}${EDITORS_INSTALLED}${NC}"
337
+ echo -e " ${GREEN}๐Ÿ“${NC} Commands: ${CYAN}${TOTAL_INSTALLED}${NC}"
338
+ else
339
+ echo -e " ${RED}${CROSS}${NC} Auto-installation failed"
340
+ echo "$INSTALL_RESULT"
341
+ fi
342
+ fi
343
+
344
+ # Configure PATH
345
+ print_step "Setting up environment"
346
+
347
+ # Detect shell
348
+ printf " ${ARROW} Configuring shell..."
349
+ if [ -n "$ZSH_VERSION" ]; then
350
+ SHELL_CONFIG="$HOME/.zshrc"
351
+ SHELL_NAME="zsh"
352
+ elif [ -n "$BASH_VERSION" ]; then
353
+ SHELL_CONFIG="$HOME/.bashrc"
354
+ SHELL_NAME="bash"
355
+ else
356
+ SHELL_CONFIG="$HOME/.profile"
357
+ SHELL_NAME="sh"
358
+ fi
359
+
360
+ # Add to PATH
361
+ if ! grep -q "prjct-cli/bin" "$SHELL_CONFIG" 2>/dev/null; then
362
+ echo "" >> "$SHELL_CONFIG"
363
+ echo "# prjct/cli" >> "$SHELL_CONFIG"
364
+ echo "export PATH=\"\$HOME/.prjct-cli/bin:\$PATH\"" >> "$SHELL_CONFIG"
365
+ echo -e " ${GREEN}${CHECK}${NC} ($SHELL_NAME)"
366
+ else
367
+ echo -e " ${GREEN}${CHECK}${NC} (already configured)"
368
+ fi
369
+
370
+ # Create symlink
371
+ mkdir -p "$HOME/.local/bin"
372
+ ln -sf "$INSTALL_DIR/bin/prjct" "$HOME/.local/bin/prjct" 2>/dev/null || true
373
+
374
+ # Get final installed version for display
375
+ FINAL_VERSION=$(get_version "$INSTALL_DIR")
376
+
377
+ # Success message - clean style
378
+ echo ""
379
+ echo ""
380
+ echo -e " ${GREEN}โœ…${NC} ${BOLD}Installation Complete!${NC} ${GREEN}๐ŸŽ‰${NC}"
381
+ echo ""
382
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—${NC}"
383
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ•šโ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•${NC}"
384
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ• โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘${NC}"
385
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ•”โ•โ•โ•โ• โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘${NC}"
386
+ echo -e " ${BOLD}${CYAN}โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘${NC}"
387
+ echo -e " ${BOLD}${CYAN}โ•šโ•โ• โ•šโ•โ• โ•šโ•โ• โ•šโ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•${NC}"
388
+ echo ""
389
+ echo -e " ${BOLD}${CYAN}prjct${NC}${MAGENTA}/${NC}${GREEN}cli${NC} ${DIM}${WHITE}v${FINAL_VERSION} installed${NC}"
390
+ echo ""
391
+
392
+ # Quick start guide
393
+ echo -e "${BOLD}${CYAN}๐Ÿš€ Quick Start${NC}"
394
+ echo -e "${DIM}โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€${NC}"
395
+ echo ""
396
+
397
+ # Show commands based on detected platforms
398
+ if [ -d "$HOME/.claude" ]; then
399
+ echo -e " ${BOLD}Claude Code Commands:${NC}"
400
+ echo -e " ${GREEN}/p:init${NC} ${DIM}Initialize project${NC}"
401
+ echo -e " ${GREEN}/p:now${NC} ${DIM}Set current task${NC}"
402
+ echo -e " ${GREEN}/p:ship${NC} ${DIM}Ship & celebrate${NC}"
403
+ echo ""
404
+ fi
405
+
406
+ echo -e " ${BOLD}Terminal Commands:${NC}"
407
+ echo -e " ${GREEN}prjct init${NC} ${DIM}Initialize project${NC}"
408
+ echo -e " ${GREEN}prjct now${NC} ${DIM}Set current task${NC}"
409
+ echo -e " ${GREEN}prjct ship${NC} ${DIM}Ship & celebrate${NC}"
410
+
411
+ echo ""
412
+ echo -e "${DIM}โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€${NC}"
413
+ echo ""
414
+
415
+ # Next steps
416
+ echo -e "${BOLD}${YELLOW}โšก Next Steps${NC}"
417
+ echo ""
418
+ echo -e " 1. ${DIM}Reload your terminal:${NC}"
419
+ echo -e " ${CYAN}source $SHELL_CONFIG${NC}"
420
+ echo ""
421
+ echo -e " 2. ${DIM}Initialize your project:${NC}"
422
+ echo -e " ${CYAN}cd your-project && prjct init${NC}"
423
+ echo ""
424
+ echo -e " 3. ${DIM}Start shipping:${NC}"
425
+ echo -e " ${CYAN}prjct now \"build awesome feature\"${NC}"
426
+ echo ""
427
+ echo -e "${DIM}โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€${NC}"
428
+ echo ""
429
+ echo -e " ${DIM}Documentation:${NC} ${CYAN}https://github.com/jlopezlira/prjct-cli${NC}"
430
+ echo -e " ${DIM}Report issues:${NC} ${CYAN}https://github.com/jlopezlira/prjct-cli/issues${NC}"
431
+ echo ""
432
+ echo -e "${BOLD}${MAGENTA}Happy shipping! ๐Ÿš€${NC}"
433
+ echo ""
@@ -0,0 +1,158 @@
1
+ #!/bin/bash
2
+
3
+ # prjct-cli Installation Verification Script
4
+
5
+ # Colors
6
+ GREEN='\033[0;32m'
7
+ RED='\033[0;31m'
8
+ YELLOW='\033[1;33m'
9
+ BLUE='\033[0;34m'
10
+ NC='\033[0m'
11
+
12
+ echo ""
13
+ echo "๐Ÿ” prjct-cli Installation Verification"
14
+ echo "======================================="
15
+ echo ""
16
+
17
+ ERRORS=0
18
+ WARNINGS=0
19
+
20
+ # Function to check and report
21
+ check() {
22
+ local description="$1"
23
+ local condition="$2"
24
+
25
+ if eval "$condition"; then
26
+ echo -e "${GREEN}โœ… $description${NC}"
27
+ return 0
28
+ else
29
+ echo -e "${RED}โŒ $description${NC}"
30
+ ((ERRORS++))
31
+ return 1
32
+ fi
33
+ }
34
+
35
+ warn_check() {
36
+ local description="$1"
37
+ local condition="$2"
38
+
39
+ if eval "$condition"; then
40
+ echo -e "${GREEN}โœ… $description${NC}"
41
+ return 0
42
+ else
43
+ echo -e "${YELLOW}โš ๏ธ $description${NC}"
44
+ ((WARNINGS++))
45
+ return 1
46
+ fi
47
+ }
48
+
49
+ # 1. Check installation directory
50
+ echo -e "${BLUE}๐Ÿ“ Checking installation...${NC}"
51
+ check "Installation directory exists" "[ -d $HOME/.prjct-cli ]"
52
+ check "Core directory exists" "[ -d $HOME/.prjct-cli/core ]"
53
+ check "Commands directory exists" "[ -d $HOME/.prjct-cli/commands ]"
54
+ check "Templates directory exists" "[ -d $HOME/.prjct-cli/templates ]"
55
+ echo ""
56
+
57
+ # 2. Check executable
58
+ echo -e "${BLUE}๐Ÿ”ง Checking executable...${NC}"
59
+ check "Binary exists" "[ -f $HOME/.prjct-cli/bin/prjct ]"
60
+ check "Binary is executable" "[ -x $HOME/.prjct-cli/bin/prjct ]"
61
+
62
+ # Check if in PATH
63
+ if command -v prjct &> /dev/null; then
64
+ echo -e "${GREEN}โœ… prjct command available in PATH${NC}"
65
+ else
66
+ warn_check "prjct command in PATH" "false"
67
+ echo " Try: source ~/.bashrc or source ~/.zshrc"
68
+ fi
69
+ echo ""
70
+
71
+ # 3. Check Claude Code integration
72
+ echo -e "${BLUE}๐Ÿค– Checking Claude Code integration...${NC}"
73
+ if [ -d "$HOME/.claude" ]; then
74
+ check "Claude directory detected" "true"
75
+ check "Commands directory exists" "[ -d $HOME/.claude/commands/p ]"
76
+
77
+ # Check individual command files
78
+ for cmd in init now done ship next idea recap progress stuck context; do
79
+ warn_check "Command /p:$cmd installed" "[ -f $HOME/.claude/commands/p/$cmd.md ]"
80
+ done
81
+
82
+ # Check if commands are readable by Claude
83
+ if [ -f "$HOME/.claude/commands/p/init.md" ]; then
84
+ if grep -q "allowed-tools:" "$HOME/.claude/commands/p/init.md"; then
85
+ echo -e "${GREEN}โœ… Commands have correct format${NC}"
86
+ else
87
+ echo -e "${YELLOW}โš ๏ธ Commands may have incorrect format${NC}"
88
+ ((WARNINGS++))
89
+ fi
90
+ fi
91
+ else
92
+ echo -e "${YELLOW}โš ๏ธ Claude Code not detected${NC}"
93
+ ((WARNINGS++))
94
+ fi
95
+ echo ""
96
+
97
+ # 4. Check Node.js dependencies
98
+ echo -e "${BLUE}๐Ÿ“ฆ Checking dependencies...${NC}"
99
+ check "node_modules exists" "[ -d $HOME/.prjct-cli/node_modules ]"
100
+ check "package.json exists" "[ -f $HOME/.prjct-cli/package.json ]"
101
+
102
+ # Check specific dependencies
103
+ if [ -d "$HOME/.prjct-cli/node_modules" ]; then
104
+ warn_check "commander installed" "[ -d $HOME/.prjct-cli/node_modules/commander ]"
105
+ warn_check "chalk installed" "[ -d $HOME/.prjct-cli/node_modules/chalk ]"
106
+ warn_check "ora installed" "[ -d $HOME/.prjct-cli/node_modules/ora ]"
107
+ fi
108
+ echo ""
109
+
110
+ # 5. Test basic functionality
111
+ echo -e "${BLUE}๐Ÿงช Testing functionality...${NC}"
112
+ cd /tmp
113
+ rm -rf .prjct 2>/dev/null
114
+
115
+ # Test prjct command if available
116
+ if command -v prjct &> /dev/null; then
117
+ # Try to run help
118
+ if prjct 2>&1 | grep -q "Available commands"; then
119
+ echo -e "${GREEN}โœ… prjct command works${NC}"
120
+ else
121
+ echo -e "${RED}โŒ prjct command not working properly${NC}"
122
+ ((ERRORS++))
123
+ fi
124
+ else
125
+ echo -e "${YELLOW}โš ๏ธ Cannot test prjct command (not in PATH)${NC}"
126
+ ((WARNINGS++))
127
+ fi
128
+
129
+ # Test direct execution
130
+ if $HOME/.prjct-cli/bin/prjct 2>&1 | grep -q "Available commands"; then
131
+ echo -e "${GREEN}โœ… Direct execution works${NC}"
132
+ else
133
+ echo -e "${RED}โŒ Direct execution not working${NC}"
134
+ ((ERRORS++))
135
+ fi
136
+ echo ""
137
+
138
+ # Summary
139
+ echo "======================================="
140
+ if [ $ERRORS -eq 0 ]; then
141
+ if [ $WARNINGS -eq 0 ]; then
142
+ echo -e "${GREEN}๐ŸŽ‰ All checks passed! prjct-cli is ready to use.${NC}"
143
+ echo ""
144
+ echo "Try these commands:"
145
+ echo " In Claude Code: /p:init"
146
+ echo " In Terminal: prjct init"
147
+ else
148
+ echo -e "${GREEN}โœ… Installation successful with $WARNINGS warnings.${NC}"
149
+ echo ""
150
+ echo "Some features may need attention, but prjct-cli should work."
151
+ fi
152
+ else
153
+ echo -e "${RED}โŒ Installation has $ERRORS errors and $WARNINGS warnings.${NC}"
154
+ echo ""
155
+ echo "Please run the installer again:"
156
+ echo " cd ~/.prjct-cli && ./setup.sh"
157
+ fi
158
+ echo ""