deepflow 0.1.34 → 0.1.35

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepflow",
3
- "version": "0.1.34",
3
+ "version": "0.1.35",
4
4
  "description": "Stay in flow state - lightweight spec-driven task orchestration for Claude Code",
5
5
  "keywords": [
6
6
  "claude",
@@ -4,11 +4,9 @@
4
4
 
5
5
  You are a coordinator. Spawn agents, wait for results, update PLAN.md. Never implement code yourself.
6
6
 
7
- **NEVER:** Read source files, edit code, run tests, run git commands (except status), process TaskOutput content
7
+ **NEVER:** Read source files, edit code, run tests, run git commands (except status), use TaskOutput
8
8
 
9
- **ONLY:** Read PLAN.md, read specs/doing-*.md, spawn background agents, use TaskOutput to wait (ignore its content), read `.deepflow/results/*.yaml` for outcomes, update PLAN.md
10
-
11
- **CONTEXT CRITICAL:** TaskOutput returns FULL agent transcripts (100KB+). NEVER include this in context. Agents write results to `.deepflow/results/{task_id}.yaml`. Read those files instead.
9
+ **ONLY:** Read PLAN.md, read specs/doing-*.md, spawn background agents, wait with Bash monitor, read `.deepflow/results/*.yaml` for outcomes, update PLAN.md
12
10
 
13
11
  ---
14
12
 
@@ -45,28 +43,53 @@ Statusline writes to `.deepflow/context.json`: `{"percentage": 45}`
45
43
 
46
44
  ## Agent Protocol
47
45
 
48
- Each task = one background agent. **TaskOutput blocks until agent completes.** Never poll, loop, or repeatedly check for results.
46
+ Each task = one background agent. **NEVER use TaskOutput** it returns full transcripts (100KB+) that explode context.
49
47
 
50
- **CRITICAL: Context Management**
51
- - TaskOutput returns the FULL agent transcript (all tool calls, messages, etc.)
52
- - **DO NOT** process or include TaskOutput response in context — it will explode your token usage
53
- - **ONLY** use TaskOutput to wait for completion (ignore its content)
54
- - **ALWAYS** read the result file directly to get the actual outcome
48
+ **Wait Strategy: Bash Monitor**
49
+ - One Bash call that monitors result files
50
+ - Shows progress via streaming (user sees in real-time)
51
+ - Minimal context (just the final output)
52
+ - User can react/cancel if needed
55
53
 
56
54
  ```python
57
- # Spawn agents in parallel (single message, multiple Task calls)
58
- task_id_1 = Task(subagent_type="general-purpose", run_in_background=True, prompt="T1: ...")
59
- task_id_2 = Task(subagent_type="general-purpose", run_in_background=True, prompt="T2: ...")
60
-
61
- # Wait for completion (single message, multiple TaskOutput calls)
62
- # TaskOutput BLOCKS no polling needed
63
- # IGNORE the response content — read result files instead
64
- TaskOutput(task_id=task_id_1)
65
- TaskOutput(task_id=task_id_2)
66
-
67
- # Read actual results from files (minimal context usage)
55
+ # 1. Spawn agents in parallel (single message, multiple Task calls)
56
+ Task(subagent_type="general-purpose", run_in_background=True, prompt="T1: ...")
57
+ Task(subagent_type="general-purpose", run_in_background=True, prompt="T2: ...")
58
+ Task(subagent_type="general-purpose", run_in_background=True, prompt="T3: ...")
59
+
60
+ # 2. Wait with Bash monitor (ONE call, streams progress to user)
61
+ Bash("""
62
+ RESULTS_DIR="{worktree}/.deepflow/results"
63
+ EXPECTED=3
64
+ TIMEOUT=300
65
+
66
+ timeout $TIMEOUT bash -c '
67
+ seen=""
68
+ while [ $(ls "$0"/*.yaml 2>/dev/null | wc -l) -lt '$EXPECTED' ]; do
69
+ for f in "$0"/*.yaml 2>/dev/null; do
70
+ if [ -f "$f" ] && [[ ! "$seen" =~ "$f" ]]; then
71
+ echo "✓ $(basename "$f" .yaml)"
72
+ seen="$seen $f"
73
+ fi
74
+ done
75
+ sleep 5
76
+ done
77
+ echo "ALL COMPLETE"
78
+ ' "$RESULTS_DIR" || echo "TIMEOUT: some tasks did not complete"
79
+ """)
80
+
81
+ # 3. Read actual results (minimal context)
68
82
  Read("{worktree}/.deepflow/results/T1.yaml")
69
83
  Read("{worktree}/.deepflow/results/T2.yaml")
84
+ Read("{worktree}/.deepflow/results/T3.yaml")
85
+ ```
86
+
87
+ **User sees streaming:**
88
+ ```
89
+ ✓ T1
90
+ ✓ T3
91
+ ✓ T2
92
+ ALL COMPLETE
70
93
  ```
71
94
 
72
95
  Result file `.deepflow/results/{task_id}.yaml`:
@@ -395,17 +418,15 @@ When all tasks done for a `doing-*` spec:
395
418
 
396
419
  ### 10. ITERATE
397
420
 
398
- After spawning agents, call TaskOutput for ALL running agents in a SINGLE message. **TaskOutput blocksdo NOT loop, poll, or check repeatedly.** One call per agent.
399
-
400
- **CRITICAL:** TaskOutput returns FULL agent transcripts. **IGNORE the response content** — it will explode context. Read result files instead.
421
+ After spawning agents, use Bash monitor to wait. **NEVER use TaskOutput** — it explodes context.
401
422
 
402
423
  ```python
403
- # After spawning T1, T2, T3 in parallel, wait for all in parallel:
404
- TaskOutput(task_id=t1_id) # BLOCKS until done — IGNORE response content
405
- TaskOutput(task_id=t2_id) # BLOCKS until done IGNORE response content
406
- TaskOutput(task_id=t3_id) # BLOCKS until done IGNORE response content
424
+ # After spawning T1, T2, T3 in parallel:
425
+
426
+ # 1. Wait with Bash monitor (streams progress to user)
427
+ Bash("timeout 300 bash -c '...' ") # See Agent Protocol for full script
407
428
 
408
- # Then read actual results (minimal context):
429
+ # 2. Read results
409
430
  Read("{worktree}/.deepflow/results/T1.yaml")
410
431
  Read("{worktree}/.deepflow/results/T2.yaml")
411
432
  Read("{worktree}/.deepflow/results/T3.yaml")