agentwire-dev 1.29.3__tar.gz → 1.29.5__tar.gz
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.
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/PKG-INFO +3 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/__main__.py +17 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/session-window.js +161 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/stt/__init__.py +12 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/tts/stt-self-hosted.md +54 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/pyproject.toml +6 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/.gitignore +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/CHANGELOG.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/CLA.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/Dockerfile.local +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/Dockerfile.runpod +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/LICENSE +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/README.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/RELEASING.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/SECURITY.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/SPONSORS.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/cli_safety.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/completion.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/fetch.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/handoff/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/handoff/git_state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/handoff/instructions.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/handoff/parser.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/handoff/renderer.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/handoff/schema.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/history.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/agentwire-permission.sh +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/audit_logger.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/idle-handler.sh +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/listen.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/locking.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/mcp_server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/cli.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/dispatcher.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/eligibility.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/feedback_router.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/gc.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/github.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/naming.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/missions/state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/network.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/onboarding.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/overnight.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/project_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/projects.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/prompts/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/prompts/init.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/agentwire.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/init.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/notifications.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/orchestrator.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/voice.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/roles/worker.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/safety/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/safety/_core.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/scheduler.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/search.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-Echo--black.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-Echo--transparent.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-Echo.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-email-banner.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/css/desktop.css +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/favicon.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/android.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/automaton.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/bot.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/droid.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/drone.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/guardian.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/mech.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/probe.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/robot.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/unit.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/blob.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/cloud.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/crystal.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/flame.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/horned.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/moon.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/slime.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/star.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/projects/winged.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/bear.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/cat.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/crown.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/deer.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/drone.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/fox.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/horse.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/lion.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/robot.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/artifact-window.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/command-palette.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/components/icon-picker.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/components/list-card.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/components/type-tag.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/desktop-manager.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/desktop.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/icon-manager.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/new-project-modal.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/notifications-panel.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/safety-shared.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/safety-window.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/session-id.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/config-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/machines-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/missions-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/projects-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/safety-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar/sessions-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/sidebar.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/terminal-font-prefs.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/tile-manager.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/utils/auto-refresh.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/js/windows/chat-window.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/stt/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/stt/server_backend.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/stt/stt_server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/stt/whisperkit.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tasks.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templates/desktop.html +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templates/handoff/theme.css.j2 +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templates/tmux.conf +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/templating.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/gws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/engines/qwen_base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/engines/qwen_custom.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/engines/qwen_design.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts/runpod_handler.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tts_server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/validation.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/voiceclone.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/voices/darren.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/voices/default.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/voices/jessica.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/voices/lisa.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/voices/may.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/worktree.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/decisions/obsidian-second-brain.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/logo.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/INDEX.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/architecture.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/communication/channels.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/communication/hammerspoon.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/communication/handoff.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/concepts.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/deployment/remote-access.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/deployment/remote-machines.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/glossary.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/internals/damage-control.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/internals/portal.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/internals/shell-escaping.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/internals/troubleshooting.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/missions.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/quickstart.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/sessions/pi.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/tts/runpod-tts.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/docs/wiki/tts/tts-self-hosted.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/requirements-tts.txt +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/templates/launchd/dev.agentwire.mission-dispatcher.plist +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/templates/launchd/dev.agentwire.mission-feedback-router.plist +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/templates/launchd/dev.agentwire.mission-janitor.plist +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/conftest.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/fixtures/sample_agentwire.yml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/integration/test_missions_concurrency.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/integration/test_missions_lifecycle.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/integration/test_scheduler_board.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/integration/test_server_websockets.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_build_agent_command.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_channels.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_cli_commands.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_cli_output.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_cli_safety.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_damage_control_hooks.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_damage_control_sync.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_file_io.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_handoff_git_state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_handoff_instructions.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_handoff_parser.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_handoff_renderer.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_mcp_server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_mcp_tools_args.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_cli.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_dispatcher.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_eligibility.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_feedback_router.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_gc.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_github.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_naming.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_missions_state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_overnight_resume_flags.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_portal_api.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_project_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_roles.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_safety_disabled_rules.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_safety_escape_hatch.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_safety_kill_switch.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_safety_mission_worker.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_scheduler.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_scheduler_parsing.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_search.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_server_async.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_server_pure.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_tasks.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_templating.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/tests/unit/test_worktree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentwire-dev
|
|
3
|
-
Version: 1.29.
|
|
3
|
+
Version: 1.29.5
|
|
4
4
|
Summary: Multi-session voice web interface for AI coding agents
|
|
5
5
|
Project-URL: Homepage, https://agentwire.dev
|
|
6
6
|
Project-URL: Repository, https://github.com/dotdevdotdev/agentwire-dev
|
|
@@ -702,6 +702,8 @@ Provides-Extra: stt
|
|
|
702
702
|
Requires-Dist: fastapi>=0.104.0; extra == 'stt'
|
|
703
703
|
Requires-Dist: faster-whisper>=1.0.0; extra == 'stt'
|
|
704
704
|
Requires-Dist: python-multipart>=0.0.6; extra == 'stt'
|
|
705
|
+
Requires-Dist: soundfile>=0.12.0; extra == 'stt'
|
|
706
|
+
Requires-Dist: useful-moonshine-onnx>=20250101; extra == 'stt'
|
|
705
707
|
Requires-Dist: uvicorn>=0.24.0; extra == 'stt'
|
|
706
708
|
Provides-Extra: tts
|
|
707
709
|
Requires-Dist: chatterbox-tts>=0.1.6; extra == 'tts'
|
|
@@ -6182,6 +6182,23 @@ def cmd_doctor(args) -> int:
|
|
|
6182
6182
|
else:
|
|
6183
6183
|
print(f" -> Service is remote, start it on {service_config.machine}")
|
|
6184
6184
|
|
|
6185
|
+
# 8b. Check STT server. STT isn't a `services.*` entry — it's configured via
|
|
6186
|
+
# `stt.url`, so the loop above can't see it. Without this check, a crashed STT
|
|
6187
|
+
# server is invisible and the portal silently falls back to a model-less
|
|
6188
|
+
# WhisperKit (every push-to-talk then fails). Probe it explicitly.
|
|
6189
|
+
stt_url = getattr(getattr(ctx.config, "stt", None), "url", None)
|
|
6190
|
+
if stt_url:
|
|
6191
|
+
from agentwire.stt.server_backend import STTServerBackend
|
|
6192
|
+
|
|
6193
|
+
if STTServerBackend.is_available(stt_url):
|
|
6194
|
+
print(f" [ok] Stt: responding on {stt_url}")
|
|
6195
|
+
else:
|
|
6196
|
+
print(f" [!!] Stt: not responding on {stt_url}")
|
|
6197
|
+
print(" Portal will fall back to WhisperKit (usually no model -> transcription FAILS).")
|
|
6198
|
+
print(" Fix: agentwire stt start")
|
|
6199
|
+
print(" If it won't boot: uv pip install --python .venv/bin/python -e '.[stt]'")
|
|
6200
|
+
issues_found += 1
|
|
6201
|
+
|
|
6185
6202
|
# 9. Validate remote machines
|
|
6186
6203
|
print("\nChecking remote machines...")
|
|
6187
6204
|
remote_machines = {mid: m for mid, m in ctx.machines.items() if mid != ctx.local_machine_id}
|
|
@@ -166,6 +166,12 @@ export class SessionWindow {
|
|
|
166
166
|
this.ws = null;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
// Remove the two-finger touch-scroll listeners
|
|
170
|
+
if (this._touchScrollCleanup) {
|
|
171
|
+
this._touchScrollCleanup();
|
|
172
|
+
this._touchScrollCleanup = null;
|
|
173
|
+
}
|
|
174
|
+
|
|
169
175
|
// Dispose terminal (terminal mode) or output element (monitor mode)
|
|
170
176
|
if (this.terminal) {
|
|
171
177
|
this.terminal.dispose();
|
|
@@ -321,6 +327,13 @@ export class SessionWindow {
|
|
|
321
327
|
|
|
322
328
|
this.terminal.open(terminalEl);
|
|
323
329
|
|
|
330
|
+
// Touch devices emit no `wheel` events, so xterm's wheel-driven
|
|
331
|
+
// scrolling (tmux copy-mode / the app's own scroll) is unreachable on a
|
|
332
|
+
// tablet. Translate a two-finger vertical pan into synthetic wheel
|
|
333
|
+
// events so touch scrolls history exactly like a desktop mouse wheel.
|
|
334
|
+
// One finger stays free for tap/selection.
|
|
335
|
+
this._setupTouchScroll(terminalEl);
|
|
336
|
+
|
|
324
337
|
// Fit after font loads and layout is complete
|
|
325
338
|
const fontFamily = '"FiraMono Nerd Font Mono", Menlo, Monaco, "Courier New", monospace';
|
|
326
339
|
const fontSize = pickTerminalFontSize();
|
|
@@ -367,6 +380,154 @@ export class SessionWindow {
|
|
|
367
380
|
}
|
|
368
381
|
}
|
|
369
382
|
|
|
383
|
+
/**
|
|
384
|
+
* Translate a two-finger vertical pan into tmux mouse-wheel scroll.
|
|
385
|
+
*
|
|
386
|
+
* Touch devices emit no `wheel` events, so the desktop scroll path (mouse
|
|
387
|
+
* wheel → xterm encodes an SGR mouse event → tmux enters copy-mode and
|
|
388
|
+
* scrolls) never fires on a tablet. Rather than fake a WheelEvent and hope
|
|
389
|
+
* xterm's mouse encoder picks it up, we send the exact bytes a real wheel
|
|
390
|
+
* produces — the SGR-1006 mouse sequence — straight down the input
|
|
391
|
+
* WebSocket. tmux runs with `mouse on`, so it consumes these and scrolls
|
|
392
|
+
* history. One finger is left untouched for tap/selection.
|
|
393
|
+
*
|
|
394
|
+
* SGR wheel: ESC [ < Btn ; Col ; Row M — Btn 64 = wheel-up, 65 = wheel-down
|
|
395
|
+
* (1-based Col/Row; any point inside the pane works for scroll).
|
|
396
|
+
*/
|
|
397
|
+
_setupTouchScroll(terminalEl) {
|
|
398
|
+
// Finger travel, in text lines, that advances one tmux wheel tick. tmux
|
|
399
|
+
// scrolls 5 lines per wheel tick (its WheelUp/DownPane `-N 5` binding),
|
|
400
|
+
// so a strict 1:1 mapping would need 5 lines of finger travel per tick —
|
|
401
|
+
// on a short window that's nearly the whole draggable height, so you get
|
|
402
|
+
// one tick then nothing. Firing a tick every ~1.5 lines keeps it ticking
|
|
403
|
+
// continuously across the whole stroke; momentum then covers distance.
|
|
404
|
+
const FINGER_LINES_PER_TICK = 1.5;
|
|
405
|
+
// Cap ticks emitted per animation frame so a fast flick can't flood tmux
|
|
406
|
+
// faster than it can redraw (the source of the laggy/stuttery feel).
|
|
407
|
+
const MAX_TICKS_PER_FRAME = 8;
|
|
408
|
+
// First tick of a gesture fires after only this fraction of a full tick
|
|
409
|
+
// of travel, so the start feels immediate instead of dead until ~5 lines.
|
|
410
|
+
const FIRST_TICK_FRACTION = 0.35;
|
|
411
|
+
// Momentum: after lift, keep scrolling and decay velocity each frame.
|
|
412
|
+
const FRICTION = 0.94; // per-frame velocity multiplier
|
|
413
|
+
const FLING_MIN_V = 0.04; // px/ms at release needed to start a fling
|
|
414
|
+
const MOMENTUM_STOP_V = 0.012; // px/ms below which momentum ends
|
|
415
|
+
|
|
416
|
+
let active = false;
|
|
417
|
+
let lastMidY = 0;
|
|
418
|
+
let accum = 0; // unconsumed finger travel (px), sign = direction
|
|
419
|
+
let rafId = null;
|
|
420
|
+
let emitted = false; // has any tick fired this gesture? (first-tick boost)
|
|
421
|
+
let velocity = 0; // px/ms, smoothed — drives momentum
|
|
422
|
+
let lastMoveT = 0;
|
|
423
|
+
let lastFrameT = 0;
|
|
424
|
+
let momentum = false;
|
|
425
|
+
|
|
426
|
+
const midY = (touches) => (touches[0].clientY + touches[1].clientY) / 2;
|
|
427
|
+
|
|
428
|
+
// Finger pixels per tick = lines-per-tick × measured cell height.
|
|
429
|
+
const pxPerTick = () => {
|
|
430
|
+
const rows = this.terminal?.rows || 24;
|
|
431
|
+
const h = terminalEl.getBoundingClientRect().height;
|
|
432
|
+
const cell = rows > 0 && h > 0 ? h / rows : 18;
|
|
433
|
+
return FINGER_LINES_PER_TICK * cell;
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
// dir < 0 → wheel-up (older history); dir > 0 → wheel-down (newer).
|
|
437
|
+
const wheelSeq = (dir) => {
|
|
438
|
+
const col = Math.max(1, Math.floor(this.terminal.cols / 2));
|
|
439
|
+
const row = Math.max(1, Math.floor(this.terminal.rows / 2));
|
|
440
|
+
return `\x1b[<${dir < 0 ? 64 : 65};${col};${row}M`;
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
const sendTicks = (ticks) => {
|
|
444
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN || !this.terminal) return;
|
|
445
|
+
this.ws.send(JSON.stringify({ type: 'input', data: wheelSeq(ticks).repeat(Math.abs(ticks)) }));
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
// One frame: advance momentum, then batch all due ticks into one message.
|
|
449
|
+
const flush = (now) => {
|
|
450
|
+
rafId = null;
|
|
451
|
+
|
|
452
|
+
if (momentum) {
|
|
453
|
+
const dt = Math.min(now - lastFrameT, 50);
|
|
454
|
+
lastFrameT = now;
|
|
455
|
+
accum += velocity * dt;
|
|
456
|
+
velocity *= FRICTION;
|
|
457
|
+
if (Math.abs(velocity) < MOMENTUM_STOP_V) momentum = false;
|
|
458
|
+
}
|
|
459
|
+
if (active || momentum) rafId = requestAnimationFrame(flush);
|
|
460
|
+
|
|
461
|
+
const step = pxPerTick();
|
|
462
|
+
// Snappier first tick: lower the threshold until the gesture moves.
|
|
463
|
+
const threshold = emitted ? step : step * FIRST_TICK_FRACTION;
|
|
464
|
+
let ticks = Math.trunc(accum / threshold);
|
|
465
|
+
if (ticks === 0) return;
|
|
466
|
+
if (ticks > MAX_TICKS_PER_FRAME) ticks = MAX_TICKS_PER_FRAME;
|
|
467
|
+
else if (ticks < -MAX_TICKS_PER_FRAME) ticks = -MAX_TICKS_PER_FRAME;
|
|
468
|
+
accum -= ticks * threshold;
|
|
469
|
+
emitted = true;
|
|
470
|
+
sendTicks(ticks);
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
const startRaf = () => { if (rafId === null) { lastFrameT = performance.now(); rafId = requestAnimationFrame(flush); } };
|
|
474
|
+
const stopRaf = () => { if (rafId !== null) { cancelAnimationFrame(rafId); rafId = null; } };
|
|
475
|
+
|
|
476
|
+
const onTouchStart = (e) => {
|
|
477
|
+
if (e.touches.length !== 2) { active = false; momentum = false; stopRaf(); return; }
|
|
478
|
+
active = true;
|
|
479
|
+
momentum = false;
|
|
480
|
+
emitted = false;
|
|
481
|
+
velocity = 0;
|
|
482
|
+
accum = 0;
|
|
483
|
+
lastMidY = midY(e.touches);
|
|
484
|
+
lastMoveT = performance.now();
|
|
485
|
+
e.preventDefault(); // stop the page/WinBox from claiming the gesture
|
|
486
|
+
startRaf();
|
|
487
|
+
};
|
|
488
|
+
|
|
489
|
+
const onTouchMove = (e) => {
|
|
490
|
+
if (!active || e.touches.length !== 2) return;
|
|
491
|
+
e.preventDefault();
|
|
492
|
+
const now = performance.now();
|
|
493
|
+
const y = midY(e.touches);
|
|
494
|
+
// Fingers up (y decreases) → newer/down; fingers down → older/up.
|
|
495
|
+
const dy = lastMidY - y;
|
|
496
|
+
accum += dy;
|
|
497
|
+
const dt = now - lastMoveT;
|
|
498
|
+
if (dt > 0) velocity = 0.6 * velocity + 0.4 * (dy / dt); // smoothed px/ms
|
|
499
|
+
lastMidY = y;
|
|
500
|
+
lastMoveT = now;
|
|
501
|
+
};
|
|
502
|
+
|
|
503
|
+
const onTouchEnd = (e) => {
|
|
504
|
+
if (e.touches.length >= 2) return;
|
|
505
|
+
active = false;
|
|
506
|
+
// Carry a fast lift into a decaying fling; otherwise stop clean.
|
|
507
|
+
if (Math.abs(velocity) >= FLING_MIN_V) {
|
|
508
|
+
momentum = true;
|
|
509
|
+
lastFrameT = performance.now();
|
|
510
|
+
startRaf();
|
|
511
|
+
} else {
|
|
512
|
+
velocity = 0;
|
|
513
|
+
accum = 0;
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
terminalEl.addEventListener('touchstart', onTouchStart, { passive: false });
|
|
518
|
+
terminalEl.addEventListener('touchmove', onTouchMove, { passive: false });
|
|
519
|
+
terminalEl.addEventListener('touchend', onTouchEnd);
|
|
520
|
+
terminalEl.addEventListener('touchcancel', onTouchEnd);
|
|
521
|
+
|
|
522
|
+
this._touchScrollCleanup = () => {
|
|
523
|
+
stopRaf();
|
|
524
|
+
terminalEl.removeEventListener('touchstart', onTouchStart);
|
|
525
|
+
terminalEl.removeEventListener('touchmove', onTouchMove);
|
|
526
|
+
terminalEl.removeEventListener('touchend', onTouchEnd);
|
|
527
|
+
terminalEl.removeEventListener('touchcancel', onTouchEnd);
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
|
|
370
531
|
_createWinBox(container) {
|
|
371
532
|
const title = `${this.sessionId} (${this.mode})`;
|
|
372
533
|
|
|
@@ -51,7 +51,18 @@ def get_stt_backend(config: Any) -> STTBackend:
|
|
|
51
51
|
logger.info(f"Using STT server at {stt_url}")
|
|
52
52
|
return STTServerBackend(url=stt_url, timeout=timeout)
|
|
53
53
|
else:
|
|
54
|
-
|
|
54
|
+
# Loud, actionable warning: this is the silent-failure trap. A
|
|
55
|
+
# configured-but-unreachable STT server means the moonshine server
|
|
56
|
+
# crashed or isn't started, and we're about to fall back to
|
|
57
|
+
# WhisperKit — which is usually NOT installed, so every transcription
|
|
58
|
+
# will then fail at request time with a confusing error. Say so here.
|
|
59
|
+
logger.warning(
|
|
60
|
+
"STT server configured at %s but not reachable — falling back to "
|
|
61
|
+
"WhisperKit (likely has no model installed; transcription will FAIL). "
|
|
62
|
+
"Start it with `agentwire stt start`; if it won't boot, install deps: "
|
|
63
|
+
"`uv pip install --python .venv/bin/python -e '.[stt]'`.",
|
|
64
|
+
stt_url,
|
|
65
|
+
)
|
|
55
66
|
|
|
56
67
|
# Fall back to WhisperKit
|
|
57
68
|
logger.info("Using local WhisperKitSTT")
|
|
@@ -100,6 +100,60 @@ done
|
|
|
100
100
|
|
|
101
101
|
Tried — load time 25.4 s → 3.2 s (real win), per-call inference ~457 ms → ~1342 ms (≈3× slower). Only 389 / 743 graph nodes are CoreML-compatible, so the autoregressive decoder bounces ANE↔CPU per token. Not worth pursuing until the upstream moonshine_onnx graph becomes more CoreML-friendly.
|
|
102
102
|
|
|
103
|
+
## Troubleshooting: "STT does nothing" (the silent double-fallback)
|
|
104
|
+
|
|
105
|
+
This bit us once and is worth recognizing fast, because it fails **silently in two
|
|
106
|
+
places**. Symptom: push-to-talk produces no transcription and no visible error
|
|
107
|
+
(often first noticed on a tablet/phone, which red-herrings you toward the client).
|
|
108
|
+
|
|
109
|
+
**The failure chain:**
|
|
110
|
+
|
|
111
|
+
1. The STT server (`agentwire-stt` tmux session on `:8101`) **crashes on startup** —
|
|
112
|
+
most commonly `ModuleNotFoundError: No module named 'fastapi'` (or `moonshine_onnx`)
|
|
113
|
+
because the project `.venv` is missing the STT deps. The crash is only visible in
|
|
114
|
+
the tmux pane; the session stays alive at a shell prompt, so it *looks* started.
|
|
115
|
+
2. The portal builds `self.stt` once at startup via `get_stt_backend()`. With `:8101`
|
|
116
|
+
unreachable, `STTServerBackend.is_available()` is `False`, so it **falls back to
|
|
117
|
+
`WhisperKitSTT`** — which usually has no model installed.
|
|
118
|
+
3. Every `/transcribe` then returns `{"error": ...}` with HTTP **200**, so the browser
|
|
119
|
+
shows nothing. The only trace is `ERROR agentwire.stt.whisperkit: WhisperKit model
|
|
120
|
+
not found` in the portal log.
|
|
121
|
+
|
|
122
|
+
**Diagnose (in order):**
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
agentwire doctor # now prints [!!] Stt if :8101 is down
|
|
126
|
+
curl -s http://localhost:8101/health # {"status":"ok","model":{"backend":"moonshine",...}}
|
|
127
|
+
tmux capture-pane -pt agentwire-stt -S -50 # shows the real crash (missing import)
|
|
128
|
+
tmux capture-pane -pt agentwire-portal -S -200 | grep -i stt # "Using STT server" vs "falling back to WhisperKit"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The portal log line at startup is the tell:
|
|
132
|
+
- `Using STT server at http://localhost:8101` + `STT backend: STTServerBackend` → good.
|
|
133
|
+
- `STT server ... not reachable — falling back to WhisperKit` → the server is down.
|
|
134
|
+
|
|
135
|
+
**Fix:** install the STT deps into the venv the server actually launches with
|
|
136
|
+
(`.venv/bin/python`), restart the server, then **restart the portal** (it only picks
|
|
137
|
+
the backend at startup):
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
uv pip install --python .venv/bin/python -e '.[stt]' # declares moonshine + soundfile + fastapi
|
|
141
|
+
agentwire stt stop && agentwire stt start # wait for "Moonshine ONNX loaded"
|
|
142
|
+
agentwire portal restart --dev # re-runs get_stt_backend()
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Why it stayed hidden:** `stt.url` is configured but the server was down, and the
|
|
146
|
+
WhisperKit fallback only errors at *request* time, not at startup. As of this writing
|
|
147
|
+
the fallback now logs a loud, actionable warning and `agentwire doctor` health-checks
|
|
148
|
+
`:8101` — so next time it surfaces immediately instead of silently degrading.
|
|
149
|
+
|
|
150
|
+
**Tablet note:** if the mic does nothing on a phone/tablet *before* audio ever reaches
|
|
151
|
+
`/transcribe`, that's a different problem — a non-secure browser context. Reaching the
|
|
152
|
+
portal at `https://<LAN-IP>:8765` with a click-through self-signed cert is **not** a
|
|
153
|
+
secure context, so `navigator.mediaDevices` is `undefined` and recording silently
|
|
154
|
+
no-ops. Give the tablet a trusted origin (tunnel/valid cert) or, to test, allow the
|
|
155
|
+
origin via `chrome://flags/#unsafely-treat-insecure-origin-as-secure`.
|
|
156
|
+
|
|
103
157
|
## Reference
|
|
104
158
|
|
|
105
159
|
- Portal endpoint: `POST /transcribe` — multipart `file=@audio.webm`. Returns `{"text": "..."}`.
|
|
@@ -43,11 +43,16 @@ dev = [
|
|
|
43
43
|
"pytest-asyncio>=0.23.0",
|
|
44
44
|
"ruff>=0.1.0",
|
|
45
45
|
]
|
|
46
|
-
# STT server dependencies
|
|
46
|
+
# STT server dependencies. Moonshine ONNX is the default backend on Mac
|
|
47
|
+
# (small, fast, CPU-only, no torch) — it MUST be declared here or a fresh venv
|
|
48
|
+
# silently loses the default backend and the portal falls back to a model-less
|
|
49
|
+
# WhisperKit. faster-whisper is the higher-accuracy fallback for `STT_BACKEND=whisper`.
|
|
47
50
|
stt = [
|
|
48
51
|
"fastapi>=0.104.0",
|
|
49
52
|
"uvicorn>=0.24.0",
|
|
50
53
|
"python-multipart>=0.0.6",
|
|
54
|
+
"useful-moonshine-onnx>=20250101",
|
|
55
|
+
"soundfile>=0.12.0",
|
|
51
56
|
"faster-whisper>=1.0.0",
|
|
52
57
|
]
|
|
53
58
|
# TTS server dependencies (for GPU machines running the TTS backend)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/audit_logger.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/agentwire.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/containers.yaml
RENAMED
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/core.yaml
RENAMED
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/databases.yaml
RENAMED
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/firebase.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/hooks/damage-control/rules/remote.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-Echo--transparent.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/agentwire-splash-logo-layers.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentwire_dev-1.29.3 → agentwire_dev-1.29.5}/agentwire/static/icons/machines/automaton.jpeg
RENAMED
|
File without changes
|
|
File without changes
|