@pjmendonca/devflow 1.19.0 → 1.20.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 (55) hide show
  1. package/.claude/hooks/session-startup.sh +20 -0
  2. package/.claude/settings.json +0 -4
  3. package/.claude/skills/dashboard/SKILL.md +118 -0
  4. package/CHANGELOG.md +26 -0
  5. package/README.md +2 -2
  6. package/bin/devflow-dashboard.js +10 -0
  7. package/bin/devflow-swarm.js +11 -0
  8. package/bin/devflow.js +2 -0
  9. package/package.json +3 -1
  10. package/tooling/.automation/memory/knowledge/kg_integration-test.json +212 -1
  11. package/tooling/.automation/memory/knowledge/kg_test-story.json +710 -2
  12. package/tooling/.automation/memory/shared/shared_integration-test.json +61 -1
  13. package/tooling/.automation/memory/shared/shared_test-story.json +181 -1
  14. package/tooling/.automation/memory/shared/shared_test.json +313 -1
  15. package/tooling/.automation/memory/shared/shared_validation-check.json +66 -1
  16. package/tooling/.automation/validation/history/2026-01-16_val_0b81ec2f.json +41 -0
  17. package/tooling/.automation/validation/history/2026-01-16_val_26c18e64.json +32 -0
  18. package/tooling/.automation/validation/history/2026-01-16_val_32af0152.json +32 -0
  19. package/tooling/.automation/validation/history/2026-01-16_val_353d1569.json +32 -0
  20. package/tooling/.automation/validation/history/2026-01-16_val_39e3c143.json +59 -0
  21. package/tooling/.automation/validation/history/2026-01-16_val_77fb42e4.json +32 -0
  22. package/tooling/.automation/validation/history/2026-01-16_val_a0752656.json +41 -0
  23. package/tooling/.automation/validation/history/2026-01-16_val_a29213b0.json +41 -0
  24. package/tooling/.automation/validation/history/2026-01-16_val_a9375d4c.json +32 -0
  25. package/tooling/.automation/validation/history/2026-01-16_val_c147bbdf.json +32 -0
  26. package/tooling/.automation/validation/history/2026-01-16_val_d06ccf8d.json +32 -0
  27. package/tooling/.automation/validation/history/2026-01-16_val_d6a80295.json +59 -0
  28. package/tooling/.automation/validation/history/2026-01-16_val_dce5005d.json +41 -0
  29. package/tooling/.automation/validation/history/2026-01-16_val_e53b3a63.json +32 -0
  30. package/tooling/.automation/validation/history/2026-01-18_val_108c18cf.json +32 -0
  31. package/tooling/.automation/validation/history/2026-01-18_val_35ee606f.json +32 -0
  32. package/tooling/.automation/validation/history/2026-01-18_val_3fc7268b.json +41 -0
  33. package/tooling/.automation/validation/history/2026-01-18_val_49f0bb17.json +32 -0
  34. package/tooling/.automation/validation/history/2026-01-18_val_53c928d2.json +59 -0
  35. package/tooling/.automation/validation/history/2026-01-18_val_55604791.json +32 -0
  36. package/tooling/.automation/validation/history/2026-01-18_val_67e695f0.json +41 -0
  37. package/tooling/.automation/validation/history/2026-01-18_val_82784713.json +41 -0
  38. package/tooling/.automation/validation/history/2026-01-18_val_94a8e584.json +32 -0
  39. package/tooling/.automation/validation/history/2026-01-18_val_95353af0.json +32 -0
  40. package/tooling/.automation/validation/history/2026-01-18_val_9a046f3a.json +32 -0
  41. package/tooling/.automation/validation/history/2026-01-18_val_b3443d2e.json +32 -0
  42. package/tooling/.automation/validation/history/2026-01-18_val_bfd298f4.json +32 -0
  43. package/tooling/.automation/validation/history/2026-01-18_val_cfc2a362.json +32 -0
  44. package/tooling/.automation/validation/history/2026-01-18_val_e581a3d2.json +41 -0
  45. package/tooling/scripts/lib/__init__.py +1 -3
  46. package/tooling/scripts/lib/agent_router.py +0 -4
  47. package/tooling/scripts/lib/cost_display.py +7 -1
  48. package/tooling/scripts/lib/swarm_orchestrator.py +14 -12
  49. package/tooling/scripts/live_dashboard.py +832 -0
  50. package/tooling/scripts/new-doc.py +1 -1
  51. package/tooling/scripts/run-collab.py +3 -47
  52. package/tooling/scripts/run-story.py +21 -9
  53. package/tooling/scripts/setup-checkpoint-service.py +1 -1
  54. package/.claude/commands/pair.md +0 -23
  55. package/tooling/scripts/lib/pair_programming.py +0 -688
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_49f0bb17",
3
+ "timestamp": "2026-01-18T10:57:50.207021",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "fail_gate",
9
+ "result": "fail",
10
+ "message": "Validation failed",
11
+ "duration_ms": 0.0,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "fail",
18
+ "total_duration_ms": 0.00286102294921875,
19
+ "passed": false,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "id": "val_53c928d2",
3
+ "timestamp": "2026-01-18T10:57:50.349070",
4
+ "story_key": "validation-check",
5
+ "tier": 3,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "tests_pass",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 522.3491191864014,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ },
16
+ {
17
+ "gate_name": "lint_clean",
18
+ "result": "pass",
19
+ "message": "Validation passed",
20
+ "duration_ms": 15.995025634765625,
21
+ "retry_count": 0,
22
+ "auto_fixed": false,
23
+ "details": {}
24
+ },
25
+ {
26
+ "gate_name": "types_valid",
27
+ "result": "pass",
28
+ "message": "Validation passed",
29
+ "duration_ms": 14.685869216918945,
30
+ "retry_count": 0,
31
+ "auto_fixed": false,
32
+ "details": {}
33
+ },
34
+ {
35
+ "gate_name": "version_synced",
36
+ "result": "pass",
37
+ "message": "Validation passed",
38
+ "duration_ms": 29.78992462158203,
39
+ "retry_count": 0,
40
+ "auto_fixed": false,
41
+ "details": {}
42
+ }
43
+ ],
44
+ "overall_result": "pass",
45
+ "total_duration_ms": 582.909345626831,
46
+ "passed": true,
47
+ "context": {
48
+ "story_key": "validation-check",
49
+ "iteration": 0,
50
+ "max_iterations": 3,
51
+ "accumulated_issues": [],
52
+ "accumulated_fixes": [],
53
+ "cost_so_far": 0.0,
54
+ "time_elapsed_seconds": 0.0,
55
+ "phase": "tier_3",
56
+ "from_agent": "",
57
+ "to_agent": ""
58
+ }
59
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_55604791",
3
+ "timestamp": "2026-01-18T10:57:50.201224",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "block",
9
+ "result": "fail",
10
+ "message": "Validation failed",
11
+ "duration_ms": 0.00095367431640625,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "fail",
18
+ "total_duration_ms": 0.015974044799804688,
19
+ "passed": false,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "id": "val_67e695f0",
3
+ "timestamp": "2026-01-18T10:55:19.080287",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "pass",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 0.0,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ },
16
+ {
17
+ "gate_name": "fail",
18
+ "result": "fail",
19
+ "message": "Validation failed",
20
+ "duration_ms": 0.0,
21
+ "retry_count": 0,
22
+ "auto_fixed": false,
23
+ "details": {}
24
+ }
25
+ ],
26
+ "overall_result": "fail",
27
+ "total_duration_ms": 0.003814697265625,
28
+ "passed": false,
29
+ "context": {
30
+ "story_key": "test",
31
+ "iteration": 0,
32
+ "max_iterations": 3,
33
+ "accumulated_issues": [],
34
+ "accumulated_fixes": [],
35
+ "cost_so_far": 0.0,
36
+ "time_elapsed_seconds": 0.0,
37
+ "phase": "",
38
+ "from_agent": "",
39
+ "to_agent": ""
40
+ }
41
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "id": "val_82784713",
3
+ "timestamp": "2026-01-18T10:57:50.199962",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "pass",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 0.0,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ },
16
+ {
17
+ "gate_name": "fail",
18
+ "result": "fail",
19
+ "message": "Validation failed",
20
+ "duration_ms": 0.0,
21
+ "retry_count": 0,
22
+ "auto_fixed": false,
23
+ "details": {}
24
+ }
25
+ ],
26
+ "overall_result": "fail",
27
+ "total_duration_ms": 0.003814697265625,
28
+ "passed": false,
29
+ "context": {
30
+ "story_key": "test",
31
+ "iteration": 0,
32
+ "max_iterations": 3,
33
+ "accumulated_issues": [],
34
+ "accumulated_fixes": [],
35
+ "cost_so_far": 0.0,
36
+ "time_elapsed_seconds": 0.0,
37
+ "phase": "",
38
+ "from_agent": "",
39
+ "to_agent": ""
40
+ }
41
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_94a8e584",
3
+ "timestamp": "2026-01-18T10:55:19.087360",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "fail_gate",
9
+ "result": "fail",
10
+ "message": "Validation failed",
11
+ "duration_ms": 0.0007152557373046875,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "fail",
18
+ "total_duration_ms": 0.00286102294921875,
19
+ "passed": false,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_95353af0",
3
+ "timestamp": "2026-01-18T10:55:19.083022",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "test",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 0.0011920928955078125,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "pass",
18
+ "total_duration_ms": 0.004291534423828125,
19
+ "passed": true,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_9a046f3a",
3
+ "timestamp": "2026-01-18T10:57:50.202427",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "test",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 0.0,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "pass",
18
+ "total_duration_ms": 0.0021457672119140625,
19
+ "passed": true,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_b3443d2e",
3
+ "timestamp": "2026-01-18T10:55:19.081740",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "block",
9
+ "result": "fail",
10
+ "message": "Validation failed",
11
+ "duration_ms": 0.0011920928955078125,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "fail",
18
+ "total_duration_ms": 0.02002716064453125,
19
+ "passed": false,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_bfd298f4",
3
+ "timestamp": "2026-01-18T10:55:19.084250",
4
+ "story_key": "test",
5
+ "tier": 3,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "test",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 0.0,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "pass",
18
+ "total_duration_ms": 0.0021457672119140625,
19
+ "passed": true,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "val_cfc2a362",
3
+ "timestamp": "2026-01-18T10:57:50.203628",
4
+ "story_key": "test",
5
+ "tier": 3,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "test",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 0.0,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ }
16
+ ],
17
+ "overall_result": "pass",
18
+ "total_duration_ms": 0.0030994415283203125,
19
+ "passed": true,
20
+ "context": {
21
+ "story_key": "test",
22
+ "iteration": 0,
23
+ "max_iterations": 3,
24
+ "accumulated_issues": [],
25
+ "accumulated_fixes": [],
26
+ "cost_so_far": 0.0,
27
+ "time_elapsed_seconds": 0.0,
28
+ "phase": "",
29
+ "from_agent": "",
30
+ "to_agent": ""
31
+ }
32
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "id": "val_e581a3d2",
3
+ "timestamp": "2026-01-18T10:55:19.079052",
4
+ "story_key": "test",
5
+ "tier": 1,
6
+ "gate_results": [
7
+ {
8
+ "gate_name": "gate1",
9
+ "result": "pass",
10
+ "message": "Validation passed",
11
+ "duration_ms": 0.00095367431640625,
12
+ "retry_count": 0,
13
+ "auto_fixed": false,
14
+ "details": {}
15
+ },
16
+ {
17
+ "gate_name": "gate2",
18
+ "result": "pass",
19
+ "message": "Validation passed",
20
+ "duration_ms": 0.0,
21
+ "retry_count": 0,
22
+ "auto_fixed": false,
23
+ "details": {}
24
+ }
25
+ ],
26
+ "overall_result": "pass",
27
+ "total_duration_ms": 0.0050067901611328125,
28
+ "passed": true,
29
+ "context": {
30
+ "story_key": "test",
31
+ "iteration": 0,
32
+ "max_iterations": 3,
33
+ "accumulated_issues": [],
34
+ "accumulated_fixes": [],
35
+ "cost_so_far": 0.0,
36
+ "time_elapsed_seconds": 0.0,
37
+ "phase": "",
38
+ "from_agent": "",
39
+ "to_agent": ""
40
+ }
41
+ }
@@ -14,7 +14,6 @@ This package provides:
14
14
  - agent_handoff: Structured agent transitions
15
15
  - shared_memory: Cross-agent knowledge sharing
16
16
  - swarm_orchestrator: Multi-agent collaboration
17
- - pair_programming: DEV + REVIEWER collaboration
18
17
  - validation_loop: Three-tier validation framework
19
18
 
20
19
  Usage:
@@ -25,7 +24,7 @@ Usage:
25
24
  from lib.platform import get_platform, IS_WINDOWS
26
25
  """
27
26
 
28
- __version__ = "1.19.0"
27
+ __version__ = "1.20.1"
29
28
 
30
29
  # Lazy imports to avoid circular dependencies
31
30
  __all__ = [
@@ -41,6 +40,5 @@ __all__ = [
41
40
  "agent_handoff",
42
41
  "shared_memory",
43
42
  "swarm_orchestrator",
44
- "pair_programming",
45
43
  "validation_loop",
46
44
  ]
@@ -629,10 +629,6 @@ class AgentRouter:
629
629
  if len(agents) == 1:
630
630
  return "single"
631
631
 
632
- # If includes REVIEWER and DEV, could use pair mode
633
- if "DEV" in agents and "REVIEWER" in agents and len(agents) == 2:
634
- return "pair"
635
-
636
632
  # If includes ARCHITECT, likely needs sequential
637
633
  if "ARCHITECT" in agents:
638
634
  return "sequential"
@@ -22,7 +22,13 @@ from typing import Optional
22
22
  # Add parent for imports
23
23
  sys.path.insert(0, str(Path(__file__).parent))
24
24
 
25
- from platform import IS_WINDOWS
25
+ try:
26
+ from lib.platform import IS_WINDOWS
27
+ except ImportError:
28
+ # Fallback for when running from lib directory
29
+ import sys as _sys
30
+
31
+ IS_WINDOWS = _sys.platform == "win32"
26
32
 
27
33
  from colors import Colors
28
34
  from cost_tracker import PRICING, CostTracker
@@ -43,11 +43,9 @@ from typing import Optional
43
43
 
44
44
  # Import dependencies
45
45
  try:
46
- from platform import IS_WINDOWS
47
-
48
- from agent_handoff import HandoffGenerator
49
- from agent_router import AgentRouter
50
- from personality_system import (
46
+ from lib.agent_handoff import HandoffGenerator
47
+ from lib.agent_router import AgentRouter
48
+ from lib.personality_system import (
51
49
  ConvergenceDetector,
52
50
  DebatePosition,
53
51
  PersonalityHandoff,
@@ -55,11 +53,16 @@ try:
55
53
  PersonalitySelector,
56
54
  extract_arguments_from_response,
57
55
  )
58
- from shared_memory import get_knowledge_graph, get_shared_memory
56
+ from lib.platform import IS_WINDOWS
57
+ from lib.shared_memory import get_knowledge_graph, get_shared_memory
59
58
  except ImportError:
60
- from lib.agent_handoff import HandoffGenerator
61
- from lib.agent_router import AgentRouter
62
- from lib.personality_system import (
59
+ # Fallback for when running from lib directory
60
+ import sys as _sys
61
+
62
+ IS_WINDOWS = _sys.platform == "win32"
63
+ from agent_handoff import HandoffGenerator
64
+ from agent_router import AgentRouter
65
+ from personality_system import (
63
66
  ConvergenceDetector,
64
67
  DebatePosition,
65
68
  PersonalityHandoff,
@@ -67,8 +70,7 @@ except ImportError:
67
70
  PersonalitySelector,
68
71
  extract_arguments_from_response,
69
72
  )
70
- from lib.platform import IS_WINDOWS
71
- from lib.shared_memory import get_knowledge_graph, get_shared_memory
73
+ from shared_memory import get_knowledge_graph, get_shared_memory
72
74
 
73
75
  # Try to import validation loop
74
76
  try:
@@ -318,7 +320,7 @@ class SwarmConfig:
318
320
  parallel_execution: bool = False
319
321
  auto_fix_enabled: bool = True # DEV automatically addresses REVIEWER issues
320
322
  verbose: bool = True
321
- budget_limit_usd: float = 25.0 # Higher budget for debate
323
+ budget_limit_usd: float = 10.0 # Budget for debate
322
324
  validation_enabled: bool = True # Enable inter-iteration validation
323
325
  # Adversarial-specific settings
324
326
  convergence_threshold: float = 0.8 # Position similarity to consider converged