agentwire-dev 1.30.0__tar.gz → 1.31.0__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.30.0 → agentwire_dev-1.31.0}/PKG-INFO +31 -25
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/README.md +30 -24
- agentwire_dev-1.31.0/SECURITY.md +63 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/__main__.py +926 -533
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/config.py +127 -25
- agentwire_dev-1.31.0/agentwire/council/__init__.py +17 -0
- agentwire_dev-1.31.0/agentwire/council/cli.py +462 -0
- agentwire_dev-1.31.0/agentwire/council/inbox.py +192 -0
- agentwire_dev-1.31.0/agentwire/council/state.py +144 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/agentwire-permission.sh +19 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/idle-handler.sh +11 -2
- agentwire_dev-1.31.0/agentwire/hooks/queue-processor.sh +78 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/listen.py +16 -45
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/mcp_server.py +323 -20
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/dispatcher.py +1 -46
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/onboarding.py +79 -36
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/overnight.py +7 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/__init__.py +78 -0
- agentwire_dev-1.31.0/agentwire/roles/council-brain.md +13 -0
- agentwire_dev-1.31.0/agentwire/roles/council-conscience.md +13 -0
- agentwire_dev-1.31.0/agentwire/roles/council-critic.md +12 -0
- agentwire_dev-1.31.0/agentwire/roles/council-devils-advocate.md +12 -0
- agentwire_dev-1.31.0/agentwire/roles/council-gut.md +11 -0
- agentwire_dev-1.31.0/agentwire/roles/council-historian.md +12 -0
- agentwire_dev-1.31.0/agentwire/roles/council-member.md +47 -0
- agentwire_dev-1.31.0/agentwire/roles/council-orchestrator.md +34 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/init.md +24 -49
- agentwire_dev-1.31.0/agentwire/roles/soul.md +36 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/voice.md +4 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/scheduler.py +31 -3
- agentwire_dev-1.31.0/agentwire/scratchpad.py +105 -0
- agentwire_dev-1.31.0/agentwire/security.py +220 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/server.py +465 -55
- agentwire_dev-1.31.0/agentwire/services.py +285 -0
- agentwire_dev-1.31.0/agentwire/session_ready.py +145 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/css/desktop.css +392 -2
- agentwire_dev-1.31.0/agentwire/static/js/api.js +48 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/artifact-window.js +38 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/collage.js +7 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/command-palette.js +123 -31
- agentwire_dev-1.31.0/agentwire/static/js/dead-key-suppressor.js +58 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/desktop-manager.js +73 -5
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/desktop.js +145 -18
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/icon-manager.js +3 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/notifications-panel.js +3 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/safety-shared.js +6 -4
- agentwire_dev-1.31.0/agentwire/static/js/scratchpad.js +313 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/session-window.js +130 -27
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/artifacts-section.js +4 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/config-section.js +2 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/machines-section.js +4 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/missions-section.js +3 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/projects-section.js +10 -15
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/scheduler-section.js +7 -6
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/sessions-section.js +5 -4
- agentwire_dev-1.31.0/agentwire/static/js/token-modal.js +92 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/utils/auto-refresh.js +3 -1
- agentwire_dev-1.31.0/agentwire/static/js/voice/browser-stt.js +65 -0
- agentwire_dev-1.31.0/agentwire/static/js/voice/browser-tts.js +96 -0
- agentwire_dev-1.31.0/agentwire/static/js/voice/jargon.js +55 -0
- agentwire_dev-1.31.0/agentwire/static/js/voice/prompt.js +8 -0
- agentwire_dev-1.31.0/agentwire/stt/__init__.py +36 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/stt/base.py +16 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/stt/server_backend.py +40 -10
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/stt/stt_server.py +16 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templates/desktop.html +23 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templates/tmux.conf +14 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/base.py +7 -3
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/engines/qwen_custom.py +2 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/engines/qwen_design.py +6 -6
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts_server.py +59 -1
- agentwire_dev-1.31.0/agentwire/utils/speech.py +23 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/voiceclone.py +58 -182
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/INDEX.md +8 -5
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/architecture.md +1 -1
- agentwire_dev-1.31.0/docs/wiki/council.md +113 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/glossary.md +4 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/internals/portal.md +1 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/internals/troubleshooting.md +12 -19
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/internals/window-collage.md +2 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/quickstart.md +45 -9
- agentwire_dev-1.31.0/docs/wiki/services.md +74 -0
- agentwire_dev-1.31.0/docs/wiki/voice/shim-contract.md +224 -0
- {agentwire_dev-1.30.0/docs/wiki/tts → agentwire_dev-1.31.0/docs/wiki/voice}/stt-self-hosted.md +10 -13
- {agentwire_dev-1.30.0/docs/wiki/tts → agentwire_dev-1.31.0/docs/wiki/voice}/tts-self-hosted.md +8 -5
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/conftest.py +1 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/integration/test_missions_lifecycle.py +14 -2
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/integration/test_server_websockets.py +94 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_cli_commands.py +85 -0
- agentwire_dev-1.31.0/tests/unit/test_config.py +205 -0
- agentwire_dev-1.31.0/tests/unit/test_council_cli.py +297 -0
- agentwire_dev-1.31.0/tests/unit/test_council_inbox.py +156 -0
- agentwire_dev-1.31.0/tests/unit/test_council_state.py +87 -0
- agentwire_dev-1.31.0/tests/unit/test_hooks_install.py +212 -0
- agentwire_dev-1.31.0/tests/unit/test_idle_handler.py +84 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_mcp_server.py +56 -4
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_mcp_tools_args.py +2 -1
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_cli.py +11 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_portal_api.py +312 -5
- agentwire_dev-1.31.0/tests/unit/test_roles.py +262 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_scheduler.py +83 -0
- agentwire_dev-1.31.0/tests/unit/test_scratchpad.py +117 -0
- agentwire_dev-1.31.0/tests/unit/test_security.py +150 -0
- agentwire_dev-1.31.0/tests/unit/test_server_async.py +279 -0
- agentwire_dev-1.31.0/tests/unit/test_services.py +295 -0
- agentwire_dev-1.31.0/tests/unit/test_session_ready.py +167 -0
- agentwire_dev-1.31.0/tests/unit/test_speech_tags.py +41 -0
- agentwire_dev-1.31.0/tests/unit/test_stt_backend.py +34 -0
- agentwire_dev-1.31.0/tests/unit/test_tmux_template.py +67 -0
- agentwire_dev-1.30.0/SECURITY.md +0 -59
- agentwire_dev-1.30.0/agentwire/static/js/new-project-modal.js +0 -177
- agentwire_dev-1.30.0/agentwire/static/js/windows/chat-window.js +0 -612
- agentwire_dev-1.30.0/agentwire/stt/__init__.py +0 -69
- agentwire_dev-1.30.0/agentwire/stt/whisperkit.py +0 -90
- agentwire_dev-1.30.0/agentwire/tts/runpod_handler.py +0 -350
- agentwire_dev-1.30.0/docs/wiki/tts/runpod-tts.md +0 -98
- agentwire_dev-1.30.0/tests/unit/test_config.py +0 -124
- agentwire_dev-1.30.0/tests/unit/test_roles.py +0 -141
- agentwire_dev-1.30.0/tests/unit/test_server_async.py +0 -95
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/.gitignore +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/CHANGELOG.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/CLA.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/Dockerfile.local +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/Dockerfile.runpod +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/LICENSE +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/RELEASING.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/SPONSORS.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/cli_safety.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/completion.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/fetch.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/handoff/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/handoff/git_state.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/handoff/instructions.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/handoff/parser.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/handoff/renderer.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/handoff/schema.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/history.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/locking.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/cli.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/config.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/eligibility.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/feedback_router.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/gc.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/github.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/naming.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/missions/state.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/network.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/project_config.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/projects.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/prompts/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/prompts/init.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/agentwire.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/notifications.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/orchestrator.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/roles/worker.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/safety/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/safety/_core.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/search.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-Echo--black.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-Echo--transparent.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-Echo.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-email-banner.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/favicon.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/android.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/automaton.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/bot.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/droid.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/drone.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/guardian.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/mech.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/probe.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/robot.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/machines/unit.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/blob.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/cloud.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/crystal.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/flame.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/horned.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/moon.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/slime.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/star.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/projects/winged.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/bear.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/cat.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/crown.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/deer.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/drone.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/fox.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/horse.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/lion.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/robot.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/components/icon-picker.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/components/list-card.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/components/type-tag.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/safety-window.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/session-id.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/sidebar.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/tile-manager.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/utils/ansi.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tasks.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/templating.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/gws.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/engines/qwen_base.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/validation.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/voices/darren.wav +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/voices/default.wav +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/voices/jessica.wav +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/voices/lisa.wav +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/voices/may.wav +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/agentwire/worktree.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/decisions/obsidian-second-brain.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/logo.png +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/communication/channels.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/communication/hammerspoon.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/communication/handoff.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/concepts.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/deployment/remote-access.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/deployment/remote-machines.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/internals/damage-control.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/internals/shell-escaping.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/missions.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/docs/wiki/sessions/pi.md +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/pyproject.toml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/requirements-tts.txt +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/templates/launchd/dev.agentwire.mission-dispatcher.plist +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/templates/launchd/dev.agentwire.mission-feedback-router.plist +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/templates/launchd/dev.agentwire.mission-janitor.plist +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/fixtures/sample_agentwire.yml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/integration/test_missions_concurrency.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/integration/test_scheduler_board.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_build_agent_command.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_channels.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_cli_output.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_cli_safety.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_damage_control_hooks.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_damage_control_sync.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_file_io.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_handoff_git_state.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_handoff_instructions.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_handoff_parser.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_handoff_renderer.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_config.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_dispatcher.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_eligibility.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_feedback_router.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_gc.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_github.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_naming.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_missions_state.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_overnight_resume_flags.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_project_config.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_safety_disabled_rules.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_safety_escape_hatch.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_safety_kill_switch.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_safety_mission_worker.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_scheduler_parsing.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_search.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_server_pure.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_tasks.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/tests/unit/test_templating.py +0 -0
- {agentwire_dev-1.30.0 → agentwire_dev-1.31.0}/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.
|
|
3
|
+
Version: 1.31.0
|
|
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
|
|
@@ -729,7 +729,7 @@ Description-Content-Type: text/markdown
|
|
|
729
729
|
<a href="https://pypi.org/project/agentwire-dev/"><img src="https://img.shields.io/pypi/v/agentwire-dev?color=green" alt="PyPI"></a>
|
|
730
730
|
<a href="https://pypi.org/project/agentwire-dev/"><img src="https://img.shields.io/pypi/pyversions/agentwire-dev" alt="Python"></a>
|
|
731
731
|
<a href="https://github.com/dotdevdotdev/agentwire-dev/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dotdevdotdev/agentwire-dev" alt="License"></a>
|
|
732
|
-
<a href="https://discord.gg/bspFZNTdUr"><img src="https://img.shields.io/discord
|
|
732
|
+
<a href="https://discord.gg/bspFZNTdUr"><img src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
|
|
733
733
|
</p>
|
|
734
734
|
|
|
735
735
|
---
|
|
@@ -748,10 +748,6 @@ Old way: Get up. Walk to computer. Type.
|
|
|
748
748
|
|
|
749
749
|
Push-to-talk voice control for [Claude Code](https://github.com/anthropics/claude-code) or any AI coding assistant running in tmux.
|
|
750
750
|
|
|
751
|
-
<p align="center">
|
|
752
|
-
<img src="https://agentwire.dev/images/demo.gif" alt="Demo" width="600">
|
|
753
|
-
</p>
|
|
754
|
-
|
|
755
751
|
```
|
|
756
752
|
Phone → AgentWire Portal → tmux session → Claude Code
|
|
757
753
|
🎤 (WebSocket) 📺 🤖
|
|
@@ -777,11 +773,15 @@ agentwire generate-certs
|
|
|
777
773
|
|
|
778
774
|
# Run
|
|
779
775
|
agentwire portal start
|
|
780
|
-
# Open
|
|
776
|
+
# Open http://127.0.0.1:8765 in Chrome — voice works immediately
|
|
781
777
|
```
|
|
782
778
|
|
|
783
779
|
**Requirements:** Python 3.10+, tmux, ffmpeg, Claude Code
|
|
784
780
|
|
|
781
|
+
**Honest setup time:** under a minute to a working voice portal (instant mode: Chrome speech in, browser voice out — robotic but real). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
|
|
782
|
+
|
|
783
|
+
> **Network & trust model.** The portal binds `127.0.0.1` by default — local only. To use it from your phone, set `server.host: 0.0.0.0` in `~/.agentwire/config.yaml`. Non-loopback binds require an auth token (auto-generated on first start; print it with `agentwire portal token`) — your phone prompts for it once, then remembers it. Origin checks reject cross-site browser requests on every bind. Still: keep it on a trusted LAN. Never port-forward it or run it on a public-facing VPS — for internet access use Cloudflare Tunnel + Zero Trust. Details in [SECURITY.md](SECURITY.md).
|
|
784
|
+
|
|
785
785
|
<details>
|
|
786
786
|
<summary><strong>Platform-specific instructions</strong></summary>
|
|
787
787
|
|
|
@@ -802,6 +802,8 @@ pip install agentwire-dev
|
|
|
802
802
|
|
|
803
803
|
</details>
|
|
804
804
|
|
|
805
|
+
> **tmux config matters.** Default tmux has no mouse scroll, a tiny scrollback, and broken copy UX — see [Recommended tmux config](docs/wiki/quickstart.md#recommended-tmux-config), or let `agentwire init` install it for you.
|
|
806
|
+
|
|
805
807
|
---
|
|
806
808
|
|
|
807
809
|
## Features
|
|
@@ -828,13 +830,13 @@ agentwire new -s myproject -p ~/projects/myproject
|
|
|
828
830
|
```
|
|
829
831
|
|
|
830
832
|
**2. Open the portal:**
|
|
831
|
-
Visit `
|
|
833
|
+
Visit `http://127.0.0.1:8765` in Chrome (or your phone/tablet with LAN access configured)
|
|
832
834
|
|
|
833
835
|
**3. Talk:**
|
|
834
|
-
Hold the mic button, speak your request, release.
|
|
836
|
+
Hold the mic button, speak your request, release. In instant mode the transcript appears for a quick glance — Enter sends it to Claude Code.
|
|
835
837
|
|
|
836
838
|
**4. Listen:**
|
|
837
|
-
Agent responses are spoken back
|
|
839
|
+
Agent responses are spoken back — browser voice out of the box, or a real TTS model behind a custom shim.
|
|
838
840
|
|
|
839
841
|
---
|
|
840
842
|
|
|
@@ -883,29 +885,33 @@ All decisions logged for audit trails.
|
|
|
883
885
|
|
|
884
886
|
## Voice Configuration
|
|
885
887
|
|
|
886
|
-
|
|
888
|
+
Two tiers, both sides:
|
|
889
|
+
|
|
890
|
+
**`default` (zero setup, what a fresh install gets):** Chrome speech recognition in, browser speechSynthesis out, OS voice when no browser is connected. No GPU, no models, no certs.
|
|
891
|
+
|
|
892
|
+
**`custom` (bring your own model):** any HTTP shim implementing the [voice shim contract](docs/wiki/voice/shim-contract.md) — ~30 lines wraps anything (Deepgram, whisper.cpp, an expressive emotion-tag model). The bundled servers are reference shims:
|
|
887
893
|
|
|
888
894
|
```yaml
|
|
889
895
|
# ~/.agentwire/config.yaml
|
|
890
896
|
tts:
|
|
891
|
-
backend: "
|
|
892
|
-
|
|
893
|
-
|
|
897
|
+
backend: "custom"
|
|
898
|
+
url: "http://localhost:8100" # agentwire tts start (kokoro CPU / chatterbox GPU / qwen / zonos)
|
|
899
|
+
options:
|
|
900
|
+
backend: kokoro
|
|
901
|
+
stt:
|
|
902
|
+
backend: "custom"
|
|
903
|
+
url: "http://localhost:8101" # agentwire stt start (moonshine ONNX, CPU)
|
|
894
904
|
```
|
|
895
905
|
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
**STT (Speech-to-Text):** Runs locally via `agentwire stt start`. Uses Moonshine ONNX by default (fast CPU inference, no GPU required), with automatic fallback to faster-whisper. Configure backend in `config.yaml`.
|
|
906
|
+
Shims can declare capabilities (emotion tags, style instructions) via `GET /capabilities` — agentwire injects the shim's `tool_prompt` into the agent's `say` tooldef so agents actually use them.
|
|
899
907
|
|
|
900
908
|
<details>
|
|
901
|
-
<summary><strong>
|
|
902
|
-
|
|
903
|
-
```yaml
|
|
904
|
-
tts:
|
|
905
|
-
backend: "none"
|
|
906
|
-
```
|
|
909
|
+
<summary><strong>Prefer text-only?</strong></summary>
|
|
907
910
|
|
|
908
|
-
|
|
911
|
+
Instant mode already needs nothing — just don't press the mic. Agent speech
|
|
912
|
+
plays through the browser; mute the tab (or close it — with no browser
|
|
913
|
+
connected the OS voice handles notifications, which you can silence at the
|
|
914
|
+
system level).
|
|
909
915
|
|
|
910
916
|
</details>
|
|
911
917
|
|
|
@@ -983,7 +989,7 @@ Quick links:
|
|
|
983
989
|
- [Troubleshooting](docs/wiki/internals/troubleshooting.md)
|
|
984
990
|
- [Portal API](docs/wiki/internals/portal.md)
|
|
985
991
|
- [Remote Machines](docs/wiki/deployment/remote-machines.md)
|
|
986
|
-
- [
|
|
992
|
+
- [Voice Shim Contract](docs/wiki/voice/shim-contract.md) · [Self-Hosted TTS](docs/wiki/voice/tts-self-hosted.md)
|
|
987
993
|
- [Safety Hooks](docs/wiki/internals/damage-control.md)
|
|
988
994
|
|
|
989
995
|
---
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<a href="https://pypi.org/project/agentwire-dev/"><img src="https://img.shields.io/pypi/v/agentwire-dev?color=green" alt="PyPI"></a>
|
|
11
11
|
<a href="https://pypi.org/project/agentwire-dev/"><img src="https://img.shields.io/pypi/pyversions/agentwire-dev" alt="Python"></a>
|
|
12
12
|
<a href="https://github.com/dotdevdotdev/agentwire-dev/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dotdevdotdev/agentwire-dev" alt="License"></a>
|
|
13
|
-
<a href="https://discord.gg/bspFZNTdUr"><img src="https://img.shields.io/discord
|
|
13
|
+
<a href="https://discord.gg/bspFZNTdUr"><img src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
---
|
|
@@ -29,10 +29,6 @@ Old way: Get up. Walk to computer. Type.
|
|
|
29
29
|
|
|
30
30
|
Push-to-talk voice control for [Claude Code](https://github.com/anthropics/claude-code) or any AI coding assistant running in tmux.
|
|
31
31
|
|
|
32
|
-
<p align="center">
|
|
33
|
-
<img src="https://agentwire.dev/images/demo.gif" alt="Demo" width="600">
|
|
34
|
-
</p>
|
|
35
|
-
|
|
36
32
|
```
|
|
37
33
|
Phone → AgentWire Portal → tmux session → Claude Code
|
|
38
34
|
🎤 (WebSocket) 📺 🤖
|
|
@@ -58,11 +54,15 @@ agentwire generate-certs
|
|
|
58
54
|
|
|
59
55
|
# Run
|
|
60
56
|
agentwire portal start
|
|
61
|
-
# Open
|
|
57
|
+
# Open http://127.0.0.1:8765 in Chrome — voice works immediately
|
|
62
58
|
```
|
|
63
59
|
|
|
64
60
|
**Requirements:** Python 3.10+, tmux, ffmpeg, Claude Code
|
|
65
61
|
|
|
62
|
+
**Honest setup time:** under a minute to a working voice portal (instant mode: Chrome speech in, browser voice out — robotic but real). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
|
|
63
|
+
|
|
64
|
+
> **Network & trust model.** The portal binds `127.0.0.1` by default — local only. To use it from your phone, set `server.host: 0.0.0.0` in `~/.agentwire/config.yaml`. Non-loopback binds require an auth token (auto-generated on first start; print it with `agentwire portal token`) — your phone prompts for it once, then remembers it. Origin checks reject cross-site browser requests on every bind. Still: keep it on a trusted LAN. Never port-forward it or run it on a public-facing VPS — for internet access use Cloudflare Tunnel + Zero Trust. Details in [SECURITY.md](SECURITY.md).
|
|
65
|
+
|
|
66
66
|
<details>
|
|
67
67
|
<summary><strong>Platform-specific instructions</strong></summary>
|
|
68
68
|
|
|
@@ -83,6 +83,8 @@ pip install agentwire-dev
|
|
|
83
83
|
|
|
84
84
|
</details>
|
|
85
85
|
|
|
86
|
+
> **tmux config matters.** Default tmux has no mouse scroll, a tiny scrollback, and broken copy UX — see [Recommended tmux config](docs/wiki/quickstart.md#recommended-tmux-config), or let `agentwire init` install it for you.
|
|
87
|
+
|
|
86
88
|
---
|
|
87
89
|
|
|
88
90
|
## Features
|
|
@@ -109,13 +111,13 @@ agentwire new -s myproject -p ~/projects/myproject
|
|
|
109
111
|
```
|
|
110
112
|
|
|
111
113
|
**2. Open the portal:**
|
|
112
|
-
Visit `
|
|
114
|
+
Visit `http://127.0.0.1:8765` in Chrome (or your phone/tablet with LAN access configured)
|
|
113
115
|
|
|
114
116
|
**3. Talk:**
|
|
115
|
-
Hold the mic button, speak your request, release.
|
|
117
|
+
Hold the mic button, speak your request, release. In instant mode the transcript appears for a quick glance — Enter sends it to Claude Code.
|
|
116
118
|
|
|
117
119
|
**4. Listen:**
|
|
118
|
-
Agent responses are spoken back
|
|
120
|
+
Agent responses are spoken back — browser voice out of the box, or a real TTS model behind a custom shim.
|
|
119
121
|
|
|
120
122
|
---
|
|
121
123
|
|
|
@@ -164,29 +166,33 @@ All decisions logged for audit trails.
|
|
|
164
166
|
|
|
165
167
|
## Voice Configuration
|
|
166
168
|
|
|
167
|
-
|
|
169
|
+
Two tiers, both sides:
|
|
170
|
+
|
|
171
|
+
**`default` (zero setup, what a fresh install gets):** Chrome speech recognition in, browser speechSynthesis out, OS voice when no browser is connected. No GPU, no models, no certs.
|
|
172
|
+
|
|
173
|
+
**`custom` (bring your own model):** any HTTP shim implementing the [voice shim contract](docs/wiki/voice/shim-contract.md) — ~30 lines wraps anything (Deepgram, whisper.cpp, an expressive emotion-tag model). The bundled servers are reference shims:
|
|
168
174
|
|
|
169
175
|
```yaml
|
|
170
176
|
# ~/.agentwire/config.yaml
|
|
171
177
|
tts:
|
|
172
|
-
backend: "
|
|
173
|
-
|
|
174
|
-
|
|
178
|
+
backend: "custom"
|
|
179
|
+
url: "http://localhost:8100" # agentwire tts start (kokoro CPU / chatterbox GPU / qwen / zonos)
|
|
180
|
+
options:
|
|
181
|
+
backend: kokoro
|
|
182
|
+
stt:
|
|
183
|
+
backend: "custom"
|
|
184
|
+
url: "http://localhost:8101" # agentwire stt start (moonshine ONNX, CPU)
|
|
175
185
|
```
|
|
176
186
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
**STT (Speech-to-Text):** Runs locally via `agentwire stt start`. Uses Moonshine ONNX by default (fast CPU inference, no GPU required), with automatic fallback to faster-whisper. Configure backend in `config.yaml`.
|
|
187
|
+
Shims can declare capabilities (emotion tags, style instructions) via `GET /capabilities` — agentwire injects the shim's `tool_prompt` into the agent's `say` tooldef so agents actually use them.
|
|
180
188
|
|
|
181
189
|
<details>
|
|
182
|
-
<summary><strong>
|
|
183
|
-
|
|
184
|
-
```yaml
|
|
185
|
-
tts:
|
|
186
|
-
backend: "none"
|
|
187
|
-
```
|
|
190
|
+
<summary><strong>Prefer text-only?</strong></summary>
|
|
188
191
|
|
|
189
|
-
|
|
192
|
+
Instant mode already needs nothing — just don't press the mic. Agent speech
|
|
193
|
+
plays through the browser; mute the tab (or close it — with no browser
|
|
194
|
+
connected the OS voice handles notifications, which you can silence at the
|
|
195
|
+
system level).
|
|
190
196
|
|
|
191
197
|
</details>
|
|
192
198
|
|
|
@@ -264,7 +270,7 @@ Quick links:
|
|
|
264
270
|
- [Troubleshooting](docs/wiki/internals/troubleshooting.md)
|
|
265
271
|
- [Portal API](docs/wiki/internals/portal.md)
|
|
266
272
|
- [Remote Machines](docs/wiki/deployment/remote-machines.md)
|
|
267
|
-
- [
|
|
273
|
+
- [Voice Shim Contract](docs/wiki/voice/shim-contract.md) · [Self-Hosted TTS](docs/wiki/voice/tts-self-hosted.md)
|
|
268
274
|
- [Safety Hooks](docs/wiki/internals/damage-control.md)
|
|
269
275
|
|
|
270
276
|
---
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Reporting a Vulnerability
|
|
4
|
+
|
|
5
|
+
If you discover a security vulnerability in AgentWire, please report it privately.
|
|
6
|
+
|
|
7
|
+
**Do NOT open a public GitHub issue for security vulnerabilities.**
|
|
8
|
+
|
|
9
|
+
### How to Report
|
|
10
|
+
|
|
11
|
+
Email: security@agentwire.dev
|
|
12
|
+
|
|
13
|
+
Include:
|
|
14
|
+
- Description of the vulnerability
|
|
15
|
+
- Steps to reproduce
|
|
16
|
+
- Potential impact
|
|
17
|
+
- Any suggested fixes (optional)
|
|
18
|
+
|
|
19
|
+
### What to Expect
|
|
20
|
+
|
|
21
|
+
- **Acknowledgment:** Within 48 hours
|
|
22
|
+
- **Initial Assessment:** Within 1 week
|
|
23
|
+
- **Resolution Timeline:** Depends on severity, typically 30-90 days
|
|
24
|
+
|
|
25
|
+
### Scope
|
|
26
|
+
|
|
27
|
+
This security policy applies to:
|
|
28
|
+
- The AgentWire CLI (`agentwire` command)
|
|
29
|
+
- The AgentWire portal (web interface)
|
|
30
|
+
- Official AgentWire packages on PyPI
|
|
31
|
+
|
|
32
|
+
### Out of Scope
|
|
33
|
+
|
|
34
|
+
- Third-party dependencies (report to their maintainers)
|
|
35
|
+
- Self-hosted TTS/STT servers
|
|
36
|
+
- User misconfiguration
|
|
37
|
+
|
|
38
|
+
## Security Features
|
|
39
|
+
|
|
40
|
+
AgentWire includes built-in security features:
|
|
41
|
+
|
|
42
|
+
- **Damage Control Hooks:** Block 300+ dangerous command patterns
|
|
43
|
+
- **Path Protection:** Prevent access to sensitive files (.env, SSH keys, credentials)
|
|
44
|
+
- **Audit Logging:** All blocked operations are logged
|
|
45
|
+
|
|
46
|
+
See `docs/wiki/internals/damage-control.md` for details.
|
|
47
|
+
|
|
48
|
+
## Trust Model
|
|
49
|
+
|
|
50
|
+
The portal enforces two security layers in-process:
|
|
51
|
+
|
|
52
|
+
1. **Origin validation (always on).** Every state-changing request (POST/PUT/DELETE/PATCH) and WebSocket upgrade with an `Origin` header must match the portal's own origin, a localhost equivalent, or an entry in `server.allowed_origins` (exact `scheme://host[:port]` strings — needed when fronting with Cloudflare Tunnel, where the browser's origin is the tunnel domain). Mismatches get a 403 and a log line. Requests without an Origin header (curl, CLI, scripts) pass — CSRF is a browser vector. This protects loopback-only users from malicious pages firing cross-site requests at `localhost:8765`.
|
|
53
|
+
|
|
54
|
+
2. **Bearer-token auth (required for non-loopback binds).** The portal binds `127.0.0.1:8765` by default — local only. Binding anything else (`0.0.0.0`, a LAN IP) auto-generates a token at `~/.agentwire/portal.token` (mode 0600) and requires it on every request outside the public bootstrap surface (`GET /`, `/health`, `/static/*`): `Authorization: Bearer <token>` on HTTP, `agentwire.bearer.<token>` WebSocket subprotocol. The portal **refuses to start** on a non-loopback bind with auth explicitly disabled. Print the token with `agentwire portal token`; rotate with `--rotate`. Browsers prompt once per device and store it in localStorage.
|
|
55
|
+
|
|
56
|
+
Token configuration (`server.auth_token` in `~/.agentwire/config.yaml`): unset = use the token file (auto-generated); any string = explicit override; `""` = auth disabled, allowed only on loopback binds. Tokens are compared constant-time and redacted from the config served to the portal's config editor.
|
|
57
|
+
|
|
58
|
+
What this means in practice:
|
|
59
|
+
|
|
60
|
+
- **LAN exposure (`server.host: 0.0.0.0`) is protected by the token.** Someone on your network who can reach the port gets 401s until they present it. Treat the token like a password; rotate it if a device is lost.
|
|
61
|
+
- **Do not expose the portal directly to the public internet.** Token auth raises the bar on a trusted LAN; it is not a substitute for identity, MFA, audit, and revocation. For anything internet-facing, front it with **Cloudflare Tunnel + Zero Trust** (see `docs/wiki/deployment/remote-access.md`) and add your tunnel domain to `server.allowed_origins`.
|
|
62
|
+
- **Project deletion via `/api/projects/delete`** validates the path is absolute, contains no `..`, contains no shell metacharacters, and is not in a protected list. Local execution uses argv form (no shell); SSH execution uses `shlex.quote` per argument. These mitigations reduce blast radius if the perimeter fails.
|
|
63
|
+
- **Self-hosted TTS/STT servers are a separate trust domain** — they have no auth of their own and are out of scope here.
|