prjct-cli 0.5.0 → 0.5.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 CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.5.1] - 2025-10-02
11
+
12
+ ### Fixed
13
+ - **Critical: `prjct start` Command Error** - Fixed "commandInstaller.detectEditors is not a function" error
14
+ - **Root Cause**: v0.5.0 refactored `command-installer.js` to Claude-only architecture but didn't update calling code
15
+ - **Files Modified**: `core/commands.js` (lines 2227-2374)
16
+ - **Changes**:
17
+ - Refactored `start()` function to use `detectClaude()` instead of `detectEditors()`
18
+ - Replaced `interactiveInstall()` with `installCommands()`
19
+ - Removed multi-editor logic (Cursor, Windsurf references)
20
+ - Updated messaging to be Claude-only with download link
21
+ - Simplified `setup()` function with installation status checking
22
+ - Added `--force` flag support for reinstallation
23
+ - **Result**: Both `prjct start` and `prjct setup` now work correctly
24
+ - **Commands Installed**: Successfully installs all 21 /p:* commands to `~/.claude/commands/p/`
25
+
10
26
  ### Fixed
11
27
  - **Corrected Claude Subscription Messaging** - Clarified honest pricing throughout
12
28
  - Updated `website/src/pages/Changelog.tsx`:
package/README.md CHANGED
@@ -310,7 +310,7 @@ prjct recap # Show progress
310
310
  - `/p:analyze` - Auto-analyze codebase
311
311
  - `/p:analyze --sync` - Sync with implemented features
312
312
 
313
- > šŸ’” **Tip:** Visit [prjct.dev/commands](https://prjct.dev/commands) for interactive command guide or [prjct.dev/workflows-guide](https://prjct.dev/workflows-guide) for step-by-step examples
313
+ > šŸ’” **Tip:** Visit [prjct.app/commands](https://prjct.app/commands) for interactive command guide or [prjct.app/workflows-guide](https://prjct.app/workflows-guide) for step-by-step examples
314
314
 
315
315
  ## šŸ“– Complete Command Reference
316
316
 
@@ -362,7 +362,7 @@ prjct recap # Show progress
362
362
 
363
363
  **Sprint planning:** `/p:roadmap` → Add features → `/p:now` top priority → `/p:ship` → `/p:roadmap next`
364
364
 
365
- > šŸ“š **More workflows:** Visit [prjct.dev/workflows-guide](https://prjct.dev/workflows-guide) for detailed interactive examples
365
+ > šŸ“š **More workflows:** Visit [prjct.app/workflows-guide](https://prjct.app/workflows-guide) for detailed interactive examples
366
366
 
367
367
  ## ā“ FAQ
368
368
 
@@ -381,7 +381,7 @@ Designed for creators and small teams (2-5 people). Each member has their own lo
381
381
  **How do I migrate from Jira/Trello?**
382
382
  No migration needed. Just `/p:init` and start working.
383
383
 
384
- > šŸ’¬ **More questions?** Check [prjct.dev/faq](https://prjct.dev/faq) or [open an issue](https://github.com/jlopezlira/prjct-cli/issues)
384
+ > šŸ’¬ **More questions?** Check [prjct.app/faq](https://prjct.app/faq) or [open an issue](https://github.com/jlopezlira/prjct-cli/issues)
385
385
 
386
386
  ## šŸ“‚ File Structure
387
387
 
package/core/commands.js CHANGED
@@ -2224,54 +2224,55 @@ ${diagram}
2224
2224
  console.log(chalk.cyan(' šŸ¤– Perfect context for AI agents'))
2225
2225
  console.log('')
2226
2226
 
2227
- console.log(chalk.bold.magenta('šŸ“¦ Setup - Install Commands to AI Editors\n'))
2227
+ console.log(chalk.bold.magenta('šŸ“¦ Setup - Install Commands to Claude\n'))
2228
2228
 
2229
- // Detect editors
2229
+ // Detect Claude
2230
2230
  const commandInstaller = require('./command-installer')
2231
- const detection = await commandInstaller.detectEditors()
2232
- const detectedEditors = Object.entries(detection).filter(([_, info]) => info.detected)
2231
+ const claudeDetected = await commandInstaller.detectClaude()
2233
2232
 
2234
- if (detectedEditors.length === 0) {
2233
+ if (!claudeDetected) {
2235
2234
  return {
2236
2235
  success: false,
2237
2236
  message: this.agent.formatResponse(
2238
- 'No AI editors detected.\n\nSupported: Claude Code, Cursor, Windsurf',
2237
+ 'Claude not detected.\n\nPlease install Claude Code or Claude Desktop first.\n\nVisit: https://claude.ai/download',
2239
2238
  'error'
2240
2239
  ),
2241
2240
  }
2242
2241
  }
2243
2242
 
2244
- console.log(chalk.cyan('šŸ” Detected AI editors:'))
2245
- detectedEditors.forEach(([key, info]) => {
2246
- const editorName = commandInstaller.editors[key]?.name || key
2247
- console.log(chalk.green(` [āœ“] ${editorName} (${info.path})`))
2248
- })
2243
+ console.log(chalk.green('āœ“ Claude detected'))
2249
2244
  console.log('')
2250
2245
 
2251
- // Interactive selection (allow uninstall = true)
2252
- const installResult = await commandInstaller.interactiveInstall(true)
2246
+ // Install commands
2247
+ console.log(chalk.cyan('Installing /p:* commands...'))
2248
+ const installResult = await commandInstaller.installCommands()
2253
2249
 
2254
2250
  if (!installResult.success) {
2255
2251
  return {
2256
2252
  success: false,
2257
- message: this.agent.formatResponse(installResult.message || 'Setup failed', 'error'),
2253
+ message: this.agent.formatResponse(
2254
+ `Installation failed: ${installResult.error || 'Unknown error'}`,
2255
+ 'error'
2256
+ ),
2258
2257
  }
2259
2258
  }
2260
2259
 
2261
- // Install Context7 MCP
2262
- const mcpResult = await commandInstaller.installContext7MCP()
2263
-
2264
2260
  // Success message
2265
- let message = `āœ… Commands installed in: ${installResult.editors.join(', ')}\n`
2261
+ const installedCount = installResult.installed?.length || 0
2262
+ const errorCount = installResult.errors?.length || 0
2263
+
2264
+ let message = `āœ… Successfully installed ${installedCount} commands to Claude\n`
2265
+ message += ` Location: ${installResult.path}\n`
2266
2266
 
2267
- if (mcpResult.success && mcpResult.editors.length > 0) {
2268
- message += `\nšŸ”Œ Context7 MCP enabled in: ${mcpResult.editors.join(', ')}`
2267
+ if (errorCount > 0) {
2268
+ message += `\nāš ļø ${errorCount} command(s) had issues during installation`
2269
2269
  }
2270
2270
 
2271
2271
  message += '\n\n✨ prjct is ready to use!'
2272
2272
  message += '\n\nNext steps:'
2273
2273
  message += '\n cd your-project/'
2274
2274
  message += '\n prjct init'
2275
+ message += '\n\nā„¹ļø Context7 MCP is automatically available in Claude'
2275
2276
 
2276
2277
  return {
2277
2278
  success: true,
@@ -2296,60 +2297,72 @@ ${diagram}
2296
2297
  try {
2297
2298
  await this.initializeAgent()
2298
2299
 
2299
- const {
2300
- force = false,
2301
- editor = null,
2302
- createTemplates = false,
2303
- interactive = true,
2304
- } = options
2300
+ const { force = false } = options
2305
2301
 
2306
- if (createTemplates) {
2307
- const templateResult = await commandInstaller.createTemplates()
2308
- if (!templateResult.success) {
2309
- return {
2310
- success: false,
2311
- message: this.agent.formatResponse(templateResult.message, 'error'),
2312
- }
2302
+ // Detect Claude
2303
+ const commandInstaller = require('./command-installer')
2304
+ const claudeDetected = await commandInstaller.detectClaude()
2305
+
2306
+ if (!claudeDetected) {
2307
+ return {
2308
+ success: false,
2309
+ message: this.agent.formatResponse(
2310
+ 'Claude not detected. Please install Claude Code or Claude Desktop first.',
2311
+ 'error'
2312
+ ),
2313
2313
  }
2314
2314
  }
2315
2315
 
2316
- const detection = await commandInstaller.detectEditors(process.cwd())
2317
- const detectedEditors = Object.entries(detection)
2318
- .filter(([_, info]) => info.detected)
2316
+ // Check current installation status
2317
+ const status = await commandInstaller.checkInstallation()
2318
+
2319
+ if (status.installed && !force) {
2320
+ const chalk = require('chalk')
2321
+ let report = chalk.green('āœ“ Commands already installed\n')
2322
+ report += chalk.dim(` Location: ${status.path}\n`)
2323
+ report += chalk.dim(` Commands: ${status.commands.length}\n`)
2324
+ report += '\nUse --force to reinstall'
2319
2325
 
2320
- if (detectedEditors.length === 0) {
2321
2326
  return {
2322
- success: false,
2323
- message: this.agent.formatResponse('No AI editors detected on this system', 'error'),
2327
+ success: true,
2328
+ message: this.agent.formatResponse(report, 'info'),
2324
2329
  }
2325
2330
  }
2326
2331
 
2327
- let installResult
2332
+ // Install or reinstall commands
2333
+ const installResult = force
2334
+ ? await commandInstaller.updateCommands()
2335
+ : await commandInstaller.installCommands()
2328
2336
 
2329
- if (editor) {
2330
- // Install to specific editor
2331
- installResult = await commandInstaller.installToEditor(editor, force)
2332
- } else if (interactive) {
2333
- // Interactive mode: use new interactiveInstall method
2334
- installResult = await commandInstaller.interactiveInstall(force)
2335
- } else {
2336
- // Non-interactive mode: install to all detected editors
2337
- installResult = await commandInstaller.installToAll(force)
2337
+ if (!installResult.success) {
2338
+ return {
2339
+ success: false,
2340
+ message: this.agent.formatResponse(
2341
+ `Installation failed: ${installResult.error || 'Unknown error'}`,
2342
+ 'error'
2343
+ ),
2344
+ }
2338
2345
  }
2339
2346
 
2340
- // Always install Context7 MCP after commands installation
2341
- const mcpResult = await commandInstaller.installContext7MCP()
2347
+ // Generate report
2348
+ const installedCount = installResult.installed?.length || 0
2349
+ const errorCount = installResult.errors?.length || 0
2342
2350
 
2343
- let report = commandInstaller.generateReport(installResult)
2344
- if (mcpResult.success && mcpResult.editors.length > 0) {
2345
- report += '\n\nšŸ”Œ Context7 MCP Enabled\n'
2346
- report += ` Editors: ${mcpResult.editors.join(', ')}\n`
2347
- report += ' šŸ“š Library documentation now available automatically'
2351
+ let report = `āœ… Successfully ${force ? 'reinstalled' : 'installed'} ${installedCount} commands\n`
2352
+ report += ` Location: ${installResult.path}\n`
2353
+
2354
+ if (errorCount > 0) {
2355
+ report += `\nāš ļø ${errorCount} command(s) had issues\n`
2356
+ installResult.errors.forEach(err => {
2357
+ report += ` - ${err.file}: ${err.error}\n`
2358
+ })
2348
2359
  }
2349
2360
 
2361
+ report += '\nšŸ“š Context7 MCP is automatically available in Claude'
2362
+
2350
2363
  return {
2351
- success: installResult.success,
2352
- message: this.agent.formatResponse(report, installResult.success ? 'celebrate' : 'error'),
2364
+ success: true,
2365
+ message: this.agent.formatResponse(report, 'celebrate'),
2353
2366
  }
2354
2367
  } catch (error) {
2355
2368
  await this.initializeAgent()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prjct-cli",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Built for Claude - Ship fast, track progress, stay focused. Developer momentum tool for indie hackers.",
5
5
  "main": "core/index.js",
6
6
  "bin": {
@@ -36,7 +36,7 @@
36
36
  "no-bs",
37
37
  "focus"
38
38
  ],
39
- "author": "prjct.dev",
39
+ "author": "prjct.app",
40
40
  "license": "MIT",
41
41
  "dependencies": {
42
42
  "chalk": "^4.1.2",
@@ -62,7 +62,7 @@
62
62
  "bugs": {
63
63
  "url": "https://github.com/jlopezlira/prjct-cli/issues"
64
64
  },
65
- "homepage": "https://prjct.dev",
65
+ "homepage": "https://prjct.app",
66
66
  "engines": {
67
67
  "node": ">=18.0.0"
68
68
  },