@pjmendonca/devflow 1.9.0 → 1.10.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 (42) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +50 -48
  3. package/bin/create-devflow.js +140 -0
  4. package/lib/python-check.js +5 -5
  5. package/package.json +2 -1
  6. package/tooling/.automation/agents/dev.md +2 -2
  7. package/tooling/.automation/agents/reviewer.md +8 -8
  8. package/tooling/.automation/agents/sm.md +1 -1
  9. package/tooling/.automation/memory/knowledge/kg_integration-test.json +137 -1
  10. package/tooling/.automation/memory/knowledge/kg_test-story.json +438 -2
  11. package/tooling/.automation/memory/shared/shared_integration-test.json +25 -1
  12. package/tooling/.automation/memory/shared/shared_test-story.json +73 -1
  13. package/tooling/.automation/overrides/templates/reviewer/mentoring-reviewer.yaml +5 -5
  14. package/tooling/docs/DOC-STANDARD.md +21 -21
  15. package/tooling/docs/templates/bug-report.md +1 -1
  16. package/tooling/scripts/context_checkpoint.py +16 -16
  17. package/tooling/scripts/create-persona.py +7 -7
  18. package/tooling/scripts/create-persona.sh +4 -4
  19. package/tooling/scripts/init-project-workflow.sh +19 -19
  20. package/tooling/scripts/lib/__init__.py +1 -1
  21. package/tooling/scripts/lib/agent_handoff.py +4 -6
  22. package/tooling/scripts/lib/agent_router.py +6 -6
  23. package/tooling/scripts/lib/checkpoint-integration.sh +14 -14
  24. package/tooling/scripts/lib/claude-cli.sh +50 -50
  25. package/tooling/scripts/lib/cost_tracker.py +4 -4
  26. package/tooling/scripts/lib/errors.py +9 -9
  27. package/tooling/scripts/lib/pair_programming.py +5 -5
  28. package/tooling/scripts/lib/shared_memory.py +4 -4
  29. package/tooling/scripts/lib/swarm_orchestrator.py +18 -18
  30. package/tooling/scripts/new-doc.sh +12 -12
  31. package/tooling/scripts/personalize_agent.py +4 -4
  32. package/tooling/scripts/rollback-migration.sh +4 -4
  33. package/tooling/scripts/run-collab.ps1 +2 -2
  34. package/tooling/scripts/run-collab.py +13 -13
  35. package/tooling/scripts/run-story.py +1 -1
  36. package/tooling/scripts/run-story.sh +20 -20
  37. package/tooling/scripts/setup-checkpoint-service.sh +4 -4
  38. package/tooling/scripts/tech-debt-tracker.py +12 -12
  39. package/tooling/scripts/update_version.py +10 -10
  40. package/tooling/scripts/validate-overrides.py +10 -12
  41. package/tooling/scripts/validate-overrides.sh +7 -7
  42. package/tooling/scripts/validate_setup.py +8 -8
@@ -205,38 +205,38 @@ def main():
205
205
  if v is not None
206
206
  )
207
207
  if all_match:
208
- print(" All versions are in sync")
208
+ print("[OK] All versions are in sync")
209
209
  sys.exit(0)
210
210
  else:
211
- print(" Versions are out of sync")
211
+ print("[X] Versions are out of sync")
212
212
  sys.exit(1)
213
213
 
214
214
  # Update all files
215
215
  success = True
216
216
 
217
217
  if update_readme_version(readme_path, target_version):
218
- print(f" Updated README.md to version {target_version}")
218
+ print(f"[OK] Updated README.md to version {target_version}")
219
219
  else:
220
- print(" Failed to update README.md")
220
+ print("[X] Failed to update README.md")
221
221
  success = False
222
222
 
223
223
  if update_pyproject_version(pyproject_path, target_version):
224
- print(f" Updated pyproject.toml to version {target_version}")
224
+ print(f"[OK] Updated pyproject.toml to version {target_version}")
225
225
  else:
226
- print(" Failed to update pyproject.toml")
226
+ print("[X] Failed to update pyproject.toml")
227
227
  success = False
228
228
 
229
229
  if update_init_version(init_path, target_version):
230
- print(f" Updated __init__.py to version {target_version}")
230
+ print(f"[OK] Updated __init__.py to version {target_version}")
231
231
  else:
232
- print(" Failed to update __init__.py")
232
+ print("[X] Failed to update __init__.py")
233
233
  success = False
234
234
 
235
235
  if success:
236
- print("\n All versions synced successfully!")
236
+ print("\n[OK] All versions synced successfully!")
237
237
  print(" Don't forget to commit the changes.")
238
238
  else:
239
- print("\n⚠ Some updates failed. Check errors above.")
239
+ print("\nSome updates failed. Check errors above.")
240
240
  sys.exit(1)
241
241
 
242
242
 
@@ -369,19 +369,19 @@ def print_result(result: ValidationResult, verbose: bool = False):
369
369
  print(f"{Colors.BLUE}Validating:{Colors.NC} {os.path.basename(result.file_path)}")
370
370
 
371
371
  for error in result.errors:
372
- print(f"{Colors.RED} ERROR:{Colors.NC} {error}")
372
+ print(f"{Colors.RED} [X] ERROR:{Colors.NC} {error}")
373
373
 
374
374
  for warning in result.warnings:
375
- print(f"{Colors.YELLOW} WARNING:{Colors.NC} {warning}")
375
+ print(f"{Colors.YELLOW} WARNING:{Colors.NC} {warning}")
376
376
 
377
377
  if verbose:
378
378
  for info in result.info:
379
- print(f"{Colors.GREEN} {Colors.NC} {info}")
379
+ print(f"{Colors.GREEN} [OK]{Colors.NC} {info}")
380
380
  else:
381
381
  # Show success messages only for key validations
382
382
  for info in result.info:
383
383
  if any(key in info for key in ["syntax is valid", "override is valid", "defined:"]):
384
- print(f"{Colors.GREEN} {Colors.NC} {info}")
384
+ print(f"{Colors.GREEN} [OK]{Colors.NC} {info}")
385
385
 
386
386
 
387
387
  def main():
@@ -429,7 +429,7 @@ def main():
429
429
  if not args.json:
430
430
  print(f"\n{Colors.YELLOW}Auto-fixing:{Colors.NC} {file_path.name}")
431
431
  for fix in fixes:
432
- print(f"{Colors.GREEN} {Colors.NC} {fix}")
432
+ print(f"{Colors.GREEN} [OK]{Colors.NC} {fix}")
433
433
 
434
434
  result = validate_override_file(file_path, agents_dir, args.verbose)
435
435
  results.append(result)
@@ -444,7 +444,7 @@ def main():
444
444
  if not args.json:
445
445
  print(f"\n{Colors.YELLOW}Auto-fixing:{Colors.NC} {profile_path.name}")
446
446
  for fix in fixes:
447
- print(f"{Colors.GREEN} {Colors.NC} {fix}")
447
+ print(f"{Colors.GREEN} [OK]{Colors.NC} {fix}")
448
448
 
449
449
  result = validate_user_profile(profile_path, args.verbose)
450
450
  results.append(result)
@@ -456,7 +456,7 @@ def main():
456
456
  if not args.json:
457
457
  print(f"\n{Colors.YELLOW}Auto-fixing:{Colors.NC} {file_path.name}")
458
458
  for fix in fixes:
459
- print(f"{Colors.GREEN} {Colors.NC} {fix}")
459
+ print(f"{Colors.GREEN} [OK]{Colors.NC} {fix}")
460
460
 
461
461
  result = validate_override_file(file_path, agents_dir, args.verbose)
462
462
  results.append(result)
@@ -497,14 +497,12 @@ def main():
497
497
  print()
498
498
 
499
499
  if total_errors > 0:
500
- print(f"{Colors.RED} Validation failed with {total_errors} error(s){Colors.NC}")
500
+ print(f"{Colors.RED} Validation failed with {total_errors} error(s){Colors.NC}")
501
501
  sys.exit(1)
502
502
  elif total_warnings > 0:
503
- print(
504
- f"{Colors.YELLOW}⚠️ Validation passed with {total_warnings} warning(s){Colors.NC}"
505
- )
503
+ print(f"{Colors.YELLOW} Validation passed with {total_warnings} warning(s){Colors.NC}")
506
504
  else:
507
- print(f"{Colors.GREEN} All validations passed!{Colors.NC}")
505
+ print(f"{Colors.GREEN} All validations passed!{Colors.NC}")
508
506
 
509
507
 
510
508
  if __name__ == "__main__":
@@ -56,21 +56,21 @@ print_header() {
56
56
  }
57
57
 
58
58
  error() {
59
- echo -e "${RED} ERROR:${NC} $1"
59
+ echo -e "${RED} [X] ERROR:${NC} $1"
60
60
  ((ERRORS++))
61
61
  }
62
62
 
63
63
  warning() {
64
- echo -e "${YELLOW} WARNING:${NC} $1"
64
+ echo -e "${YELLOW} WARNING:${NC} $1"
65
65
  ((WARNINGS++))
66
66
  }
67
67
 
68
68
  success() {
69
- echo -e "${GREEN} ✓${NC} $1"
69
+ echo -e "${GREEN} [OK]${NC} $1"
70
70
  }
71
71
 
72
72
  info() {
73
- [[ "$VERBOSE" == "true" ]] && echo -e "${BLUE} ℹ${NC} $1"
73
+ [[ "$VERBOSE" == "true" ]] && echo -e "${BLUE} [i]${NC} $1"
74
74
  }
75
75
 
76
76
  ################################################################################
@@ -418,13 +418,13 @@ main() {
418
418
  echo ""
419
419
 
420
420
  if [[ $ERRORS -gt 0 ]]; then
421
- echo -e "${RED} Validation failed with $ERRORS error(s)${NC}"
421
+ echo -e "${RED} Validation failed with $ERRORS error(s)${NC}"
422
422
  exit 1
423
423
  elif [[ $WARNINGS -gt 0 ]]; then
424
- echo -e "${YELLOW}⚠️ Validation passed with $WARNINGS warning(s)${NC}"
424
+ echo -e "${YELLOW} Validation passed with $WARNINGS warning(s)${NC}"
425
425
  exit 0
426
426
  else
427
- echo -e "${GREEN} All validations passed!${NC}"
427
+ echo -e "${GREEN} All validations passed!${NC}"
428
428
  exit 0
429
429
  fi
430
430
  }
@@ -28,11 +28,11 @@ from typing import Optional
28
28
  class CheckStatus(Enum):
29
29
  """Status of a validation check."""
30
30
 
31
- PASS = ""
32
- FAIL = ""
33
- WARN = "⚠️"
34
- SKIP = "⏭️"
35
- INFO = "ℹ️"
31
+ PASS = "[PASS]"
32
+ FAIL = "[FAIL]"
33
+ WARN = "[WARNING]"
34
+ SKIP = "[SKIP]"
35
+ INFO = "[INFO]"
36
36
 
37
37
 
38
38
  @dataclass
@@ -443,7 +443,7 @@ class SetupValidator:
443
443
 
444
444
  def run_all_checks(self) -> bool:
445
445
  """Run all validation checks."""
446
- print(f"\n{Colors.BOLD}🔍 Devflow Setup Validation{Colors.RESET}\n")
446
+ print(f"\n{Colors.BOLD}Devflow Setup Validation{Colors.RESET}\n")
447
447
  print(f" Project: {PROJECT_ROOT}")
448
448
  print(f" Python: {sys.executable}")
449
449
  print()
@@ -475,12 +475,12 @@ class SetupValidator:
475
475
 
476
476
  if failed == 0:
477
477
  print(
478
- f"\n{Colors.GREEN}{Colors.BOLD} All checks passed! Devflow is ready to use.{Colors.RESET}\n"
478
+ f"\n{Colors.GREEN}{Colors.BOLD}[OK] All checks passed! Devflow is ready to use.{Colors.RESET}\n"
479
479
  )
480
480
  return True
481
481
  else:
482
482
  print(
483
- f"\n{Colors.RED}{Colors.BOLD} {failed} check(s) failed. Please fix the issues above.{Colors.RESET}"
483
+ f"\n{Colors.RED}{Colors.BOLD}[FAIL] {failed} check(s) failed. Please fix the issues above.{Colors.RESET}"
484
484
  )
485
485
  if not self.fix:
486
486
  print(f" {Colors.DIM}Run with --fix to auto-fix some issues.{Colors.RESET}\n")