agileflow 2.96.2 → 2.96.3

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,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.96.3] - 2026-02-06
11
+
12
+ ### Fixed
13
+ - Codex CLI subcommand support for nested commands
14
+
10
15
  ## [2.96.2] - 2026-02-06
11
16
 
12
17
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agileflow",
3
- "version": "2.96.2",
3
+ "version": "2.96.3",
4
4
  "description": "AI-driven agile development system for Claude Code, Cursor, Windsurf, and more",
5
5
  "keywords": [
6
6
  "agile",
@@ -269,9 +269,10 @@ class BaseIdeSetup {
269
269
  * Scan a directory for files with a specific extension
270
270
  * @param {string} dirPath - Directory path
271
271
  * @param {string} extension - File extension (e.g., '.md')
272
- * @returns {Promise<Array>} List of files
272
+ * @param {string} [prefix=''] - Prefix for nested names (used for recursion)
273
+ * @returns {Promise<Array>} List of files with name, path, filename
273
274
  */
274
- async scanDirectory(dirPath, extension) {
275
+ async scanDirectory(dirPath, extension, prefix = '') {
275
276
  const results = [];
276
277
 
277
278
  if (!(await this.exists(dirPath))) {
@@ -281,12 +282,23 @@ class BaseIdeSetup {
281
282
  const entries = await fs.readdir(dirPath, { withFileTypes: true });
282
283
 
283
284
  for (const entry of entries) {
285
+ const fullPath = path.join(dirPath, entry.name);
286
+
284
287
  if (entry.isFile() && entry.name.endsWith(extension)) {
288
+ // Build name with prefix for subcommands (e.g., ideate-new from ideate/new.md)
289
+ const baseName = entry.name.replace(extension, '');
290
+ const fullName = prefix ? `${prefix}-${baseName}` : baseName;
291
+
285
292
  results.push({
286
- name: entry.name.replace(extension, ''),
287
- path: path.join(dirPath, entry.name),
293
+ name: fullName,
294
+ path: fullPath,
288
295
  filename: entry.name,
289
296
  });
297
+ } else if (entry.isDirectory()) {
298
+ // Recursively scan subdirectories with prefix
299
+ const subPrefix = prefix ? `${prefix}-${entry.name}` : entry.name;
300
+ const subResults = await this.scanDirectory(fullPath, extension, subPrefix);
301
+ results.push(...subResults);
290
302
  }
291
303
  }
292
304