agileflow 2.91.0 → 2.92.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.
Files changed (100) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +6 -6
  3. package/lib/README.md +178 -0
  4. package/lib/codebase-indexer.js +32 -23
  5. package/lib/colors.js +190 -12
  6. package/lib/consent.js +232 -0
  7. package/lib/correlation.js +277 -0
  8. package/lib/error-codes.js +46 -0
  9. package/lib/errors.js +48 -6
  10. package/lib/file-cache.js +182 -0
  11. package/lib/format-error.js +156 -0
  12. package/lib/path-resolver.js +155 -7
  13. package/lib/paths.js +212 -20
  14. package/lib/placeholder-registry.js +205 -0
  15. package/lib/registry-di.js +358 -0
  16. package/lib/result-schema.js +363 -0
  17. package/lib/result.js +210 -0
  18. package/lib/session-registry.js +13 -0
  19. package/lib/session-state-machine.js +465 -0
  20. package/lib/validate-commands.js +308 -0
  21. package/lib/validate.js +116 -52
  22. package/package.json +1 -1
  23. package/scripts/af +34 -0
  24. package/scripts/agent-loop.js +63 -9
  25. package/scripts/agileflow-configure.js +2 -2
  26. package/scripts/agileflow-welcome.js +491 -23
  27. package/scripts/archive-completed-stories.sh +57 -11
  28. package/scripts/claude-tmux.sh +102 -0
  29. package/scripts/damage-control-bash.js +3 -70
  30. package/scripts/damage-control-edit.js +3 -20
  31. package/scripts/damage-control-write.js +3 -20
  32. package/scripts/dependency-check.js +310 -0
  33. package/scripts/get-env.js +11 -4
  34. package/scripts/lib/configure-detect.js +23 -1
  35. package/scripts/lib/configure-features.js +50 -2
  36. package/scripts/lib/context-formatter.js +771 -0
  37. package/scripts/lib/context-loader.js +699 -0
  38. package/scripts/lib/damage-control-utils.js +107 -0
  39. package/scripts/lib/json-utils.sh +162 -0
  40. package/scripts/lib/state-migrator.js +353 -0
  41. package/scripts/lib/story-state-machine.js +437 -0
  42. package/scripts/obtain-context.js +80 -1248
  43. package/scripts/pre-push-check.sh +46 -0
  44. package/scripts/precompact-context.sh +23 -10
  45. package/scripts/query-codebase.js +127 -14
  46. package/scripts/ralph-loop.js +5 -5
  47. package/scripts/session-manager.js +408 -55
  48. package/scripts/spawn-parallel.js +666 -0
  49. package/scripts/tui/blessed/data/watcher.js +20 -15
  50. package/scripts/tui/blessed/index.js +2 -2
  51. package/scripts/tui/blessed/panels/output.js +14 -8
  52. package/scripts/tui/blessed/panels/sessions.js +22 -15
  53. package/scripts/tui/blessed/panels/trace.js +14 -8
  54. package/scripts/tui/blessed/ui/help.js +3 -3
  55. package/scripts/tui/blessed/ui/screen.js +4 -4
  56. package/scripts/tui/blessed/ui/statusbar.js +5 -9
  57. package/scripts/tui/blessed/ui/tabbar.js +11 -11
  58. package/scripts/validators/component-validator.js +41 -14
  59. package/scripts/validators/json-schema-validator.js +11 -4
  60. package/scripts/validators/markdown-validator.js +1 -2
  61. package/scripts/validators/migration-validator.js +17 -5
  62. package/scripts/validators/security-validator.js +137 -33
  63. package/scripts/validators/story-format-validator.js +31 -10
  64. package/scripts/validators/test-result-validator.js +19 -4
  65. package/scripts/validators/workflow-validator.js +12 -5
  66. package/src/core/agents/codebase-query.md +24 -0
  67. package/src/core/commands/adr.md +114 -0
  68. package/src/core/commands/agent.md +120 -0
  69. package/src/core/commands/assign.md +145 -0
  70. package/src/core/commands/babysit.md +32 -5
  71. package/src/core/commands/changelog.md +118 -0
  72. package/src/core/commands/configure.md +42 -6
  73. package/src/core/commands/diagnose.md +114 -0
  74. package/src/core/commands/epic.md +113 -0
  75. package/src/core/commands/handoff.md +128 -0
  76. package/src/core/commands/help.md +75 -0
  77. package/src/core/commands/pr.md +96 -0
  78. package/src/core/commands/roadmap/analyze.md +400 -0
  79. package/src/core/commands/session/new.md +132 -6
  80. package/src/core/commands/session/spawn.md +197 -0
  81. package/src/core/commands/sprint.md +22 -0
  82. package/src/core/commands/status.md +74 -0
  83. package/src/core/commands/story.md +143 -4
  84. package/src/core/templates/agileflow-metadata.json +55 -2
  85. package/src/core/templates/plan-template.md +125 -0
  86. package/src/core/templates/story-lifecycle.md +213 -0
  87. package/src/core/templates/story-template.md +4 -0
  88. package/src/core/templates/tdd-test-template.js +241 -0
  89. package/tools/cli/commands/setup.js +95 -0
  90. package/tools/cli/installers/core/installer.js +94 -0
  91. package/tools/cli/installers/ide/_base-ide.js +20 -11
  92. package/tools/cli/installers/ide/codex.js +29 -47
  93. package/tools/cli/installers/ide/windsurf.js +1 -1
  94. package/tools/cli/lib/config-manager.js +17 -2
  95. package/tools/cli/lib/content-transformer.js +271 -0
  96. package/tools/cli/lib/error-handler.js +14 -22
  97. package/tools/cli/lib/ide-error-factory.js +421 -0
  98. package/tools/cli/lib/ide-health-monitor.js +364 -0
  99. package/tools/cli/lib/ide-registry.js +113 -2
  100. package/tools/cli/lib/ui.js +15 -25
@@ -48,6 +48,13 @@ function detectConfig(version) {
48
48
  outdated: false,
49
49
  mode: null,
50
50
  },
51
+ tmuxautospawn: {
52
+ enabled: true, // Default to enabled (opt-out feature)
53
+ valid: true,
54
+ issues: [],
55
+ version: null,
56
+ outdated: false,
57
+ },
51
58
  },
52
59
  metadata: { exists: false, version: null },
53
60
  currentVersion: version,
@@ -242,9 +249,16 @@ function detectMetadata(status, version) {
242
249
  status.features.askuserquestion.mode = meta.features.askUserQuestion.mode || 'all';
243
250
  }
244
251
 
252
+ // TmuxAutoSpawn metadata (default to true if not explicitly set)
253
+ if (meta.features?.tmuxAutoSpawn !== undefined) {
254
+ status.features.tmuxautospawn.enabled = meta.features.tmuxAutoSpawn.enabled !== false;
255
+ } else {
256
+ status.features.tmuxautospawn.enabled = true; // Default enabled
257
+ }
258
+
245
259
  // Read feature versions and check if outdated
246
260
  if (meta.features) {
247
- const featureKeyMap = { askUserQuestion: 'askuserquestion' };
261
+ const featureKeyMap = { askUserQuestion: 'askuserquestion', tmuxAutoSpawn: 'tmuxautospawn' };
248
262
  Object.entries(meta.features).forEach(([feature, data]) => {
249
263
  const statusKey = featureKeyMap[feature] || feature.toLowerCase();
250
264
  if (status.features[statusKey] && data.version) {
@@ -351,6 +365,14 @@ function printStatus(status) {
351
365
  log(` AskUserQuestion: disabled`, c.dim);
352
366
  }
353
367
 
368
+ // TmuxAutoSpawn
369
+ const tas = status.features.tmuxautospawn;
370
+ if (tas.enabled) {
371
+ log(` Tmux Auto-Spawn: enabled`, c.green);
372
+ } else {
373
+ log(` Tmux Auto-Spawn: disabled`, c.dim);
374
+ }
375
+
354
376
  // Metadata version
355
377
  if (status.metadata.exists) {
356
378
  log(`\nMetadata: v${status.metadata.version}`, c.dim);
@@ -38,6 +38,7 @@ const FEATURES = {
38
38
  patternsFile: 'damage-control-patterns.yaml',
39
39
  },
40
40
  askuserquestion: { metadataOnly: true },
41
+ tmuxautospawn: { metadataOnly: true },
41
42
  };
42
43
 
43
44
  const PROFILES = {
@@ -51,19 +52,27 @@ const PROFILES = {
51
52
  'ralphloop',
52
53
  'selfimprove',
53
54
  'askuserquestion',
55
+ 'tmuxautospawn',
54
56
  ],
55
57
  archivalDays: 30,
56
58
  },
57
59
  basic: {
58
60
  description: 'Essential hooks + archival (SessionStart + PreCompact + Archival)',
59
- enable: ['sessionstart', 'precompact', 'archival', 'askuserquestion'],
61
+ enable: ['sessionstart', 'precompact', 'archival', 'askuserquestion', 'tmuxautospawn'],
60
62
  disable: ['statusline', 'ralphloop', 'selfimprove'],
61
63
  archivalDays: 30,
62
64
  },
63
65
  minimal: {
64
66
  description: 'SessionStart + archival only',
65
67
  enable: ['sessionstart', 'archival'],
66
- disable: ['precompact', 'statusline', 'ralphloop', 'selfimprove', 'askuserquestion'],
68
+ disable: [
69
+ 'precompact',
70
+ 'statusline',
71
+ 'ralphloop',
72
+ 'selfimprove',
73
+ 'askuserquestion',
74
+ 'tmuxautospawn',
75
+ ],
67
76
  archivalDays: 30,
68
77
  },
69
78
  none: {
@@ -76,6 +85,7 @@ const PROFILES = {
76
85
  'ralphloop',
77
86
  'selfimprove',
78
87
  'askuserquestion',
88
+ 'tmuxautospawn',
79
89
  ],
80
90
  },
81
91
  };
@@ -214,6 +224,25 @@ function enableFeature(feature, options = {}, version) {
214
224
  return true;
215
225
  }
216
226
 
227
+ // Handle tmuxautospawn (metadata only)
228
+ if (feature === 'tmuxautospawn') {
229
+ updateMetadata(
230
+ {
231
+ features: {
232
+ tmuxAutoSpawn: {
233
+ enabled: true,
234
+ version,
235
+ at: new Date().toISOString(),
236
+ },
237
+ },
238
+ },
239
+ version
240
+ );
241
+ success('Tmux auto-spawn enabled');
242
+ info('Running "af" or "agileflow" will auto-start Claude in tmux session');
243
+ return true;
244
+ }
245
+
217
246
  // Handle damage control
218
247
  if (feature === 'damagecontrol') {
219
248
  return enableDamageControl(settings, options, version);
@@ -499,6 +528,25 @@ function disableFeature(feature, version) {
499
528
  return true;
500
529
  }
501
530
 
531
+ // Disable tmuxautospawn
532
+ if (feature === 'tmuxautospawn') {
533
+ updateMetadata(
534
+ {
535
+ features: {
536
+ tmuxAutoSpawn: {
537
+ enabled: false,
538
+ version,
539
+ at: new Date().toISOString(),
540
+ },
541
+ },
542
+ },
543
+ version
544
+ );
545
+ success('Tmux auto-spawn disabled');
546
+ info('Running "af" or "agileflow" will start Claude directly without tmux');
547
+ return true;
548
+ }
549
+
502
550
  // Disable damage control
503
551
  if (feature === 'damagecontrol') {
504
552
  if (settings.hooks?.PreToolUse && Array.isArray(settings.hooks.PreToolUse)) {