claude-fsd 1.6.1 → 1.6.2

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.
@@ -15,11 +15,16 @@ command_exists() {
15
15
  check_dependencies() {
16
16
  local missing_deps=()
17
17
 
18
- # Check for claude (only required dependency)
18
+ # Check for claude (required)
19
19
  if ! command_exists claude; then
20
20
  missing_deps+=("claude")
21
21
  fi
22
22
 
23
+ # Check for jq (required for JSON output parsing)
24
+ if ! command_exists jq; then
25
+ missing_deps+=("jq")
26
+ fi
27
+
23
28
  # Show critical errors
24
29
  if [ ${#missing_deps[@]} -ne 0 ]; then
25
30
  echo -e "${RED}❌ Missing required dependencies:${NC}"
@@ -27,6 +32,8 @@ check_dependencies() {
27
32
  echo -e " - $dep"
28
33
  if [ "$dep" = "claude" ]; then
29
34
  echo -e " Install from: https://docs.anthropic.com/en/docs/claude-code"
35
+ elif [ "$dep" = "jq" ]; then
36
+ echo -e " Install: brew install jq (macOS) or apt install jq (Linux)"
30
37
  fi
31
38
  done
32
39
  echo
package/bin/claudefsd-dev CHANGED
@@ -271,8 +271,9 @@ IMPORTANT: You must ACTUALLY IMPLEMENT tasks, not just describe what should be d
271
271
  echo "=== OUTPUT ===" >> $LOGFILE
272
272
 
273
273
  # Run claude and append output to the log file
274
+ # Raw JSON goes to log, filtered text to screen
274
275
  echo -e "\033[36mRunning development with $CLAUDE_MODEL model...\033[0m"
275
- time claude --model $CLAUDE_MODEL --dangerously-skip-permissions --include-partial-messages -p "$DEVELOPMENT_PROMPT" 2>&1 | tee -a $LOGFILE
276
+ time claude --model $CLAUDE_MODEL --print --verbose --output-format=stream-json --include-partial-messages --dangerously-skip-permissions -p "$DEVELOPMENT_PROMPT" 2>&1 | tee -a $LOGFILE | jq --unbuffered -r 'if .type == "assistant" then (.message.content[]? | if .type == "text" then .text elif .type == "tool_use" then "\n[TOOL: " + .name + "]\n" else empty end) // empty elif .type == "stream_event" and .event == "content_block_start" and .content_block.type == "tool_use" then "\n[TOOL: " + .content_block.name + "]\n" elif .type == "result" then "\n=== RESULT ===\n" + (.result // "no result") else empty end'
276
277
 
277
278
  # Extract what task was worked on from the developer's output
278
279
  DEVELOPER_OUTPUT=$(sed -n '/=== OUTPUT ===/,$p' $LOGFILE)
@@ -324,8 +325,9 @@ Be thorough but concise in your code review."
324
325
  echo "=== OUTPUT ===" >> $VERIFIER_LOGFILE
325
326
 
326
327
  # Run verifier
328
+ # Raw JSON goes to log, filtered text to screen
327
329
  echo -e "\033[36mRunning verifier with $CLAUDE_MODEL model...\033[0m"
328
- time claude --model $CLAUDE_MODEL --dangerously-skip-permissions --include-partial-messages -p "$VERIFIER_PROMPT" 2>&1 | tee -a $VERIFIER_LOGFILE
330
+ time claude --model $CLAUDE_MODEL --print --verbose --output-format=stream-json --include-partial-messages --dangerously-skip-permissions -p "$VERIFIER_PROMPT" 2>&1 | tee -a $VERIFIER_LOGFILE | jq --unbuffered -r 'if .type == "assistant" then (.message.content[]? | if .type == "text" then .text elif .type == "tool_use" then "\n[TOOL: " + .name + "]\n" else empty end) // empty elif .type == "stream_event" and .event == "content_block_start" and .content_block.type == "tool_use" then "\n[TOOL: " + .content_block.name + "]\n" elif .type == "result" then "\n=== RESULT ===\n" + (.result // "no result") else empty end'
329
331
 
330
332
  # Extract verifier output for the tester
331
333
  VERIFIER_OUTPUT=$(sed -n '/=== OUTPUT ===/,$p' $VERIFIER_LOGFILE)
@@ -399,8 +401,9 @@ If ALL tasks in the plan are complete AND all tests pass, output: <VERIFIED_ALL_
399
401
  echo "=== OUTPUT ===" >> $TESTER_LOGFILE
400
402
 
401
403
  # Run tester
404
+ # Raw JSON goes to log, filtered text to screen
402
405
  echo -e "\033[36mRunning tester with $CLAUDE_MODEL model...\033[0m"
403
- time claude --model $CLAUDE_MODEL --dangerously-skip-permissions --include-partial-messages -p "$TESTER_PROMPT" 2>&1 | tee -a $TESTER_LOGFILE
406
+ time claude --model $CLAUDE_MODEL --print --verbose --output-format=stream-json --include-partial-messages --dangerously-skip-permissions -p "$TESTER_PROMPT" 2>&1 | tee -a $TESTER_LOGFILE | jq --unbuffered -r 'if .type == "assistant" then (.message.content[]? | if .type == "text" then .text elif .type == "tool_use" then "\n[TOOL: " + .name + "]\n" else empty end) // empty elif .type == "stream_event" and .event == "content_block_start" and .content_block.type == "tool_use" then "\n[TOOL: " + .content_block.name + "]\n" elif .type == "result" then "\n=== RESULT ===\n" + (.result // "no result") else empty end'
404
407
 
405
408
  # Check if tests failed
406
409
  if sed -n '/=== OUTPUT ===/,$p' $TESTER_LOGFILE | grep -q "<TESTS_FAILED>"; then
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-fsd",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "description": "Claude Full Self Drive tools for autonomous AI-powered development",
5
5
  "bin": {
6
6
  "claude-fsd": "bin/claude-fsd",