bmalph 2.6.0 → 2.7.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 (75) hide show
  1. package/README.md +33 -31
  2. package/bmad/lite/create-prd.md +145 -0
  3. package/dist/cli.js +2 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/check-updates.js +1 -1
  6. package/dist/commands/check-updates.js.map +1 -1
  7. package/dist/commands/doctor-checks.js +103 -0
  8. package/dist/commands/doctor-checks.js.map +1 -0
  9. package/dist/commands/doctor-health-checks.js +101 -0
  10. package/dist/commands/doctor-health-checks.js.map +1 -0
  11. package/dist/commands/doctor-runtime-checks.js +143 -0
  12. package/dist/commands/doctor-runtime-checks.js.map +1 -0
  13. package/dist/commands/doctor.js +5 -369
  14. package/dist/commands/doctor.js.map +1 -1
  15. package/dist/commands/implement.js +9 -14
  16. package/dist/commands/implement.js.map +1 -1
  17. package/dist/commands/init.js +1 -1
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/status.js +4 -44
  20. package/dist/commands/status.js.map +1 -1
  21. package/dist/commands/upgrade.js +1 -1
  22. package/dist/commands/upgrade.js.map +1 -1
  23. package/dist/installer.js +321 -50
  24. package/dist/installer.js.map +1 -1
  25. package/dist/platform/aider.js +1 -1
  26. package/dist/platform/aider.js.map +1 -1
  27. package/dist/platform/claude-code.js +1 -1
  28. package/dist/platform/codex.js +3 -3
  29. package/dist/platform/codex.js.map +1 -1
  30. package/dist/platform/copilot.js +1 -1
  31. package/dist/platform/copilot.js.map +1 -1
  32. package/dist/platform/cursor.js +5 -4
  33. package/dist/platform/cursor.js.map +1 -1
  34. package/dist/platform/doctor-checks.js +16 -7
  35. package/dist/platform/doctor-checks.js.map +1 -1
  36. package/dist/platform/instructions-snippet.js +37 -38
  37. package/dist/platform/instructions-snippet.js.map +1 -1
  38. package/dist/platform/types.js +9 -1
  39. package/dist/platform/types.js.map +1 -1
  40. package/dist/platform/windsurf.js +1 -1
  41. package/dist/platform/windsurf.js.map +1 -1
  42. package/dist/reset.js +18 -7
  43. package/dist/reset.js.map +1 -1
  44. package/dist/run/ralph-process.js +14 -8
  45. package/dist/run/ralph-process.js.map +1 -1
  46. package/dist/transition/artifact-scan.js +3 -13
  47. package/dist/transition/artifact-scan.js.map +1 -1
  48. package/dist/transition/orchestration.js +16 -26
  49. package/dist/transition/orchestration.js.map +1 -1
  50. package/dist/transition/specs-index.js +4 -4
  51. package/dist/transition/specs-index.js.map +1 -1
  52. package/dist/transition/tech-stack.js +1 -1
  53. package/dist/transition/tech-stack.js.map +1 -1
  54. package/dist/utils/artifact-definitions.js +19 -0
  55. package/dist/utils/artifact-definitions.js.map +1 -0
  56. package/dist/utils/constants.js +4 -0
  57. package/dist/utils/constants.js.map +1 -1
  58. package/dist/utils/file-system.js +1 -1
  59. package/dist/utils/file-system.js.map +1 -1
  60. package/dist/utils/format-status.js +31 -0
  61. package/dist/utils/format-status.js.map +1 -0
  62. package/dist/utils/json.js +3 -0
  63. package/dist/utils/json.js.map +1 -1
  64. package/dist/utils/validate.js +12 -15
  65. package/dist/utils/validate.js.map +1 -1
  66. package/dist/watch/dashboard.js +22 -11
  67. package/dist/watch/dashboard.js.map +1 -1
  68. package/dist/watch/renderer.js +1 -15
  69. package/dist/watch/renderer.js.map +1 -1
  70. package/package.json +2 -2
  71. package/ralph/drivers/cursor.sh +90 -0
  72. package/ralph/ralph_loop.sh +20 -13
  73. package/ralph/templates/ralphrc.template +1 -1
  74. package/dist/platform/index.js +0 -4
  75. package/dist/platform/index.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmalph",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "Unified AI Development Framework - BMAD phases with Ralph execution loop",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,7 +22,7 @@
22
22
  "fmt:fix": "prettier --write .",
23
23
  "type-check": "tsc --noEmit",
24
24
  "ci": "npm run type-check && npm run lint && npm run fmt:check && npm run build && npm run test:all",
25
- "prepublishOnly": "npm run lint && npm run build && npm test",
25
+ "prepublishOnly": "npm run lint && npm run build && npm run test:all",
26
26
  "update-bundled": "bash scripts/update-bundled.sh"
27
27
  },
28
28
  "keywords": [
@@ -0,0 +1,90 @@
1
+ #!/bin/bash
2
+ # Cursor CLI driver for Ralph (EXPERIMENTAL)
3
+ # Provides platform-specific CLI invocation logic for Cursor CLI.
4
+ #
5
+ # Known limitations:
6
+ # - CLI is in beta — binary name and flags may change
7
+ # - NDJSON stream format assumes {type: "text", content: "..."} events
8
+ # - Session ID capture from output not yet validated
9
+
10
+ driver_name() {
11
+ echo "cursor"
12
+ }
13
+
14
+ driver_display_name() {
15
+ echo "Cursor CLI"
16
+ }
17
+
18
+ driver_cli_binary() {
19
+ echo "agent"
20
+ }
21
+
22
+ driver_min_version() {
23
+ echo "0.1.0"
24
+ }
25
+
26
+ driver_check_available() {
27
+ command -v "$(driver_cli_binary)" &>/dev/null
28
+ }
29
+
30
+ # Cursor CLI tool names
31
+ driver_valid_tools() {
32
+ VALID_TOOL_PATTERNS=(
33
+ "file_edit"
34
+ "file_read"
35
+ "file_write"
36
+ "terminal"
37
+ "search"
38
+ )
39
+ }
40
+
41
+ # Build Cursor CLI command
42
+ # Context is prepended to the prompt (same pattern as Codex/Copilot drivers).
43
+ # Uses --print for headless mode, --force for autonomous execution,
44
+ # --output-format stream-json for NDJSON streaming.
45
+ driver_build_command() {
46
+ local prompt_file=$1
47
+ local loop_context=$2
48
+ local session_id=$3
49
+
50
+ CLAUDE_CMD_ARGS=("$(driver_cli_binary)")
51
+
52
+ if [[ ! -f "$prompt_file" ]]; then
53
+ echo "ERROR: Prompt file not found: $prompt_file" >&2
54
+ return 1
55
+ fi
56
+
57
+ # Headless mode
58
+ CLAUDE_CMD_ARGS+=("--print")
59
+
60
+ # Autonomous execution
61
+ CLAUDE_CMD_ARGS+=("--force")
62
+
63
+ # NDJSON streaming output
64
+ CLAUDE_CMD_ARGS+=("--output-format" "stream-json")
65
+
66
+ # Session resume — gated on CLAUDE_USE_CONTINUE to respect --no-continue flag
67
+ if [[ "$CLAUDE_USE_CONTINUE" == "true" && -n "$session_id" ]]; then
68
+ CLAUDE_CMD_ARGS+=("--resume" "$session_id")
69
+ fi
70
+
71
+ # Build prompt with context prepended
72
+ local prompt_content
73
+ prompt_content=$(cat "$prompt_file")
74
+ if [[ -n "$loop_context" ]]; then
75
+ prompt_content="$loop_context
76
+
77
+ $prompt_content"
78
+ fi
79
+
80
+ CLAUDE_CMD_ARGS+=("$prompt_content")
81
+ }
82
+
83
+ driver_supports_sessions() {
84
+ return 0 # true — Cursor supports --resume
85
+ }
86
+
87
+ # Cursor CLI outputs NDJSON events
88
+ driver_stream_filter() {
89
+ echo 'select(.type == "text") | .content // empty'
90
+ }
@@ -378,19 +378,26 @@ update_status() {
378
378
  local last_action=$3
379
379
  local status=$4
380
380
  local exit_reason=${5:-""}
381
-
382
- cat > "$STATUS_FILE" << STATUSEOF
383
- {
384
- "timestamp": "$(get_iso_timestamp)",
385
- "loop_count": $loop_count,
386
- "calls_made_this_hour": $calls_made,
387
- "max_calls_per_hour": $MAX_CALLS_PER_HOUR,
388
- "last_action": "$last_action",
389
- "status": "$status",
390
- "exit_reason": "$exit_reason",
391
- "next_reset": "$(get_next_hour_time)"
392
- }
393
- STATUSEOF
381
+
382
+ jq -n \
383
+ --arg timestamp "$(get_iso_timestamp)" \
384
+ --argjson loop_count "$loop_count" \
385
+ --argjson calls_made "$calls_made" \
386
+ --argjson max_calls "$MAX_CALLS_PER_HOUR" \
387
+ --arg last_action "$last_action" \
388
+ --arg status "$status" \
389
+ --arg exit_reason "$exit_reason" \
390
+ --arg next_reset "$(get_next_hour_time)" \
391
+ '{
392
+ timestamp: $timestamp,
393
+ loop_count: $loop_count,
394
+ calls_made_this_hour: $calls_made,
395
+ max_calls_per_hour: $max_calls,
396
+ last_action: $last_action,
397
+ status: $status,
398
+ exit_reason: $exit_reason,
399
+ next_reset: $next_reset
400
+ }' > "$STATUS_FILE"
394
401
  }
395
402
 
396
403
  # Check if we can make another call
@@ -10,7 +10,7 @@
10
10
  # PLATFORM DRIVER
11
11
  # =============================================================================
12
12
 
13
- # Platform driver for Ralph loop (claude-code, codex, or copilot)
13
+ # Platform driver for Ralph loop (claude-code, codex, copilot, or cursor)
14
14
  PLATFORM_DRIVER="${PLATFORM_DRIVER:-claude-code}"
15
15
 
16
16
  # =============================================================================
@@ -1,4 +0,0 @@
1
- export { getPlatform, getAllPlatforms, isPlatformId } from "./registry.js";
2
- export { resolveProjectPlatform } from "./resolve.js";
3
- export { detectPlatform } from "./detect.js";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}