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 +23 -0
- package/bin/migrate.js +43 -2
- package/bin/post-install.js +22 -4
- package/package.json +1 -1
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', '
|
|
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 (
|
|
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
|
}
|
package/bin/post-install.js
CHANGED
|
@@ -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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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.
|
|
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",
|