@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.
- package/.claude/skills/dashboard/SKILL.md +118 -0
- package/CHANGELOG.md +21 -0
- package/README.md +2 -2
- package/bin/devflow-dashboard.js +10 -0
- package/bin/devflow-swarm.js +11 -0
- package/bin/devflow.js +2 -0
- package/package.json +3 -1
- package/tooling/.automation/memory/knowledge/kg_integration-test.json +85 -1
- package/tooling/.automation/memory/knowledge/kg_test-story.json +284 -2
- package/tooling/.automation/memory/shared/shared_integration-test.json +25 -1
- package/tooling/.automation/memory/shared/shared_test-story.json +73 -1
- package/tooling/.automation/memory/shared/shared_test.json +157 -1
- package/tooling/.automation/memory/shared/shared_validation-check.json +27 -1
- package/tooling/.automation/validation/history/2026-01-16_val_0b81ec2f.json +41 -0
- package/tooling/.automation/validation/history/2026-01-16_val_26c18e64.json +32 -0
- package/tooling/.automation/validation/history/2026-01-16_val_32af0152.json +32 -0
- package/tooling/.automation/validation/history/2026-01-16_val_353d1569.json +32 -0
- package/tooling/.automation/validation/history/2026-01-16_val_39e3c143.json +59 -0
- package/tooling/.automation/validation/history/2026-01-16_val_77fb42e4.json +32 -0
- package/tooling/.automation/validation/history/2026-01-16_val_a0752656.json +41 -0
- package/tooling/.automation/validation/history/2026-01-16_val_a29213b0.json +41 -0
- package/tooling/.automation/validation/history/2026-01-16_val_a9375d4c.json +32 -0
- package/tooling/.automation/validation/history/2026-01-16_val_c147bbdf.json +32 -0
- package/tooling/.automation/validation/history/2026-01-16_val_d06ccf8d.json +32 -0
- package/tooling/.automation/validation/history/2026-01-16_val_d6a80295.json +59 -0
- package/tooling/.automation/validation/history/2026-01-16_val_dce5005d.json +41 -0
- package/tooling/.automation/validation/history/2026-01-16_val_e53b3a63.json +32 -0
- package/tooling/scripts/lib/__init__.py +1 -1
- package/tooling/scripts/lib/cost_display.py +7 -1
- package/tooling/scripts/lib/pair_programming.py +6 -4
- package/tooling/scripts/lib/swarm_orchestrator.py +13 -11
- package/tooling/scripts/live_dashboard.py +832 -0
- package/tooling/scripts/new-doc.py +1 -1
- package/tooling/scripts/run-collab.py +2 -2
- package/tooling/scripts/run-story.py +21 -9
- package/tooling/scripts/setup-checkpoint-service.py +1 -1
|
@@ -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
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|