oden-forge 2.0.0 → 2.0.2

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/README.md CHANGED
@@ -50,10 +50,33 @@ cd oden-forge
50
50
  # Si instalaste con NPM
51
51
  oden-forge status
52
52
 
53
+ # Si no funciona (común con ASDF/NVM):
54
+ npx oden-forge status
55
+
53
56
  # En Claude Code (todos los métodos)
54
57
  /oden:help
55
58
  ```
56
59
 
60
+ ### 🔧 Troubleshooting
61
+
62
+ #### ❌ "command not found: oden-forge"
63
+ **Causa**: Usas ASDF, NVM u otro Node version manager.
64
+
65
+ **Solución 1 (Rápida)**:
66
+ ```bash
67
+ # Usar npx (funciona siempre)
68
+ npx oden-forge status
69
+ npx oden-forge migrate
70
+ ```
71
+
72
+ **Solución 2 (Permanente)**:
73
+ ```bash
74
+ # Arreglar PATH
75
+ echo 'export PATH="$(npm config get prefix)/bin:$PATH"' >> ~/.zshrc
76
+ source ~/.zshrc
77
+ oden-forge status # Ahora debería funcionar
78
+ ```
79
+
57
80
  ## Comandos Disponibles
58
81
 
59
82
  ### Inicialización y Setup
package/bin/migrate.js CHANGED
@@ -50,7 +50,7 @@ async function analyzeMigrationNeeds(claudeDir) {
50
50
  // Check for old command structures
51
51
  const oldCommands = [
52
52
  path.join(claudeDir, 'commands', 'pm'),
53
- path.join(claudeDir, 'commands', 'ccpm')
53
+ path.join(claudeDir, 'commands', 'ccmp')
54
54
  ];
55
55
 
56
56
  oldCommands.forEach(dir => {
@@ -64,6 +64,36 @@ async function analyzeMigrationNeeds(claudeDir) {
64
64
  }
65
65
  });
66
66
 
67
+ // Check for mixed legacy commands in /oden directory
68
+ const odenDir = path.join(claudeDir, 'commands', 'oden');
69
+ if (fs.existsSync(odenDir)) {
70
+ const legacyCommands = [
71
+ 'analyze.md', 'blocked.md', 'clean.md', 'dev.md', 'epic-close.md',
72
+ 'epic-decompose.md', 'epic-edit.md', 'epic-list.md', 'epic-merge.md',
73
+ 'epic-oneshot.md', 'epic-refresh.md', 'epic-show.md', 'epic-start-worktree.md',
74
+ 'epic-start.md', 'epic-status.md', 'epic-sync.md', 'import.md', 'in-progress.md',
75
+ 'issue-analyze.md', 'issue-close.md', 'issue-edit.md', 'issue-reopen.md',
76
+ 'issue-show.md', 'issue-start.md', 'issue-status.md', 'issue-sync.md',
77
+ 'next.md', 'plan.md', 'prd-edit.md', 'prd-list.md', 'prd-new.md',
78
+ 'prd-parse.md', 'prd-status.md', 'search.md', 'standup.md', 'status.md',
79
+ 'test-reference-update.md', 'validate.md'
80
+ ];
81
+
82
+ const foundLegacy = legacyCommands.filter(cmd =>
83
+ fs.existsSync(path.join(odenDir, cmd))
84
+ );
85
+
86
+ if (foundLegacy.length > 0) {
87
+ migrationItems.push({
88
+ type: 'Mixed Legacy Commands',
89
+ from: odenDir,
90
+ action: `Remove ${foundLegacy.length} legacy commands`,
91
+ priority: 'high',
92
+ legacyCommands: foundLegacy
93
+ });
94
+ }
95
+ }
96
+
67
97
  // Check for old scripts
68
98
  const oldScripts = [
69
99
  path.join(claudeDir, 'scripts', 'pm'),
@@ -164,7 +194,18 @@ async function executeMigration(migrationPlan) {
164
194
  }
165
195
 
166
196
  async function removeOldInstallation(item) {
167
- if (fs.existsSync(item.from)) {
197
+ if (item.type === 'Mixed Legacy Commands' && item.legacyCommands) {
198
+ // Remove specific legacy commands from mixed directory
199
+ let removed = 0;
200
+ for (const cmd of item.legacyCommands) {
201
+ const cmdPath = path.join(item.from, cmd);
202
+ if (fs.existsSync(cmdPath)) {
203
+ fs.removeSync(cmdPath);
204
+ removed++;
205
+ }
206
+ }
207
+ console.log(chalk.gray(` Removed ${removed} legacy commands from oden directory`));
208
+ } else if (fs.existsSync(item.from)) {
168
209
  fs.removeSync(item.from);
169
210
  }
170
211
  }
@@ -15,13 +15,31 @@ async function postInstall() {
15
15
 
16
16
  await install({ force: false });
17
17
 
18
+ // Check if CLI commands are available
19
+ const { execSync } = require('child_process');
20
+ let cliAvailable = false;
21
+ try {
22
+ execSync('oden-forge --version', { stdio: 'pipe' });
23
+ cliAvailable = true;
24
+ } catch (error) {
25
+ // CLI not in PATH
26
+ }
27
+
18
28
  console.log(chalk.blue('\n💡 Next Steps:'));
19
- console.log(chalk.white(' 1. Open Claude Code in your project'));
20
- console.log(chalk.white(' 2. Run: /oden:init'));
21
- console.log(chalk.white(' 3. Follow the wizard'));
29
+
30
+ if (!cliAvailable) {
31
+ console.log(chalk.yellow('⚠️ CLI commands not in PATH (common with ASDF/NVM)'));
32
+ console.log(chalk.white(' Fix: echo \'export PATH="$(npm config get prefix)/bin:$PATH"\' >> ~/.zshrc'));
33
+ console.log(chalk.white(' Or use: npx oden-forge status'));
34
+ console.log('');
35
+ }
36
+
37
+ console.log(chalk.white(' 1. Verify: ' + (cliAvailable ? 'oden-forge status' : 'npx oden-forge status')));
38
+ console.log(chalk.white(' 2. Open Claude Code in your project'));
39
+ console.log(chalk.white(' 3. Run: /oden:init'));
22
40
  console.log('');
23
41
  console.log(chalk.gray(' 📖 Documentation: https://javikin.github.io/oden-forge'));
24
- console.log(chalk.gray(' 🆘 Help: oden-forge --help'));
42
+ console.log(chalk.gray(' 🆘 Help: ' + (cliAvailable ? 'oden-forge --help' : 'npx oden-forge --help')));
25
43
  console.log('');
26
44
 
27
45
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oden-forge",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Documentation-First Development Toolkit for Claude Code - Create professional projects with built-in methodology, Teams orchestration, and MCP management",
5
5
  "keywords": [
6
6
  "claude-code",