agentwire-dev 1.29.3__tar.gz → 1.30.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.29.3 → agentwire_dev-1.30.0}/PKG-INFO +3 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/__main__.py +142 -11
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/config.py +42 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/mcp_server.py +16 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/scheduler.py +350 -73
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/server.py +54 -16
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/css/desktop.css +170 -0
- agentwire_dev-1.30.0/agentwire/static/js/collage.js +367 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/command-palette.js +5 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/desktop-manager.js +4 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/desktop.js +39 -83
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/session-window.js +181 -120
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/scheduler-section.js +59 -11
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/sessions-section.js +18 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/tile-manager.js +58 -0
- agentwire_dev-1.30.0/agentwire/static/js/utils/ansi.js +122 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/stt/__init__.py +12 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/worktree.py +54 -19
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/INDEX.md +1 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/internals/portal.md +4 -0
- agentwire_dev-1.30.0/docs/wiki/internals/window-collage.md +92 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/tts/stt-self-hosted.md +54 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/pyproject.toml +6 -1
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_scheduler.py +118 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_worktree.py +54 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/.gitignore +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/CHANGELOG.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/CLA.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/Dockerfile.local +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/Dockerfile.runpod +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/LICENSE +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/README.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/RELEASING.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/SECURITY.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/SPONSORS.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/cli_safety.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/completion.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/fetch.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/handoff/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/handoff/git_state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/handoff/instructions.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/handoff/parser.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/handoff/renderer.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/handoff/schema.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/history.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/agentwire-permission.sh +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/hooks/idle-handler.sh +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/listen.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/locking.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/cli.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/dispatcher.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/eligibility.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/feedback_router.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/gc.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/github.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/naming.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/missions/state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/network.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/onboarding.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/overnight.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/project_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/projects.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/prompts/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/prompts/init.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/agentwire.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/init.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/notifications.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/orchestrator.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/voice.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/roles/worker.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/safety/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/safety/_core.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/search.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-Echo--black.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-Echo--transparent.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-Echo.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-email-banner.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/favicon.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/android.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/automaton.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/bot.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/droid.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/drone.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/guardian.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/mech.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/probe.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/robot.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/machines/unit.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/blob.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/cloud.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/crystal.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/flame.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/horned.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/moon.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/slime.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/star.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/projects/winged.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/bear.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/cat.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/crown.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/deer.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/drone.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/fox.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/horse.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/lion.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/robot.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/artifact-window.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/components/icon-picker.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/components/list-card.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/components/type-tag.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/icon-manager.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/new-project-modal.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/notifications-panel.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/safety-shared.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/safety-window.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/session-id.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/config-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/missions-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/sidebar.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/utils/auto-refresh.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/static/js/windows/chat-window.js +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/stt/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/stt/server_backend.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/stt/stt_server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/stt/whisperkit.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tasks.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templates/desktop.html +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templates/tmux.conf +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/templating.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/gws.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/engines/qwen_base.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/engines/qwen_custom.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/engines/qwen_design.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts/runpod_handler.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tts_server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/validation.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/voiceclone.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/voices/darren.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/voices/default.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/voices/jessica.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/voices/lisa.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/agentwire/voices/may.wav +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/decisions/obsidian-second-brain.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/logo.png +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/architecture.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/communication/channels.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/communication/hammerspoon.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/communication/handoff.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/concepts.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/deployment/remote-access.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/deployment/remote-machines.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/glossary.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/internals/damage-control.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/internals/shell-escaping.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/internals/troubleshooting.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/missions.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/quickstart.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/sessions/pi.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/tts/runpod-tts.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/docs/wiki/tts/tts-self-hosted.md +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/requirements-tts.txt +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/templates/launchd/dev.agentwire.mission-dispatcher.plist +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/templates/launchd/dev.agentwire.mission-feedback-router.plist +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/templates/launchd/dev.agentwire.mission-janitor.plist +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/conftest.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/fixtures/sample_agentwire.yml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/integration/test_missions_concurrency.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/integration/test_missions_lifecycle.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/integration/test_scheduler_board.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/integration/test_server_websockets.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_build_agent_command.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_channels.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_cli_commands.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_cli_output.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_cli_safety.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_damage_control_hooks.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_damage_control_sync.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_file_io.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_handoff_git_state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_handoff_instructions.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_handoff_parser.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_handoff_renderer.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_mcp_server.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_mcp_tools_args.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_cli.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_dispatcher.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_eligibility.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_feedback_router.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_gc.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_github.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_naming.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_missions_state.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_overnight_resume_flags.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_portal_api.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_project_config.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_roles.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_safety_disabled_rules.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_safety_escape_hatch.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_safety_kill_switch.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_safety_mission_worker.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_scheduler_parsing.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_search.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_server_async.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_server_pure.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_tasks.py +0 -0
- {agentwire_dev-1.29.3 → agentwire_dev-1.30.0}/tests/unit/test_templating.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentwire-dev
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.30.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
|
|
@@ -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'
|
|
@@ -761,8 +761,12 @@ def _notify_portal_sessions_changed():
|
|
|
761
761
|
# === Portal Commands ===
|
|
762
762
|
|
|
763
763
|
|
|
764
|
-
def _start_portal_local(args) -> int:
|
|
765
|
-
"""Start portal locally in tmux.
|
|
764
|
+
def _start_portal_local(args, attach: bool = True) -> int:
|
|
765
|
+
"""Start portal locally in tmux.
|
|
766
|
+
|
|
767
|
+
When attach is False (used by `agentwire up`), the portal is started
|
|
768
|
+
detached and we return without attaching.
|
|
769
|
+
"""
|
|
766
770
|
from .network import NetworkContext
|
|
767
771
|
from .tunnels import TunnelManager
|
|
768
772
|
|
|
@@ -770,8 +774,9 @@ def _start_portal_local(args) -> int:
|
|
|
770
774
|
|
|
771
775
|
if tmux_session_exists(session_name):
|
|
772
776
|
print(f"Portal already running in tmux session '{session_name}'")
|
|
773
|
-
|
|
774
|
-
|
|
777
|
+
if attach:
|
|
778
|
+
print("Attaching... (Ctrl+B D to detach)")
|
|
779
|
+
subprocess.run(["tmux", "attach-session", "-t", session_name])
|
|
775
780
|
return 0
|
|
776
781
|
|
|
777
782
|
# Ensure required tunnels are up before starting portal
|
|
@@ -835,8 +840,11 @@ def _start_portal_local(args) -> int:
|
|
|
835
840
|
|
|
836
841
|
_ensure_notifications_session()
|
|
837
842
|
|
|
838
|
-
|
|
839
|
-
|
|
843
|
+
if attach:
|
|
844
|
+
print("Portal started. Attaching... (Ctrl+B D to detach)")
|
|
845
|
+
subprocess.run(["tmux", "attach-session", "-t", session_name])
|
|
846
|
+
else:
|
|
847
|
+
print("Portal started.")
|
|
840
848
|
return 0
|
|
841
849
|
|
|
842
850
|
|
|
@@ -1147,19 +1155,21 @@ def _get_venv_for_backend(backend: str) -> str:
|
|
|
1147
1155
|
return "qwen"
|
|
1148
1156
|
|
|
1149
1157
|
|
|
1150
|
-
def _start_tts_local(args, venv_override: str | None = None) -> int:
|
|
1158
|
+
def _start_tts_local(args, venv_override: str | None = None, attach: bool = True) -> int:
|
|
1151
1159
|
"""Start TTS server locally in tmux.
|
|
1152
1160
|
|
|
1153
1161
|
Args:
|
|
1154
1162
|
args: Parsed CLI arguments
|
|
1155
1163
|
venv_override: Force specific venv (used for restart after venv_mismatch)
|
|
1164
|
+
attach: When False (used by `agentwire up`), start detached and return.
|
|
1156
1165
|
"""
|
|
1157
1166
|
session_name = get_tts_session_name()
|
|
1158
1167
|
|
|
1159
1168
|
if tmux_session_exists(session_name):
|
|
1160
1169
|
print(f"TTS server already running in tmux session '{session_name}'")
|
|
1161
|
-
|
|
1162
|
-
|
|
1170
|
+
if attach:
|
|
1171
|
+
print("Attaching... (Ctrl+B D to detach)")
|
|
1172
|
+
subprocess.run(["tmux", "attach-session", "-t", session_name])
|
|
1163
1173
|
return 0
|
|
1164
1174
|
|
|
1165
1175
|
# Get TTS config
|
|
@@ -1204,8 +1214,11 @@ def _start_tts_local(args, venv_override: str | None = None) -> int:
|
|
|
1204
1214
|
|
|
1205
1215
|
_ensure_notifications_session()
|
|
1206
1216
|
|
|
1207
|
-
|
|
1208
|
-
|
|
1217
|
+
if attach:
|
|
1218
|
+
print("TTS server started. Attaching... (Ctrl+B D to detach)")
|
|
1219
|
+
subprocess.run(["tmux", "attach-session", "-t", session_name])
|
|
1220
|
+
else:
|
|
1221
|
+
print("TTS server started.")
|
|
1209
1222
|
return 0
|
|
1210
1223
|
|
|
1211
1224
|
|
|
@@ -5625,6 +5638,98 @@ def cmd_dev(args) -> int:
|
|
|
5625
5638
|
return 0
|
|
5626
5639
|
|
|
5627
5640
|
|
|
5641
|
+
def _start_custom_service(svc) -> None:
|
|
5642
|
+
"""Start a custom service session (detached) if not already running."""
|
|
5643
|
+
if tmux_session_exists(svc.name):
|
|
5644
|
+
print(f" [ok] {svc.name} (already running)")
|
|
5645
|
+
return
|
|
5646
|
+
|
|
5647
|
+
project = svc.project or str(get_source_dir())
|
|
5648
|
+
cmd = [sys.executable, "-m", "agentwire", "new", "-s", svc.name, "-p", project, "--json"]
|
|
5649
|
+
if svc.roles:
|
|
5650
|
+
cmd.extend(["--roles", svc.roles])
|
|
5651
|
+
if svc.type:
|
|
5652
|
+
cmd.extend(["--type", svc.type])
|
|
5653
|
+
try:
|
|
5654
|
+
subprocess.run(cmd, check=True, capture_output=True, timeout=60)
|
|
5655
|
+
print(f" [ok] {svc.name} (started)")
|
|
5656
|
+
except Exception as e:
|
|
5657
|
+
print(f" [!!] {svc.name}: {e}", file=sys.stderr)
|
|
5658
|
+
|
|
5659
|
+
|
|
5660
|
+
def cmd_up(args) -> int:
|
|
5661
|
+
"""Boot all AgentWire services, then start/attach the dev session.
|
|
5662
|
+
|
|
5663
|
+
Brings up (detached): portal, TTS, STT, and any autostart custom
|
|
5664
|
+
services from config. The scheduler is auto-started by the portal
|
|
5665
|
+
(services.scheduler.autostart). Then runs `agentwire dev` to
|
|
5666
|
+
create + attach the main session.
|
|
5667
|
+
|
|
5668
|
+
Per-service start is best-effort — a failure to start one service
|
|
5669
|
+
doesn't block the rest or the dev session.
|
|
5670
|
+
"""
|
|
5671
|
+
from argparse import Namespace
|
|
5672
|
+
from .config import load_config as load_config_typed
|
|
5673
|
+
from .network import NetworkContext
|
|
5674
|
+
|
|
5675
|
+
cfg_dict = load_config()
|
|
5676
|
+
cfg = load_config_typed()
|
|
5677
|
+
ctx = NetworkContext.from_config()
|
|
5678
|
+
|
|
5679
|
+
def _is_local(name: str) -> bool:
|
|
5680
|
+
try:
|
|
5681
|
+
return ctx.is_local(name)
|
|
5682
|
+
except Exception:
|
|
5683
|
+
return True
|
|
5684
|
+
|
|
5685
|
+
print("Bringing up AgentWire services...")
|
|
5686
|
+
|
|
5687
|
+
# Portal (autostarts the scheduler on boot)
|
|
5688
|
+
if _is_local("portal"):
|
|
5689
|
+
portal_args = Namespace(
|
|
5690
|
+
dev=getattr(args, "dev", False),
|
|
5691
|
+
no_tts=getattr(args, "no_tts", False),
|
|
5692
|
+
no_stt=getattr(args, "no_stt", False),
|
|
5693
|
+
port=None, host=None,
|
|
5694
|
+
config=getattr(args, "config", None),
|
|
5695
|
+
)
|
|
5696
|
+
_start_portal_local(portal_args, attach=False)
|
|
5697
|
+
else:
|
|
5698
|
+
print(" Portal configured for a remote machine — skipping (start it there).")
|
|
5699
|
+
|
|
5700
|
+
# TTS — skip if disabled or using a cloud backend
|
|
5701
|
+
tts_backend = cfg_dict.get("tts", {}).get("backend", "chatterbox")
|
|
5702
|
+
if getattr(args, "no_tts", False):
|
|
5703
|
+
print(" TTS skipped (--no-tts).")
|
|
5704
|
+
elif tts_backend in ("none", "runpod"):
|
|
5705
|
+
print(f" TTS skipped (backend: {tts_backend}).")
|
|
5706
|
+
elif _is_local("tts"):
|
|
5707
|
+
tts_args = Namespace(port=None, host=None, backend=None)
|
|
5708
|
+
_start_tts_local(tts_args, attach=False)
|
|
5709
|
+
else:
|
|
5710
|
+
print(" TTS configured for a remote machine — skipping (start it there).")
|
|
5711
|
+
|
|
5712
|
+
# STT — start when configured (uses a local source venv)
|
|
5713
|
+
if getattr(args, "no_stt", False):
|
|
5714
|
+
print(" STT skipped (--no-stt).")
|
|
5715
|
+
elif cfg_dict.get("stt", {}).get("url"):
|
|
5716
|
+
stt_args = Namespace(port=None, host=None, model=None, backend=None)
|
|
5717
|
+
cmd_stt_start(stt_args)
|
|
5718
|
+
else:
|
|
5719
|
+
print(" STT skipped (no stt.url configured).")
|
|
5720
|
+
|
|
5721
|
+
# Custom services
|
|
5722
|
+
custom = [s for s in cfg.services.custom if s.autostart]
|
|
5723
|
+
if custom:
|
|
5724
|
+
print("Starting custom services...")
|
|
5725
|
+
for svc in custom:
|
|
5726
|
+
_start_custom_service(svc)
|
|
5727
|
+
|
|
5728
|
+
print()
|
|
5729
|
+
# Finally, the dev session (creates + attaches the agentwire session)
|
|
5730
|
+
return cmd_dev(args)
|
|
5731
|
+
|
|
5732
|
+
|
|
5628
5733
|
# === Init Command ===
|
|
5629
5734
|
|
|
5630
5735
|
def cmd_init(args) -> int:
|
|
@@ -6182,6 +6287,23 @@ def cmd_doctor(args) -> int:
|
|
|
6182
6287
|
else:
|
|
6183
6288
|
print(f" -> Service is remote, start it on {service_config.machine}")
|
|
6184
6289
|
|
|
6290
|
+
# 8b. Check STT server. STT isn't a `services.*` entry — it's configured via
|
|
6291
|
+
# `stt.url`, so the loop above can't see it. Without this check, a crashed STT
|
|
6292
|
+
# server is invisible and the portal silently falls back to a model-less
|
|
6293
|
+
# WhisperKit (every push-to-talk then fails). Probe it explicitly.
|
|
6294
|
+
stt_url = getattr(getattr(ctx.config, "stt", None), "url", None)
|
|
6295
|
+
if stt_url:
|
|
6296
|
+
from agentwire.stt.server_backend import STTServerBackend
|
|
6297
|
+
|
|
6298
|
+
if STTServerBackend.is_available(stt_url):
|
|
6299
|
+
print(f" [ok] Stt: responding on {stt_url}")
|
|
6300
|
+
else:
|
|
6301
|
+
print(f" [!!] Stt: not responding on {stt_url}")
|
|
6302
|
+
print(" Portal will fall back to WhisperKit (usually no model -> transcription FAILS).")
|
|
6303
|
+
print(" Fix: agentwire stt start")
|
|
6304
|
+
print(" If it won't boot: uv pip install --python .venv/bin/python -e '.[stt]'")
|
|
6305
|
+
issues_found += 1
|
|
6306
|
+
|
|
6185
6307
|
# 9. Validate remote machines
|
|
6186
6308
|
print("\nChecking remote machines...")
|
|
6187
6309
|
remote_machines = {mid: m for mid, m in ctx.machines.items() if mid != ctx.local_machine_id}
|
|
@@ -10162,6 +10284,15 @@ def main() -> int:
|
|
|
10162
10284
|
)
|
|
10163
10285
|
dev_parser.set_defaults(func=cmd_dev)
|
|
10164
10286
|
|
|
10287
|
+
up_parser = subparsers.add_parser(
|
|
10288
|
+
"up", help="Boot all services (portal, TTS, STT, scheduler, custom) then the dev session"
|
|
10289
|
+
)
|
|
10290
|
+
up_parser.add_argument("--dev", action="store_true", help="Run portal from source (uv run)")
|
|
10291
|
+
up_parser.add_argument("--no-tts", action="store_true", help="Skip starting the TTS server")
|
|
10292
|
+
up_parser.add_argument("--no-stt", action="store_true", help="Skip starting the STT server")
|
|
10293
|
+
up_parser.add_argument("--config", type=Path, default=None, help="Path to config file")
|
|
10294
|
+
up_parser.set_defaults(func=cmd_up)
|
|
10295
|
+
|
|
10165
10296
|
# === listen command group ===
|
|
10166
10297
|
listen_parser = subparsers.add_parser("listen", help="Voice input recording")
|
|
10167
10298
|
listen_parser.add_argument(
|
|
@@ -66,6 +66,10 @@ class WorktreesConfig:
|
|
|
66
66
|
enabled: bool = True
|
|
67
67
|
suffix: str = "-worktrees"
|
|
68
68
|
auto_create_branch: bool = True
|
|
69
|
+
# Gitignored files that `git worktree add` won't carry over (it only
|
|
70
|
+
# checks out tracked files). These are copied from the main repo into
|
|
71
|
+
# each fresh worktree so agents have the secrets/config they need.
|
|
72
|
+
copy_files: list = field(default_factory=lambda: [".env"])
|
|
69
73
|
|
|
70
74
|
|
|
71
75
|
@dataclass
|
|
@@ -178,12 +182,34 @@ class ServiceConfig:
|
|
|
178
182
|
scheme: str = "http" # http or https
|
|
179
183
|
|
|
180
184
|
|
|
185
|
+
@dataclass
|
|
186
|
+
class CustomServiceConfig:
|
|
187
|
+
"""A user-defined session that behaves like a service.
|
|
188
|
+
|
|
189
|
+
Custom services show up in the portal's Services column and are booted
|
|
190
|
+
by `agentwire up`. A service is just an agentwire session created in a
|
|
191
|
+
project directory; `roles`/`type` override the project's .agentwire.yml
|
|
192
|
+
when set.
|
|
193
|
+
"""
|
|
194
|
+
|
|
195
|
+
name: str
|
|
196
|
+
project: Optional[str] = None
|
|
197
|
+
autostart: bool = True
|
|
198
|
+
roles: Optional[str] = None # comma-separated; overrides project .agentwire.yml
|
|
199
|
+
type: Optional[str] = None # session type override (e.g. claude-bypass)
|
|
200
|
+
|
|
201
|
+
def __post_init__(self):
|
|
202
|
+
if self.project:
|
|
203
|
+
self.project = str(_expand_path(self.project) or self.project)
|
|
204
|
+
|
|
205
|
+
|
|
181
206
|
@dataclass
|
|
182
207
|
class ServicesConfig:
|
|
183
208
|
"""Where each service runs in the network."""
|
|
184
209
|
|
|
185
210
|
portal: ServiceConfig = field(default_factory=lambda: ServiceConfig(port=8765, scheme="https"))
|
|
186
211
|
tts: ServiceConfig = field(default_factory=lambda: ServiceConfig(port=8100, scheme="http"))
|
|
212
|
+
custom: list = field(default_factory=list) # list[CustomServiceConfig]
|
|
187
213
|
|
|
188
214
|
|
|
189
215
|
@dataclass
|
|
@@ -218,6 +244,7 @@ class SessionConfig:
|
|
|
218
244
|
class SchedulerConfig:
|
|
219
245
|
"""Scheduler daemon configuration."""
|
|
220
246
|
|
|
247
|
+
autostart: bool = True # start the daemon when the portal boots
|
|
221
248
|
board_file: Path = field(default_factory=lambda: Path.home() / ".agentwire" / "scheduler.yaml")
|
|
222
249
|
events_file: Path = field(default_factory=lambda: Path.home() / ".agentwire" / "scheduler-events.jsonl")
|
|
223
250
|
live_state_file: Path = field(default_factory=lambda: Path.home() / ".agentwire" / "scheduler-live.json")
|
|
@@ -387,6 +414,7 @@ def _dict_to_config(data: dict) -> Config:
|
|
|
387
414
|
enabled=worktrees_data.get("enabled", True),
|
|
388
415
|
suffix=worktrees_data.get("suffix", "-worktrees"),
|
|
389
416
|
auto_create_branch=worktrees_data.get("auto_create_branch", True),
|
|
417
|
+
copy_files=worktrees_data.get("copy_files", [".env"]),
|
|
390
418
|
)
|
|
391
419
|
projects = ProjectsConfig(
|
|
392
420
|
dir=projects_data.get("dir", "~/projects"),
|
|
@@ -462,9 +490,22 @@ def _dict_to_config(data: dict) -> Config:
|
|
|
462
490
|
health_endpoint=tts_service_data.get("health_endpoint", "/health"),
|
|
463
491
|
scheme=tts_service_data.get("scheme", "http"), # TTS defaults to HTTP
|
|
464
492
|
)
|
|
493
|
+
custom_services = []
|
|
494
|
+
for entry in services_data.get("custom", []) or []:
|
|
495
|
+
if isinstance(entry, str):
|
|
496
|
+
custom_services.append(CustomServiceConfig(name=entry))
|
|
497
|
+
elif isinstance(entry, dict) and entry.get("name"):
|
|
498
|
+
custom_services.append(CustomServiceConfig(
|
|
499
|
+
name=entry["name"],
|
|
500
|
+
project=entry.get("project"),
|
|
501
|
+
autostart=entry.get("autostart", True),
|
|
502
|
+
roles=entry.get("roles"),
|
|
503
|
+
type=entry.get("type"),
|
|
504
|
+
))
|
|
465
505
|
services = ServicesConfig(
|
|
466
506
|
portal=portal_service,
|
|
467
507
|
tts=tts_service,
|
|
508
|
+
custom=custom_services,
|
|
468
509
|
)
|
|
469
510
|
|
|
470
511
|
# Channel configs (registry-driven)
|
|
@@ -485,6 +526,7 @@ def _dict_to_config(data: dict) -> Config:
|
|
|
485
526
|
# Scheduler
|
|
486
527
|
scheduler_data = data.get("scheduler", {})
|
|
487
528
|
scheduler = SchedulerConfig(
|
|
529
|
+
autostart=scheduler_data.get("autostart", True),
|
|
488
530
|
board_file=scheduler_data.get("board_file", "~/.agentwire/scheduler.yaml"),
|
|
489
531
|
events_file=scheduler_data.get("events_file", "~/.agentwire/scheduler-events.jsonl"),
|
|
490
532
|
live_state_file=scheduler_data.get("live_state_file", "~/.agentwire/scheduler-live.json"),
|
|
@@ -2726,6 +2726,22 @@ def desktop_minimize_all() -> str:
|
|
|
2726
2726
|
return f"Failed to minimize windows: {data.get('error', 'Unknown error')}"
|
|
2727
2727
|
|
|
2728
2728
|
|
|
2729
|
+
@mcp.tool()
|
|
2730
|
+
def desktop_collage() -> str:
|
|
2731
|
+
"""Toggle the window collage in the portal desktop.
|
|
2732
|
+
|
|
2733
|
+
Lays every open window into a grid so they can all be seen at once;
|
|
2734
|
+
toggling again (or the user clicking a tile / pressing Esc) exits the overlay.
|
|
2735
|
+
|
|
2736
|
+
Returns:
|
|
2737
|
+
Success message or error description.
|
|
2738
|
+
"""
|
|
2739
|
+
data = _portal_request("POST", "/api/desktop/collage")
|
|
2740
|
+
if data.get("success"):
|
|
2741
|
+
return "Collage toggled."
|
|
2742
|
+
return f"Failed to toggle Collage: {data.get('error', 'Unknown error')}"
|
|
2743
|
+
|
|
2744
|
+
|
|
2729
2745
|
@mcp.tool()
|
|
2730
2746
|
def desktop_layout(windows: list[dict]) -> str:
|
|
2731
2747
|
"""Apply a multi-window layout to the portal desktop.
|