@pjmendonca/devflow 1.19.0 → 1.20.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 (36) hide show
  1. package/.claude/skills/dashboard/SKILL.md +118 -0
  2. package/CHANGELOG.md +21 -0
  3. package/README.md +2 -2
  4. package/bin/devflow-dashboard.js +10 -0
  5. package/bin/devflow-swarm.js +11 -0
  6. package/bin/devflow.js +2 -0
  7. package/package.json +3 -1
  8. package/tooling/.automation/memory/knowledge/kg_integration-test.json +85 -1
  9. package/tooling/.automation/memory/knowledge/kg_test-story.json +284 -2
  10. package/tooling/.automation/memory/shared/shared_integration-test.json +25 -1
  11. package/tooling/.automation/memory/shared/shared_test-story.json +73 -1
  12. package/tooling/.automation/memory/shared/shared_test.json +157 -1
  13. package/tooling/.automation/memory/shared/shared_validation-check.json +27 -1
  14. package/tooling/.automation/validation/history/2026-01-16_val_0b81ec2f.json +41 -0
  15. package/tooling/.automation/validation/history/2026-01-16_val_26c18e64.json +32 -0
  16. package/tooling/.automation/validation/history/2026-01-16_val_32af0152.json +32 -0
  17. package/tooling/.automation/validation/history/2026-01-16_val_353d1569.json +32 -0
  18. package/tooling/.automation/validation/history/2026-01-16_val_39e3c143.json +59 -0
  19. package/tooling/.automation/validation/history/2026-01-16_val_77fb42e4.json +32 -0
  20. package/tooling/.automation/validation/history/2026-01-16_val_a0752656.json +41 -0
  21. package/tooling/.automation/validation/history/2026-01-16_val_a29213b0.json +41 -0
  22. package/tooling/.automation/validation/history/2026-01-16_val_a9375d4c.json +32 -0
  23. package/tooling/.automation/validation/history/2026-01-16_val_c147bbdf.json +32 -0
  24. package/tooling/.automation/validation/history/2026-01-16_val_d06ccf8d.json +32 -0
  25. package/tooling/.automation/validation/history/2026-01-16_val_d6a80295.json +59 -0
  26. package/tooling/.automation/validation/history/2026-01-16_val_dce5005d.json +41 -0
  27. package/tooling/.automation/validation/history/2026-01-16_val_e53b3a63.json +32 -0
  28. package/tooling/scripts/lib/__init__.py +1 -1
  29. package/tooling/scripts/lib/cost_display.py +7 -1
  30. package/tooling/scripts/lib/pair_programming.py +6 -4
  31. package/tooling/scripts/lib/swarm_orchestrator.py +13 -11
  32. package/tooling/scripts/live_dashboard.py +832 -0
  33. package/tooling/scripts/new-doc.py +1 -1
  34. package/tooling/scripts/run-collab.py +2 -2
  35. package/tooling/scripts/run-story.py +21 -9
  36. package/tooling/scripts/setup-checkpoint-service.py +1 -1
@@ -21,7 +21,7 @@ from pathlib import Path
21
21
  SCRIPT_DIR = Path(__file__).parent
22
22
  sys.path.insert(0, str(SCRIPT_DIR / "lib"))
23
23
 
24
- from platform import get_platform
24
+ from lib.platform import get_platform
25
25
 
26
26
 
27
27
  def run_windows(args):
@@ -38,10 +38,10 @@ from typing import Optional
38
38
  SCRIPT_DIR = Path(__file__).parent
39
39
  sys.path.insert(0, str(SCRIPT_DIR / "lib"))
40
40
 
41
- from platform import IS_MACOS, IS_WINDOWS
42
-
43
41
  from colors import Colors
44
42
 
43
+ from lib.platform import IS_MACOS, IS_WINDOWS
44
+
45
45
 
46
46
  def detect_claude_cli() -> Optional[str]:
47
47
  """Detect Claude CLI across platforms.
@@ -39,13 +39,13 @@ SCRIPT_DIR = Path(__file__).parent
39
39
  # Add lib directory for imports
40
40
  sys.path.insert(0, str(SCRIPT_DIR / "lib"))
41
41
 
42
- from platform import IS_WINDOWS, get_platform
43
-
44
42
  from colors import Colors
45
43
 
44
+ from lib.platform import IS_WINDOWS, get_platform
45
+
46
46
  # Try to import context monitor
47
47
  try:
48
- from context_monitor import ContextMonitor, StatusLine, get_status_manager
48
+ from context_monitor import ContextMonitor, StatusLine
49
49
 
50
50
  HAS_CONTEXT_MONITOR = True
51
51
  except ImportError:
@@ -208,11 +208,15 @@ class NativeRunner:
208
208
  print("Recommendation: Save checkpoint NOW and clear session.")
209
209
  self._trigger_auto_checkpoint("emergency")
210
210
  elif level == ContextLevel.CRITICAL:
211
- print(f"\n{Colors.BOLD_RED}[CRITICAL]{Colors.RESET} Context at {state.context_usage_percent:.0f}%")
211
+ print(
212
+ f"\n{Colors.BOLD_RED}[CRITICAL]{Colors.RESET} Context at {state.context_usage_percent:.0f}%"
213
+ )
212
214
  print("Recommendation: Consider wrapping up and checkpointing soon.")
213
215
  self._trigger_auto_checkpoint("critical")
214
216
  elif level == ContextLevel.WARNING:
215
- print(f"\n{Colors.YELLOW}[WARNING]{Colors.RESET} Context at {state.context_usage_percent:.0f}%")
217
+ print(
218
+ f"\n{Colors.YELLOW}[WARNING]{Colors.RESET} Context at {state.context_usage_percent:.0f}%"
219
+ )
216
220
  print(f"~{state.exchanges_remaining} exchanges remaining before compaction.")
217
221
 
218
222
  def _trigger_auto_checkpoint(self, reason: str):
@@ -223,7 +227,9 @@ class NativeRunner:
223
227
  from context_checkpoint import ContextCheckpointManager
224
228
 
225
229
  manager = ContextCheckpointManager()
226
- context_level = self.context_monitor.state.context_usage_ratio if self.context_monitor else 0.0
230
+ context_level = (
231
+ self.context_monitor.state.context_usage_ratio if self.context_monitor else 0.0
232
+ )
227
233
  checkpoint_file = manager.create_checkpoint(context_level, reason=reason)
228
234
  print(f"[CHECKPOINT] Saved to: {checkpoint_file.name}")
229
235
 
@@ -438,11 +444,15 @@ class NativeRunner:
438
444
  # Print header with status line
439
445
  print(f"{Colors.DIM}{'─' * 70}{Colors.RESET}")
440
446
  print(f"{Colors.BOLD}DEVFLOW STORY RUNNER{Colors.RESET}")
441
- print(f"Story: {self.args.story_key} | Model: {self.args.model} | Budget: ${self.args.budget:.2f}")
447
+ print(
448
+ f"Story: {self.args.story_key} | Model: {self.args.model} | Budget: ${self.args.budget:.2f}"
449
+ )
442
450
  if self.validation_enabled:
443
451
  print("Validation: Enabled")
444
452
  if self.context_monitor:
445
- print(f"Context Monitor: Active (window: {self.context_monitor.state.context_window:,} tokens)")
453
+ print(
454
+ f"Context Monitor: Active (window: {self.context_monitor.state.context_window:,} tokens)"
455
+ )
446
456
  print(f"{Colors.DIM}{'─' * 70}{Colors.RESET}")
447
457
  print()
448
458
 
@@ -470,7 +480,9 @@ class NativeRunner:
470
480
 
471
481
  # Set initial activity state
472
482
  if self.context_monitor:
473
- self.context_monitor.set_current_activity(total_phases=total_phases, phases_completed=0)
483
+ self.context_monitor.set_current_activity(
484
+ total_phases=total_phases, phases_completed=0
485
+ )
474
486
 
475
487
  # Context phase
476
488
  if run_context:
@@ -24,7 +24,7 @@ from pathlib import Path
24
24
  SCRIPT_DIR = Path(__file__).parent
25
25
  sys.path.insert(0, str(SCRIPT_DIR / "lib"))
26
26
 
27
- from platform import get_platform
27
+ from lib.platform import get_platform
28
28
 
29
29
 
30
30
  def run_windows(action):