agileflow 2.76.0 → 2.78.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 (124) hide show
  1. package/README.md +3 -3
  2. package/package.json +6 -1
  3. package/scripts/agileflow-configure.js +185 -13
  4. package/scripts/agileflow-statusline.sh +266 -27
  5. package/scripts/agileflow-welcome.js +160 -52
  6. package/scripts/auto-self-improve.js +63 -20
  7. package/scripts/check-update.js +1 -4
  8. package/scripts/damage-control-bash.js +232 -0
  9. package/scripts/damage-control-edit.js +243 -0
  10. package/scripts/damage-control-write.js +243 -0
  11. package/scripts/get-env.js +15 -7
  12. package/scripts/lib/frontmatter-parser.js +4 -1
  13. package/scripts/obtain-context.js +59 -48
  14. package/scripts/ralph-loop.js +25 -13
  15. package/scripts/validate-expertise.sh +19 -15
  16. package/src/core/agents/accessibility.md +124 -53
  17. package/src/core/agents/adr-writer.md +192 -52
  18. package/src/core/agents/analytics.md +139 -60
  19. package/src/core/agents/api.md +173 -63
  20. package/src/core/agents/ci.md +139 -57
  21. package/src/core/agents/compliance.md +159 -68
  22. package/src/core/agents/configuration/damage-control.md +356 -0
  23. package/src/core/agents/database.md +162 -61
  24. package/src/core/agents/datamigration.md +179 -66
  25. package/src/core/agents/design.md +179 -57
  26. package/src/core/agents/devops.md +160 -3
  27. package/src/core/agents/documentation.md +204 -60
  28. package/src/core/agents/epic-planner.md +147 -55
  29. package/src/core/agents/integrations.md +197 -69
  30. package/src/core/agents/mentor.md +158 -57
  31. package/src/core/agents/mobile.md +159 -67
  32. package/src/core/agents/monitoring.md +154 -65
  33. package/src/core/agents/multi-expert.md +115 -43
  34. package/src/core/agents/orchestrator.md +77 -24
  35. package/src/core/agents/performance.md +130 -75
  36. package/src/core/agents/product.md +151 -55
  37. package/src/core/agents/qa.md +162 -74
  38. package/src/core/agents/readme-updater.md +178 -76
  39. package/src/core/agents/refactor.md +148 -95
  40. package/src/core/agents/research.md +143 -72
  41. package/src/core/agents/security.md +154 -65
  42. package/src/core/agents/testing.md +176 -97
  43. package/src/core/agents/ui.md +170 -79
  44. package/src/core/commands/adr/list.md +171 -0
  45. package/src/core/commands/adr/update.md +235 -0
  46. package/src/core/commands/adr/view.md +252 -0
  47. package/src/core/commands/adr.md +207 -50
  48. package/src/core/commands/agent.md +16 -0
  49. package/src/core/commands/assign.md +148 -44
  50. package/src/core/commands/auto.md +18 -1
  51. package/src/core/commands/babysit.md +361 -36
  52. package/src/core/commands/baseline.md +14 -0
  53. package/src/core/commands/blockers.md +170 -51
  54. package/src/core/commands/board.md +144 -66
  55. package/src/core/commands/changelog.md +15 -0
  56. package/src/core/commands/ci.md +179 -69
  57. package/src/core/commands/compress.md +18 -0
  58. package/src/core/commands/configure.md +16 -0
  59. package/src/core/commands/context/export.md +193 -4
  60. package/src/core/commands/context/full.md +191 -18
  61. package/src/core/commands/context/note.md +248 -4
  62. package/src/core/commands/debt.md +17 -0
  63. package/src/core/commands/deploy.md +208 -65
  64. package/src/core/commands/deps.md +15 -0
  65. package/src/core/commands/diagnose.md +16 -0
  66. package/src/core/commands/docs.md +196 -64
  67. package/src/core/commands/epic/list.md +170 -0
  68. package/src/core/commands/epic/view.md +242 -0
  69. package/src/core/commands/epic.md +192 -69
  70. package/src/core/commands/feedback.md +191 -71
  71. package/src/core/commands/handoff.md +162 -48
  72. package/src/core/commands/help.md +9 -0
  73. package/src/core/commands/ideate.md +446 -0
  74. package/src/core/commands/impact.md +16 -0
  75. package/src/core/commands/metrics.md +141 -37
  76. package/src/core/commands/multi-expert.md +77 -0
  77. package/src/core/commands/packages.md +16 -0
  78. package/src/core/commands/pr.md +161 -67
  79. package/src/core/commands/readme-sync.md +16 -0
  80. package/src/core/commands/research/analyze.md +568 -0
  81. package/src/core/commands/research/ask.md +345 -20
  82. package/src/core/commands/research/import.md +562 -19
  83. package/src/core/commands/research/list.md +173 -5
  84. package/src/core/commands/research/view.md +181 -8
  85. package/src/core/commands/retro.md +135 -48
  86. package/src/core/commands/review.md +219 -47
  87. package/src/core/commands/session/end.md +209 -0
  88. package/src/core/commands/session/history.md +210 -0
  89. package/src/core/commands/session/init.md +116 -0
  90. package/src/core/commands/session/new.md +296 -0
  91. package/src/core/commands/session/resume.md +166 -0
  92. package/src/core/commands/session/status.md +166 -0
  93. package/src/core/commands/skill/create.md +115 -17
  94. package/src/core/commands/skill/delete.md +117 -0
  95. package/src/core/commands/skill/edit.md +104 -0
  96. package/src/core/commands/skill/list.md +128 -0
  97. package/src/core/commands/skill/test.md +135 -0
  98. package/src/core/commands/skill/upgrade.md +542 -0
  99. package/src/core/commands/sprint.md +17 -1
  100. package/src/core/commands/status.md +133 -21
  101. package/src/core/commands/story/list.md +176 -0
  102. package/src/core/commands/story/view.md +265 -0
  103. package/src/core/commands/story-validate.md +101 -1
  104. package/src/core/commands/story.md +204 -51
  105. package/src/core/commands/template.md +16 -1
  106. package/src/core/commands/tests.md +226 -64
  107. package/src/core/commands/update.md +17 -1
  108. package/src/core/commands/validate-expertise.md +16 -0
  109. package/src/core/commands/velocity.md +140 -36
  110. package/src/core/commands/verify.md +14 -0
  111. package/src/core/commands/whats-new.md +30 -0
  112. package/src/core/skills/_learnings/README.md +91 -0
  113. package/src/core/skills/_learnings/_template.yaml +106 -0
  114. package/src/core/skills/_learnings/commit.yaml +69 -0
  115. package/src/core/templates/damage-control-patterns.yaml +234 -0
  116. package/src/core/templates/skill-template.md +53 -11
  117. package/tools/cli/commands/list.js +3 -1
  118. package/tools/cli/commands/start.js +180 -0
  119. package/tools/cli/commands/uninstall.js +4 -5
  120. package/tools/cli/commands/update.js +11 -3
  121. package/tools/cli/lib/content-injector.js +6 -1
  122. package/tools/cli/tui/Dashboard.js +66 -0
  123. package/tools/cli/tui/StoryList.js +69 -0
  124. package/tools/cli/tui/index.js +16 -0
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  </p>
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/agileflow?color=brightgreen)](https://www.npmjs.com/package/agileflow)
6
- [![Commands](https://img.shields.io/badge/commands-58-blue)](docs/04-architecture/commands.md)
6
+ [![Commands](https://img.shields.io/badge/commands-68-blue)](docs/04-architecture/commands.md)
7
7
  [![Agents/Experts](https://img.shields.io/badge/agents%2Fexperts-27-orange)](docs/04-architecture/subagents.md)
8
8
  [![Skills](https://img.shields.io/badge/skills-dynamic-purple)](docs/04-architecture/skills.md)
9
9
 
@@ -65,7 +65,7 @@ AgileFlow combines three proven methodologies:
65
65
 
66
66
  | Component | Count | Description |
67
67
  |-----------|-------|-------------|
68
- | [Commands](docs/04-architecture/commands.md) | 58 | Slash commands for agile workflows |
68
+ | [Commands](docs/04-architecture/commands.md) | 68 | Slash commands for agile workflows |
69
69
  | [Agents/Experts](docs/04-architecture/subagents.md) | 27 | Specialized agents with self-improving knowledge bases |
70
70
  | [Skills](docs/04-architecture/skills.md) | Dynamic | Generated on-demand with `/agileflow:skill:create` |
71
71
 
@@ -76,7 +76,7 @@ AgileFlow combines three proven methodologies:
76
76
  Full documentation lives in [`docs/04-architecture/`](docs/04-architecture/):
77
77
 
78
78
  ### Reference
79
- - [Commands](docs/04-architecture/commands.md) - All 58 slash commands
79
+ - [Commands](docs/04-architecture/commands.md) - All 68 slash commands
80
80
  - [Agents/Experts](docs/04-architecture/subagents.md) - 27 specialized agents with self-improving knowledge
81
81
  - [Skills](docs/04-architecture/skills.md) - Dynamic skill generator with MCP integration
82
82
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agileflow",
3
- "version": "2.76.0",
3
+ "version": "2.78.0",
4
4
  "description": "AI-driven agile development system for Claude Code, Cursor, Windsurf, and more",
5
5
  "keywords": [
6
6
  "agile",
@@ -51,6 +51,8 @@
51
51
  "test:coverage": "jest --coverage"
52
52
  },
53
53
  "dependencies": {
54
+ "blessed": "^0.1.81",
55
+ "blessed-contrib": "^4.10.1",
54
56
  "chalk": "^4.1.2",
55
57
  "commander": "^12.1.0",
56
58
  "fs-extra": "^11.2.0",
@@ -59,6 +61,9 @@
59
61
  "ora": "^5.4.1",
60
62
  "semver": "^7.6.3"
61
63
  },
64
+ "optionalDependencies": {
65
+ "node-pty": "^1.0.0"
66
+ },
62
67
  "engines": {
63
68
  "node": ">=18.0.0"
64
69
  },
@@ -23,7 +23,7 @@
23
23
  * --detect Show current status
24
24
  * --help Show help
25
25
  *
26
- * Features: sessionstart, precompact, ralphloop, selfimprove, archival, statusline, autoupdate
26
+ * Features: sessionstart, precompact, ralphloop, selfimprove, archival, statusline, autoupdate, damagecontrol
27
27
  */
28
28
 
29
29
  const fs = require('fs');
@@ -76,6 +76,11 @@ const FEATURES = {
76
76
  archival: { script: 'archive-completed-stories.sh', requiresHook: 'sessionstart' },
77
77
  statusline: { script: 'agileflow-statusline.sh' },
78
78
  autoupdate: { metadataOnly: true }, // Stored in metadata.updates.autoUpdate
79
+ damagecontrol: {
80
+ preToolUseHooks: true,
81
+ scripts: ['damage-control-bash.js', 'damage-control-edit.js', 'damage-control-write.js'],
82
+ patternsFile: 'damage-control-patterns.yaml',
83
+ },
79
84
  };
80
85
 
81
86
  // Complete registry of all scripts that may need repair
@@ -87,6 +92,9 @@ const ALL_SCRIPTS = {
87
92
  'auto-self-improve.js': { feature: 'selfimprove', required: true },
88
93
  'archive-completed-stories.sh': { feature: 'archival', required: true },
89
94
  'agileflow-statusline.sh': { feature: 'statusline', required: true },
95
+ 'damage-control-bash.js': { feature: 'damagecontrol', required: true },
96
+ 'damage-control-edit.js': { feature: 'damagecontrol', required: true },
97
+ 'damage-control-write.js': { feature: 'damagecontrol', required: true },
90
98
 
91
99
  // Support scripts (used by commands/agents)
92
100
  'obtain-context.js': { usedBy: ['/babysit', '/mentor', '/sprint'] },
@@ -215,6 +223,7 @@ function detectConfig() {
215
223
  selfimprove: { enabled: false, valid: true, issues: [], version: null, outdated: false },
216
224
  archival: { enabled: false, threshold: null, version: null, outdated: false },
217
225
  statusline: { enabled: false, valid: true, issues: [], version: null, outdated: false },
226
+ damagecontrol: { enabled: false, valid: true, issues: [], version: null, outdated: false, level: null, patternCount: 0 },
218
227
  },
219
228
  metadata: { exists: false, version: null },
220
229
  currentVersion: VERSION,
@@ -298,6 +307,32 @@ function detectConfig() {
298
307
  }
299
308
  }
300
309
  }
310
+
311
+ // PreToolUse hooks (damage control)
312
+ if (settings.hooks.PreToolUse) {
313
+ if (Array.isArray(settings.hooks.PreToolUse) && settings.hooks.PreToolUse.length > 0) {
314
+ // Check for damage-control hooks by looking for damage-control scripts
315
+ const hasBashHook = settings.hooks.PreToolUse.some(
316
+ h => h.matcher === 'Bash' && h.hooks?.some(hk => hk.command?.includes('damage-control'))
317
+ );
318
+ const hasEditHook = settings.hooks.PreToolUse.some(
319
+ h => h.matcher === 'Edit' && h.hooks?.some(hk => hk.command?.includes('damage-control'))
320
+ );
321
+ const hasWriteHook = settings.hooks.PreToolUse.some(
322
+ h => h.matcher === 'Write' && h.hooks?.some(hk => hk.command?.includes('damage-control'))
323
+ );
324
+
325
+ if (hasBashHook || hasEditHook || hasWriteHook) {
326
+ status.features.damagecontrol.enabled = true;
327
+ // Count how many of the 3 hooks are present
328
+ const hookCount = [hasBashHook, hasEditHook, hasWriteHook].filter(Boolean).length;
329
+ if (hookCount < 3) {
330
+ status.features.damagecontrol.valid = false;
331
+ status.features.damagecontrol.issues.push(`Only ${hookCount}/3 hooks configured`);
332
+ }
333
+ }
334
+ }
335
+ }
301
336
  }
302
337
 
303
338
  // StatusLine
@@ -326,6 +361,11 @@ function detectConfig() {
326
361
  status.features.archival.threshold = meta.archival.threshold_days;
327
362
  }
328
363
 
364
+ // Damage control metadata
365
+ if (meta.features?.damagecontrol?.enabled) {
366
+ status.features.damagecontrol.level = meta.features.damagecontrol.protectionLevel || 'standard';
367
+ }
368
+
329
369
  // Read feature versions from metadata and check if outdated
330
370
  if (meta.features) {
331
371
  Object.entries(meta.features).forEach(([feature, data]) => {
@@ -402,6 +442,22 @@ function printStatus(status) {
402
442
 
403
443
  printFeature('statusline', 'Status Line');
404
444
 
445
+ // Damage Control (special display with level info)
446
+ const dc = status.features.damagecontrol;
447
+ if (dc.enabled) {
448
+ let dcStatusText = 'enabled';
449
+ if (dc.level) dcStatusText += ` (${dc.level})`;
450
+ if (!dc.valid) dcStatusText = 'INCOMPLETE';
451
+ const dcIcon = dc.enabled && dc.valid ? 'šŸ›”ļø' : 'āš ļø';
452
+ const dcColor = dc.enabled && dc.valid ? c.green : c.yellow;
453
+ log(` ${dcIcon} Damage Control: ${dcStatusText}`, dcColor);
454
+ if (dc.issues?.length > 0) {
455
+ dc.issues.forEach(issue => log(` └─ ${issue}`, c.yellow));
456
+ }
457
+ } else {
458
+ log(` āŒ Damage Control: disabled`, c.dim);
459
+ }
460
+
405
461
  // Metadata
406
462
  if (status.metadata.exists) {
407
463
  log(`\nMetadata: v${status.metadata.version}`, c.dim);
@@ -584,9 +640,10 @@ function enableFeature(feature, options = {}) {
584
640
 
585
641
  // Stop hooks use error suppression to avoid blocking Claude
586
642
  const isStoHook = config.hook === 'Stop';
587
- const command = config.type === 'node'
588
- ? `node ${absoluteScriptPath}${isStoHook ? ' 2>/dev/null || true' : ''}`
589
- : `bash ${absoluteScriptPath}${isStoHook ? ' 2>/dev/null || true' : ''}`;
643
+ const command =
644
+ config.type === 'node'
645
+ ? `node ${absoluteScriptPath}${isStoHook ? ' 2>/dev/null || true' : ''}`
646
+ : `bash ${absoluteScriptPath}${isStoHook ? ' 2>/dev/null || true' : ''}`;
590
647
 
591
648
  if (isStoHook) {
592
649
  // Stop hooks stack - add to existing hooks instead of replacing
@@ -599,9 +656,7 @@ function enableFeature(feature, options = {}) {
599
656
  }
600
657
 
601
658
  // Check if this script is already added
602
- const hasHook = settings.hooks.Stop[0].hooks.some(h =>
603
- h.command?.includes(config.script)
604
- );
659
+ const hasHook = settings.hooks.Stop[0].hooks.some(h => h.command?.includes(config.script));
605
660
 
606
661
  if (!hasHook) {
607
662
  settings.hooks.Stop[0].hooks.push({ type: 'command', command });
@@ -686,6 +741,79 @@ function enableFeature(feature, options = {}) {
686
741
  return true; // Skip settings.json write for this feature
687
742
  }
688
743
 
744
+ // Handle damage control (PreToolUse hooks)
745
+ if (feature === 'damagecontrol') {
746
+ const level = options.protectionLevel || 'standard';
747
+
748
+ // Verify all required scripts exist
749
+ const requiredScripts = ['damage-control-bash.js', 'damage-control-edit.js', 'damage-control-write.js'];
750
+ for (const script of requiredScripts) {
751
+ if (!scriptExists(script)) {
752
+ error(`Script not found: ${getScriptPath(script)}`);
753
+ info('Run "npx agileflow update" to reinstall scripts');
754
+ return false;
755
+ }
756
+ }
757
+
758
+ // Deploy patterns file if not exists
759
+ const patternsDir = path.join(process.cwd(), '.agileflow', 'config');
760
+ const patternsDest = path.join(patternsDir, 'damage-control-patterns.yaml');
761
+ if (!fs.existsSync(patternsDest)) {
762
+ ensureDir(patternsDir);
763
+ // Try to copy from templates
764
+ const templatePath = path.join(process.cwd(), '.agileflow', 'templates', 'damage-control-patterns.yaml');
765
+ if (fs.existsSync(templatePath)) {
766
+ fs.copyFileSync(templatePath, patternsDest);
767
+ success('Deployed damage control patterns');
768
+ } else {
769
+ warn('No patterns template found - hooks will use defaults');
770
+ }
771
+ }
772
+
773
+ // Initialize PreToolUse array if not exists
774
+ if (!settings.hooks.PreToolUse) {
775
+ settings.hooks.PreToolUse = [];
776
+ }
777
+
778
+ // Helper to add or update a PreToolUse hook
779
+ const addPreToolUseHook = (matcher, scriptName) => {
780
+ const scriptPath = path.join(process.cwd(), '.agileflow', 'scripts', scriptName);
781
+
782
+ // Remove existing hook for this matcher if present
783
+ settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter(h => h.matcher !== matcher);
784
+
785
+ // Add new hook
786
+ settings.hooks.PreToolUse.push({
787
+ matcher,
788
+ hooks: [{ type: 'command', command: `node ${scriptPath}`, timeout: 5 }],
789
+ });
790
+ };
791
+
792
+ // Add hooks for Bash, Edit, Write tools
793
+ addPreToolUseHook('Bash', 'damage-control-bash.js');
794
+ addPreToolUseHook('Edit', 'damage-control-edit.js');
795
+ addPreToolUseHook('Write', 'damage-control-write.js');
796
+
797
+ success('Damage control PreToolUse hooks enabled');
798
+
799
+ // Update metadata with protection level
800
+ updateMetadata({
801
+ features: {
802
+ damagecontrol: {
803
+ enabled: true,
804
+ protectionLevel: level,
805
+ version: VERSION,
806
+ at: new Date().toISOString(),
807
+ },
808
+ },
809
+ });
810
+
811
+ writeJSON('.claude/settings.json', settings);
812
+ updateGitignore();
813
+
814
+ return true;
815
+ }
816
+
689
817
  writeJSON('.claude/settings.json', settings);
690
818
  updateMetadata({
691
819
  features: { [feature]: { enabled: true, version: VERSION, at: new Date().toISOString() } },
@@ -765,6 +893,45 @@ function disableFeature(feature) {
765
893
  return true; // Skip settings.json write for this feature
766
894
  }
767
895
 
896
+ // Disable damage control (PreToolUse hooks)
897
+ if (feature === 'damagecontrol') {
898
+ if (settings.hooks?.PreToolUse && Array.isArray(settings.hooks.PreToolUse)) {
899
+ const before = settings.hooks.PreToolUse.length;
900
+
901
+ // Remove damage-control hooks (Bash, Edit, Write matchers with damage-control scripts)
902
+ settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter(h => {
903
+ const isDamageControlHook = h.hooks?.some(hk => hk.command?.includes('damage-control'));
904
+ return !isDamageControlHook;
905
+ });
906
+
907
+ const after = settings.hooks.PreToolUse.length;
908
+
909
+ if (before > after) {
910
+ success(`Removed ${before - after} damage control PreToolUse hook(s)`);
911
+ }
912
+
913
+ // If no more PreToolUse hooks, remove the entire array
914
+ if (settings.hooks.PreToolUse.length === 0) {
915
+ delete settings.hooks.PreToolUse;
916
+ }
917
+ }
918
+
919
+ // Update metadata
920
+ updateMetadata({
921
+ features: {
922
+ damagecontrol: {
923
+ enabled: false,
924
+ version: VERSION,
925
+ at: new Date().toISOString(),
926
+ },
927
+ },
928
+ });
929
+
930
+ writeJSON('.claude/settings.json', settings);
931
+ success('Damage control disabled');
932
+ return true;
933
+ }
934
+
768
935
  writeJSON('.claude/settings.json', settings);
769
936
  updateMetadata({
770
937
  features: { [feature]: { enabled: false, version: VERSION, at: new Date().toISOString() } },
@@ -1027,9 +1194,11 @@ function showVersionInfo() {
1027
1194
  const installed = installedVersion.split('.').map(Number);
1028
1195
  const latest = latestVersion.split('.').map(Number);
1029
1196
 
1030
- if (latest[0] > installed[0] ||
1031
- (latest[0] === installed[0] && latest[1] > installed[1]) ||
1032
- (latest[0] === installed[0] && latest[1] === installed[1] && latest[2] > installed[2])) {
1197
+ if (
1198
+ latest[0] > installed[0] ||
1199
+ (latest[0] === installed[0] && latest[1] > installed[1]) ||
1200
+ (latest[0] === installed[0] && latest[1] === installed[1] && latest[2] > installed[2])
1201
+ ) {
1033
1202
  log('\nšŸ”„ Update available! Run: npx agileflow update', c.yellow);
1034
1203
  }
1035
1204
  }
@@ -1227,9 +1396,10 @@ ${c.cyan}Feature Control:${c.reset}
1227
1396
  --enable=<list> Enable features (comma-separated)
1228
1397
  --disable=<list> Disable features (comma-separated)
1229
1398
 
1230
- Features: sessionstart, precompact, ralphloop, selfimprove, archival, statusline
1399
+ Features: sessionstart, precompact, ralphloop, selfimprove, archival, statusline, damagecontrol
1231
1400
 
1232
1401
  Stop hooks (ralphloop, selfimprove) run when Claude completes/pauses
1402
+ Damage control (damagecontrol) uses PreToolUse hooks to block dangerous commands
1233
1403
 
1234
1404
  ${c.cyan}Statusline Components:${c.reset}
1235
1405
  --show=<list> Show statusline components (comma-separated)
@@ -1292,6 +1462,9 @@ ${c.cyan}Examples:${c.reset}
1292
1462
 
1293
1463
  # Repair scripts for a specific feature
1294
1464
  node .agileflow/scripts/agileflow-configure.js --repair=statusline
1465
+
1466
+ # Enable damage control (PreToolUse hooks to block dangerous commands)
1467
+ node .agileflow/scripts/agileflow-configure.js --enable=damagecontrol
1295
1468
  `);
1296
1469
  }
1297
1470
 
@@ -1351,8 +1524,7 @@ function main() {
1351
1524
  else if (arg.startsWith('--repair=')) {
1352
1525
  repair = true;
1353
1526
  repairFeature = arg.split('=')[1].trim().toLowerCase();
1354
- }
1355
- else if (arg === '--version' || arg === '-v') showVersion = true;
1527
+ } else if (arg === '--version' || arg === '-v') showVersion = true;
1356
1528
  else if (arg === '--list-scripts' || arg === '--scripts') listScriptsMode = true;
1357
1529
  });
1358
1530