Repository navigation
Context drop image/file support + voice agent context fix + watcher Stop hook - #74
Merged
Merged
Conversation
…her Stop hook - context-drop.sh: Support image (clipboard PNG) and file (Finder selection) drops in addition to text. Finder checked first, then clipboard image, then text selection fallback. - voice-agent.ts: Add MISSING CONTEXT rule — delegate to core agent when user references context the voice agent doesn't have. - check-pending-tasks.sh: New Stop hook script that blocks Claude from finishing responses when unprocessed tasks exist in tasks/, preventing the watcher dismiss problem after context compaction. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Use `shopt -s nullglob` instead of `2>/dev/null` on for-glob (syntax error) - Skip tasks that already have a matching result file in results/ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… binary - SutandoDrop: Swift menu bar app replacing Automator Quick Action for context drops. Global hotkey (⌃C), clipboard image/text/file detection, writes directly to tasks/, NSAppleScript notifications. No sandbox issues. - context-drop-inline.txt: Copy-paste version of context-drop.sh for Automator users who prefer the Quick Action approach. - Gitignore the compiled SutandoDrop binary. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…dup fix - Notifications: spawn /usr/bin/osascript subprocess (in-process NSAppleScript doesn't show banners). Added NSSound.beep() for audio confirmation. - Dedup: removed context-drop.txt writes, only writes to tasks/ directly. - startup.sh: auto-launch SutandoDrop on startup with compile check. - check-pending-tasks.sh: updated with nullglob + result-skip fix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SutandoDrop: ⌃V hotkey sends POST to /voice/toggle on agent-api (port 7843). Beeps for confirmation, shows notification with new state. - agent-api: /voice/toggle (POST) and /voice/state (GET) endpoints to manage desired voice connection state. - web-client: polls /voice/state every 1s, auto-connects/disconnects when desired state changes from remote toggle. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Python requires `global` declarations at method scope, not inside nested try blocks. Moved to top of do_POST(). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Template literal `${}` was inside the HTML template string, causing
esbuild parse error. Use string concatenation instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SutandoDrop: ⌃V now uses AppleScript to find the localhost:8080 Chrome tab and click the voice button directly. Bypasses AudioContext user-gesture requirement. Opens the page if no tab exists. - web-client: Removed polling code (no longer needed). Added window.toggle export. AudioContext reuse instead of recreate. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Binary, directory, startup.sh references, and .gitignore all updated. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8 tasks
liususan091219
pushed a commit
to liususan091219/sutando-fork
that referenced
this pull request
May 28, 2026
…top hook (sonichi#74) * Context drop image/file support, voice agent context delegation, watcher Stop hook - context-drop.sh: Support image (clipboard PNG) and file (Finder selection) drops in addition to text. Finder checked first, then clipboard image, then text selection fallback. - voice-agent.ts: Add MISSING CONTEXT rule — delegate to core agent when user references context the voice agent doesn't have. - check-pending-tasks.sh: New Stop hook script that blocks Claude from finishing responses when unprocessed tasks exist in tasks/, preventing the watcher dismiss problem after context compaction. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Fix Stop hook: nullglob instead of stderr redirect, skip processed tasks - Use `shopt -s nullglob` instead of `2>/dev/null` on for-glob (syntax error) - Skip tasks that already have a matching result file in results/ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add SutandoDrop native menu bar app + context-drop-inline + gitignore binary - SutandoDrop: Swift menu bar app replacing Automator Quick Action for context drops. Global hotkey (⌃C), clipboard image/text/file detection, writes directly to tasks/, NSAppleScript notifications. No sandbox issues. - context-drop-inline.txt: Copy-paste version of context-drop.sh for Automator users who prefer the Quick Action approach. - Gitignore the compiled SutandoDrop binary. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * SutandoDrop: osascript subprocess notifications, beep, startup.sh, dedup fix - Notifications: spawn /usr/bin/osascript subprocess (in-process NSAppleScript doesn't show banners). Added NSSound.beep() for audio confirmation. - Dedup: removed context-drop.txt writes, only writes to tasks/ directly. - startup.sh: auto-launch SutandoDrop on startup with compile check. - check-pending-tasks.sh: updated with nullglob + result-skip fix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add voice toggle (⌃V) via SutandoDrop + agent-api + web client polling - SutandoDrop: ⌃V hotkey sends POST to /voice/toggle on agent-api (port 7843). Beeps for confirmation, shows notification with new state. - agent-api: /voice/toggle (POST) and /voice/state (GET) endpoints to manage desired voice connection state. - web-client: polls /voice/state every 1s, auto-connects/disconnects when desired state changes from remote toggle. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Fix agent-api: move global voice_desired_state to method level Python requires `global` declarations at method scope, not inside nested try blocks. Moved to top of do_POST(). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Fix web-client voice polling: escape template literal in outer template Template literal `${}` was inside the HTML template string, causing esbuild parse error. Use string concatenation instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Voice toggle: click button via AppleScript instead of API polling - SutandoDrop: ⌃V now uses AppleScript to find the localhost:8080 Chrome tab and click the voice button directly. Bypasses AudioContext user-gesture requirement. Opens the page if no tab exists. - web-client: Removed polling code (no longer needed). Added window.toggle export. AudioContext reuse instead of recreate. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Rename SutandoDrop → Sutando Binary, directory, startup.sh references, and .gitignore all updated. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
tasks/, preventing the watcher dismiss problem after context compaction.Test plan
tasks/🤖 Generated with Claude Code