ZQK Screen Capture & Terminal Automation Engine (pkg/screencap)
pkg/screencap provides headless and interactive terminal automation coupled with native screen, window, and rectangular region capture capabilities.
1. Capabilities
- Terminal Automation (
TerminalAutomator): - Spawns background CLI sessions with bidirectional pipe control (
stdin,stdout,stderr). - Simulates interactive human typing with millisecond timestamps (
TypeCommand,AppendTimelineEvent). - Records real-time timeline event traces (
TimelineEvent) suitable for rendering animated terminal casts and SVG/GIF demos. - Matches live stdout patterns (
WaitForOutput) to synchronize execution phases. - Visual Capture Engine (
Capturer): CaptureWindow(ctx, windowID, outputPath): Captures a specific application window by native OS window identifier.CaptureRegion(ctx, x, y, width, height, outputPath): Crops and records a designated screen bounding box without capturing full display real-estate.CaptureScreen(ctx, outputPath): Full display snapshot.MacCapturer: macOS native implementation utilizing headlessscreencapture -x.
2. Architecture & Interfaces
┌──────────────────────┐ TypeCommand() ┌────────────────────┐
│ TerminalAutomator ├─────────────────────────────►│ exec.Cmd Pipe │
│ │ │ (zqk CLI / shell) │
│ - Timeline Tracer │◄─────────────────────────────┤ │
│ - Pattern Matcher │ WaitForOutput() └────────────────────┘
└──────────┬───────────┘
│
│ Triggers visual snapshot
▼
┌──────────────────────┐ screencapture -x ┌────────────────────┐
│ Capturer ├─────────────────────────────►│ Artifacts / Images │
│ (e.g. MacCapturer) │ │ (.png, timeline) │
└──────────────────────┘ └────────────────────┘
3. Usage Example
capturer := screencap.NewMacCapturer()
automator, err := screencap.NewTerminalAutomator(capturer, "bash")
if err != nil {
log.Fatal(err)
}
if err := automator.Start(); err != nil {
log.Fatal(err)
}
// Type command and snapshot the terminal window
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
_ = automator.TypeCommand("zqk workflow whats-next")
_ = automator.WaitForOutput(ctx, "Priority Plan")
_ = capturer.CaptureScreen(ctx, "artifacts/whats_next_output.png")
4. Operational Role in ZQK
pkg/screencap is used to:
- Generate deterministic visual evidence for Quality Assurance (VDS Done-Gates and CRIT verification).
- Automate walkthrough documentation and animated terminal tutorials for community releases.
- Validate TUI dashboard rendering without manual human intervention.