agentwire-dev 1.57.0__tar.gz → 1.59.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.57.0 → agentwire_dev-1.59.0}/.agentwire.yml.example +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.gitignore +2 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/PKG-INFO +6 -6
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/README.md +5 -5
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/__main__.py +4 -5
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/config.py +3 -3
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/config_cli.py +0 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/core.py +102 -187
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/cli.py +9 -9
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/state.py +3 -3
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/doctor_cli.py +60 -24
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/parser.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/schema.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff_cli.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/history_cli.py +19 -29
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_core.py +2 -2
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_pane.py +4 -4
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_server.py +0 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_session.py +26 -13
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_voice.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/onboarding.py +3 -3
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/pane_cli.py +31 -33
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/project_config.py +28 -123
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/projects.py +4 -4
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/agentwire.md +8 -4
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/contributor.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/orchestrator.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles_cli.py +4 -4
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/permission.py +12 -57
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/projects.py +5 -8
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/sessions_admin.py +12 -19
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/dispatch.py +11 -11
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/models.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/state.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/security.py +2 -2
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/server.py +4 -40
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/services.py +3 -3
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/session_cli.py +72 -138
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/css/desktop.css +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/command-palette.js +5 -16
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/dead-key-suppressor.js +0 -5
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/desktop.js +5 -17
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/shortcuts.js +2 -2
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/sessions-section.js +2 -2
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar.js +17 -6
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/system_cli.py +4 -7
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tasks_cli.py +88 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts_cli.py +17 -72
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/INDEX.md +2 -4
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/architecture.md +5 -5
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/concepts.md +2 -2
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/council.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/glossary.md +2 -6
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/damage-control.md +0 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/portal.md +3 -3
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/troubleshooting.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/window-collage.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/quickstart.md +5 -5
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/scheduling/scheduled-workloads.md +13 -11
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/damage-control-hardening.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/secrets.md +0 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/services.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/claude-code-auto-mode.md +13 -13
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/shim-contract.md +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/conftest.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/fixtures/sample_agentwire.yml +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_worktree_cmd.py +3 -3
- agentwire_dev-1.59.0/tests/unit/test_build_agent_command.py +163 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_cli_commands.py +12 -13
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_config_cli.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_control_plane_protection.py +4 -4
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_core_created_by_rooting.py +4 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_cli.py +2 -2
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_state.py +1 -1
- agentwire_dev-1.59.0/tests/unit/test_doctor_task_migration.py +79 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_mcp_server.py +3 -3
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_mcp_tools_args.py +31 -3
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_portal_api.py +7 -7
- agentwire_dev-1.59.0/tests/unit/test_posture_default.py +57 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_project_config.py +70 -119
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_scheduler.py +2 -2
- agentwire_dev-1.59.0/tests/unit/test_server_pure.py +50 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_services.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_task_cli.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tasks.py +1 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tasks_cli.py +81 -1
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_usage_limit.py +1 -1
- agentwire_dev-1.57.0/agentwire/mcp_voiceclone.py +0 -81
- agentwire_dev-1.57.0/agentwire/voiceclone.py +0 -354
- agentwire_dev-1.57.0/docs/wiki/sessions/pi.md +0 -288
- agentwire_dev-1.57.0/tests/unit/test_build_agent_command.py +0 -392
- agentwire_dev-1.57.0/tests/unit/test_posture_default.py +0 -71
- agentwire_dev-1.57.0/tests/unit/test_server_pure.py +0 -115
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.claude/commands/handoff.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.claude/skills/wiki/SKILL.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/pytest.yml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/ruff.yml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/security.yml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/tts-smoke.yml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/AGENTS.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/Dockerfile.local +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/LICENSE +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/RELEASING.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/SECURITY.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/SPONSORS.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/push.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/chrome_tabs.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/completion.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/inbox.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/minutes.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/view.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/devices.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/diff_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/doctor_voice.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/ensure_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/fetch.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/git_state.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/instructions.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/renderer.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/history.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/agentwire-permission.sh +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/mcp-tool-damage-control.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/read-tool-damage-control.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/control-plane.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/outbound.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/publish.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/idle-handler.sh +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/queue-processor.sh +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/inbox.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/limits_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/listen.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/locking.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/machine_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_channels.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_chrome.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_council.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_desktop.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_handoff.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_history.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_listen.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_lock.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_machine.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_msg.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_notify.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_projects.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_scheduler.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_scratchpad.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_services.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_status.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_task.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_tunnels.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_wiki.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_worktree.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/msg_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/network.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/notify_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/palette_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/portal_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/prompt_router.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/prompts_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/push_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/push_store.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/repo_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/research.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/anchor.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/correspondent.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-brain.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-conscience.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-critic.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-devils-advocate.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-gut.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-historian.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-member.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-orchestrator.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/init.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/notifications.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/soul.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/voice.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/worker-worktree.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/worker.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/artifacts.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/config.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/council.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/desktop.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/history.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/machines.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/notify.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/palette.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/push.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/safety.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/scheduler.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/scratchpad.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/sessions.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/voice.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety/_core.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety_commands.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/gates.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/loop.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/report.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/schedule.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scratchpad.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/send_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/session_context.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/session_ready.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/ssh.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/announcements.json +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/apple-touch-icon.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/css/mobile.css +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/favicon-32.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/favicon-64.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/bear.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/cat.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/crown.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/deer.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/drone.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/eagle.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/fox.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/hawk.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/horse.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/lion.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/rabbit.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/robot.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/tiger.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/wolf.webp +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/img/icon-192.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/img/icon-512.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/announcement-modal.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/api.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/artifact-window.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/collage.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/council-window.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/desktop-manager.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/help-modal.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/icon-manager.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/mobile.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/notification-prefs.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/notifications-panel.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/ptt.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/push-client.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/review-window.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/safety-shared.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/safety-window.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/scratchpad.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/service-classification.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/session-id.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/session-window.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/config-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/council-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/tile-manager.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/toast.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/token-modal.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/utils/ansi.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/utils/swipe.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/autosend-prefs.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/browser-stt.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/browser-tts.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/jargon.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/prompt.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/manifest.webmanifest +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/service-worker.js +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/base.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/cloud.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/engine.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/local.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/server_backend.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/stt_server.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tabs_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tasks.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/council/minutes.html.j2 +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/desktop.html +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/mobile.html +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/pair.html +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/tmux.conf +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templating.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/gws.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/audio.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/base.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/kokoro_server.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/local.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts_server.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tunnels_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/usage_limit.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/event_log.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/speech.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/validation.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/voice_status.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/wiki.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/wiki_audit.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/wiki_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/worktree.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/worktree_registry.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/decisions/obsidian-second-brain.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/logo.png +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/briefing-mode.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/communication/channels.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/communication/hammerspoon.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/communication/handoff.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/deployment/remote-access.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/deployment/remote-machines.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/parallel-refactor.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/shell-escaping.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/pip-audit.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/remote-access-hardening.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/messaging.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/prompt-routing.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/window-sizing.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/worktree-sessions.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/usage-limit-recovery.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/stt-cloud.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/tts-self-hosted.md +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/pyproject.toml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_council_portal.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_scheduler_board.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_send_verified_tmux.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_server_websockets.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_announcements.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_channels.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_chrome_tabs.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_cli_output.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_cli_smoke.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_config.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_inbox.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_minutes.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_view.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_damage_control_bypass.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_damage_control_hooks.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_damage_control_sync.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_dangling_worktrees.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_devices.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_diff_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_doctor_voice.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_event_log.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_file_io.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_git_state.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_instructions.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_parser.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_renderer.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_hooks_install.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_idle_handler.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_idle_nag.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_inbox.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_init_command.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_install_parity.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_limits_tick_isolation.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_msg_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_notify_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_onboarding_reinit.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_palette_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_pip_environment.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_prompt_router.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_push.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_rebuild_guard.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_repo_cli.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_roles.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_routes_snapshot.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_commands.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_disabled_rules.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_escape_hatch.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_heal.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_kill_switch.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_scheduler_parsing.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_scratchpad.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_security.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_server_async.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_session_context.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_session_ready.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_shared_dir_guard.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_skill_install.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_speech_tags.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_ssh.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_stt_backend.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_stt_cloud.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_stt_engine.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_templating.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_terminal_resize.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tmux_template.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tts_engine_resolution.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tts_local.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tunnels_probe.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_unattended_env_isolation.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_validation.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_voice_status.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_wiki.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_wiki_audit.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_window_cycling_binding.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree_branch_cleanup.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree_layout.py +0 -0
- {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree_registry.py +0 -0
|
@@ -9,6 +9,6 @@
|
|
|
9
9
|
# template (a live `.agentwire.yml` is resolved before the `.example` fallback).
|
|
10
10
|
# The repo owner uses this to layer an untracked owner-override role:
|
|
11
11
|
# roles: [contributor, owner-override]
|
|
12
|
-
|
|
12
|
+
posture: bypass
|
|
13
13
|
roles:
|
|
14
14
|
- contributor
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentwire-dev
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.59.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
|
|
@@ -356,7 +356,7 @@ agentwire new -s hello -p ~/projects/hello
|
|
|
356
356
|
|
|
357
357
|
> **Optional:** clone this repo (`git clone https://github.com/dotdevdotdev/agentwire-dev ~/projects/agentwire-dev`) and `agentwire dev` opens a guided helper session inside it — setup walkthrough, project wiring, issue filing, forking. It requires the source checkout; everything above works without one.
|
|
358
358
|
|
|
359
|
-
**Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture
|
|
359
|
+
**Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture — browser voice input works without it).
|
|
360
360
|
|
|
361
361
|
**Honest setup time:** under a minute to a working voice portal with a genuinely good voice — Kokoro-82M runs on CPU out of the box (one-time ~200 MB model download in the background; the browser voice covers the wait). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
|
|
362
362
|
|
|
@@ -382,7 +382,7 @@ Origin checks reject cross-site browser requests on every bind. Keep the portal
|
|
|
382
382
|
|
|
383
383
|
**macOS:**
|
|
384
384
|
```bash
|
|
385
|
-
brew install tmux uv # ffmpeg optional: only for host-mic PTT
|
|
385
|
+
brew install tmux uv # ffmpeg optional: only for host-mic PTT
|
|
386
386
|
uv tool install agentwire-dev
|
|
387
387
|
```
|
|
388
388
|
|
|
@@ -390,7 +390,7 @@ uv tool install agentwire-dev
|
|
|
390
390
|
|
|
391
391
|
**Ubuntu/Debian:**
|
|
392
392
|
```bash
|
|
393
|
-
sudo apt install tmux # ffmpeg optional: only for host-mic PTT
|
|
393
|
+
sudo apt install tmux # ffmpeg optional: only for host-mic PTT
|
|
394
394
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
395
395
|
uv tool install agentwire-dev
|
|
396
396
|
```
|
|
@@ -451,7 +451,7 @@ AgentWire supports orchestrator/worker patterns for complex tasks:
|
|
|
451
451
|
```yaml
|
|
452
452
|
# .agentwire.yml in your project (keep it gitignored — it's personal config,
|
|
453
453
|
# and tracked copies break worktree dispatch; agentwire adds it to .gitignore for you)
|
|
454
|
-
|
|
454
|
+
posture: bypass
|
|
455
455
|
roles:
|
|
456
456
|
- agentwire
|
|
457
457
|
- voice
|
|
@@ -556,7 +556,7 @@ agentwire kill --pane 1 # Kill worker
|
|
|
556
556
|
agentwire say "Hello" # TTS (auto-routes to browser)
|
|
557
557
|
agentwire send -s NAME "Done" # Inject text into a session
|
|
558
558
|
agentwire listen start/stop # Voice recording
|
|
559
|
-
agentwire
|
|
559
|
+
agentwire tts voices # List available voices
|
|
560
560
|
```
|
|
561
561
|
|
|
562
562
|
</details>
|
|
@@ -89,7 +89,7 @@ agentwire new -s hello -p ~/projects/hello
|
|
|
89
89
|
|
|
90
90
|
> **Optional:** clone this repo (`git clone https://github.com/dotdevdotdev/agentwire-dev ~/projects/agentwire-dev`) and `agentwire dev` opens a guided helper session inside it — setup walkthrough, project wiring, issue filing, forking. It requires the source checkout; everything above works without one.
|
|
91
91
|
|
|
92
|
-
**Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture
|
|
92
|
+
**Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture — browser voice input works without it).
|
|
93
93
|
|
|
94
94
|
**Honest setup time:** under a minute to a working voice portal with a genuinely good voice — Kokoro-82M runs on CPU out of the box (one-time ~200 MB model download in the background; the browser voice covers the wait). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
|
|
95
95
|
|
|
@@ -115,7 +115,7 @@ Origin checks reject cross-site browser requests on every bind. Keep the portal
|
|
|
115
115
|
|
|
116
116
|
**macOS:**
|
|
117
117
|
```bash
|
|
118
|
-
brew install tmux uv # ffmpeg optional: only for host-mic PTT
|
|
118
|
+
brew install tmux uv # ffmpeg optional: only for host-mic PTT
|
|
119
119
|
uv tool install agentwire-dev
|
|
120
120
|
```
|
|
121
121
|
|
|
@@ -123,7 +123,7 @@ uv tool install agentwire-dev
|
|
|
123
123
|
|
|
124
124
|
**Ubuntu/Debian:**
|
|
125
125
|
```bash
|
|
126
|
-
sudo apt install tmux # ffmpeg optional: only for host-mic PTT
|
|
126
|
+
sudo apt install tmux # ffmpeg optional: only for host-mic PTT
|
|
127
127
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
128
128
|
uv tool install agentwire-dev
|
|
129
129
|
```
|
|
@@ -184,7 +184,7 @@ AgentWire supports orchestrator/worker patterns for complex tasks:
|
|
|
184
184
|
```yaml
|
|
185
185
|
# .agentwire.yml in your project (keep it gitignored — it's personal config,
|
|
186
186
|
# and tracked copies break worktree dispatch; agentwire adds it to .gitignore for you)
|
|
187
|
-
|
|
187
|
+
posture: bypass
|
|
188
188
|
roles:
|
|
189
189
|
- agentwire
|
|
190
190
|
- voice
|
|
@@ -289,7 +289,7 @@ agentwire kill --pane 1 # Kill worker
|
|
|
289
289
|
agentwire say "Hello" # TTS (auto-routes to browser)
|
|
290
290
|
agentwire send -s NAME "Done" # Inject text into a session
|
|
291
291
|
agentwire listen start/stop # Voice recording
|
|
292
|
-
agentwire
|
|
292
|
+
agentwire tts voices # List available voices
|
|
293
293
|
```
|
|
294
294
|
|
|
295
295
|
</details>
|
|
@@ -17,7 +17,7 @@ from .core import ( # noqa: E402,F401 # E402: must follow load_dotenv(); F401:
|
|
|
17
17
|
_UNATTENDED_ENV_KEYS,
|
|
18
18
|
CONFIG_DIR,
|
|
19
19
|
AgentCommand,
|
|
20
|
-
|
|
20
|
+
_add_posture_flag,
|
|
21
21
|
_build_tmux_env_flags,
|
|
22
22
|
_build_tmux_env_flags_shell,
|
|
23
23
|
_check_portal_health,
|
|
@@ -38,7 +38,7 @@ from .core import ( # noqa: E402,F401 # E402: must follow load_dotenv(); F401:
|
|
|
38
38
|
_portal_auth_headers,
|
|
39
39
|
_post_desktop_notification,
|
|
40
40
|
_record_session_creator,
|
|
41
|
-
|
|
41
|
+
_resolve_posture_from_args,
|
|
42
42
|
_run_remote,
|
|
43
43
|
_set_session_name_env,
|
|
44
44
|
_start_portal_local,
|
|
@@ -118,7 +118,6 @@ Command Categories:
|
|
|
118
118
|
|
|
119
119
|
Voice:
|
|
120
120
|
listen Voice input recording
|
|
121
|
-
voiceclone Record and upload voice clones
|
|
122
121
|
tts Manage TTS server
|
|
123
122
|
stt Manage STT server
|
|
124
123
|
|
|
@@ -257,7 +256,7 @@ Command Categories:
|
|
|
257
256
|
c_start.add_argument(
|
|
258
257
|
"--roster", help="Comma-separated lens names (default: full bundled roster)"
|
|
259
258
|
)
|
|
260
|
-
c_start.add_argument("--
|
|
259
|
+
c_start.add_argument("--posture", help="Permission mode for council sessions (default: bypass)")
|
|
261
260
|
c_start.add_argument("--model", help="Model override for all council sessions")
|
|
262
261
|
c_start.add_argument(
|
|
263
262
|
"--force", action="store_true", help="Tear down a live sitting first"
|
|
@@ -391,7 +390,7 @@ def _find_subparser(parser: argparse.ArgumentParser, *names: str):
|
|
|
391
390
|
_GROUP_COMMANDS = [
|
|
392
391
|
"portal", "tts", "stt", "tunnels", "machine", "history", "handoff",
|
|
393
392
|
"wiki", "hooks", "projects", "safety", "network", "listen",
|
|
394
|
-
"
|
|
393
|
+
"roles", "task", "lock", "scheduler", "council", "limits",
|
|
395
394
|
"config",
|
|
396
395
|
]
|
|
397
396
|
|
|
@@ -357,7 +357,7 @@ class CustomServiceConfig:
|
|
|
357
357
|
Custom services show up in the portal's Services column, are booted by
|
|
358
358
|
`agentwire up` AND on portal launch, and are watched by the portal's
|
|
359
359
|
service watchdog. A service is just an agentwire session created in a
|
|
360
|
-
project directory; `roles`/`
|
|
360
|
+
project directory; `roles`/`posture` override the project's .agentwire.yml
|
|
361
361
|
when set.
|
|
362
362
|
|
|
363
363
|
restart: never | on-failure | always — what the watchdog does when the
|
|
@@ -369,7 +369,7 @@ class CustomServiceConfig:
|
|
|
369
369
|
project: Optional[str] = None
|
|
370
370
|
autostart: bool = True
|
|
371
371
|
roles: Optional[str] = None # comma-separated; overrides project .agentwire.yml
|
|
372
|
-
|
|
372
|
+
posture: Optional[str] = None # posture override (e.g. bypass, auto)
|
|
373
373
|
restart: str = "on-failure" # never | on-failure | always
|
|
374
374
|
healthcheck: HealthcheckConfig = field(default_factory=HealthcheckConfig)
|
|
375
375
|
# Context auto-management policy (issue #442): clear | compact | none.
|
|
@@ -739,7 +739,7 @@ def _dict_to_config(data: dict) -> Config:
|
|
|
739
739
|
project=entry.get("project"),
|
|
740
740
|
autostart=entry.get("autostart", True),
|
|
741
741
|
roles=entry.get("roles"),
|
|
742
|
-
|
|
742
|
+
posture=entry.get("posture"),
|
|
743
743
|
restart=entry.get("restart", "on-failure"),
|
|
744
744
|
healthcheck=healthcheck,
|
|
745
745
|
context_policy=context_policy,
|
|
@@ -20,12 +20,11 @@ from dataclasses import dataclass, field
|
|
|
20
20
|
from pathlib import Path
|
|
21
21
|
|
|
22
22
|
from .project_config import (
|
|
23
|
-
|
|
23
|
+
BARE,
|
|
24
|
+
DEFAULT_POSTURE,
|
|
24
25
|
POSTURES,
|
|
25
|
-
compose_session_type,
|
|
26
|
-
detect_default_agent_type,
|
|
27
26
|
get_parent_from_config,
|
|
28
|
-
|
|
27
|
+
resolve_posture,
|
|
29
28
|
)
|
|
30
29
|
from .roles import RoleConfig, merge_roles
|
|
31
30
|
from .worktree import git_common_dir, parse_session_name
|
|
@@ -204,147 +203,70 @@ def parse_env_args(env_args: list[str] | None) -> dict[str, str]:
|
|
|
204
203
|
return result
|
|
205
204
|
|
|
206
205
|
|
|
207
|
-
def build_agent_command(
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
def build_agent_command(
|
|
207
|
+
posture: str,
|
|
208
|
+
roles: list[RoleConfig] | None = None,
|
|
209
|
+
model: str | None = None,
|
|
210
|
+
resume_session_id: str | None = None,
|
|
211
|
+
) -> AgentCommand:
|
|
212
|
+
"""Build the shell command + injected env for the given posture.
|
|
213
|
+
|
|
214
|
+
The ONE flag-builder (#729): fresh sessions AND history resume both route
|
|
215
|
+
through here, so a posture always launches with the same flags — no
|
|
216
|
+
create-vs-resume drift. Posture switches the permission-mode flags; ``bare``
|
|
217
|
+
is the no-agent sentinel (empty command); ``resume_session_id`` prepends the
|
|
218
|
+
``--resume/--fork-session`` pair right after ``claude`` so the resumed
|
|
219
|
+
process still gets its posture's grants (incl. auto's tool-allows).
|
|
220
|
+
"""
|
|
221
|
+
if posture == BARE:
|
|
210
222
|
return AgentCommand(command="")
|
|
211
223
|
|
|
212
224
|
merged = merge_roles(roles) if roles else None
|
|
213
225
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
)
|
|
240
|
-
|
|
241
|
-
if
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
parts = [pi_binary, "--provider", provider]
|
|
260
|
-
resolved_model = model or default_model
|
|
261
|
-
if resolved_model:
|
|
262
|
-
parts.extend(["--model", resolved_model])
|
|
263
|
-
|
|
264
|
-
# Permission variants (pi has no permission system to bypass; variants
|
|
265
|
-
# translate to pi's --tools whitelist instead)
|
|
266
|
-
temp_file = None
|
|
267
|
-
if variant == "restricted":
|
|
268
|
-
parts.extend(["--tools", "read,grep,find,bash"])
|
|
269
|
-
elif variant == "readonly":
|
|
270
|
-
parts.extend(["--tools", "read,grep,find"])
|
|
271
|
-
elif merged and merged.tools:
|
|
272
|
-
# Translate Claude tool names to pi's lowercase tool names.
|
|
273
|
-
# Pi only supports: read, bash, edit, write, grep, find, ls
|
|
274
|
-
pi_valid = {"read", "bash", "edit", "write", "grep", "find", "ls"}
|
|
275
|
-
pi_tools = [t.lower() for t in merged.tools if t.lower() in pi_valid]
|
|
276
|
-
if pi_tools:
|
|
277
|
-
parts.extend(["--tools", ",".join(pi_tools)])
|
|
278
|
-
|
|
279
|
-
# System prompt: combine global pi.system_prompt + role instructions.
|
|
280
|
-
# Skipped for restricted/readonly — those are curated contexts.
|
|
281
|
-
if variant not in ("restricted", "readonly"):
|
|
282
|
-
global_prompt = pi_config.get("system_prompt", "")
|
|
283
|
-
role_prompt = merged.instructions if merged and merged.instructions else ""
|
|
284
|
-
combined = "\n\n".join(filter(None, [global_prompt, role_prompt]))
|
|
285
|
-
if combined:
|
|
286
|
-
f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
|
|
287
|
-
f.write(combined)
|
|
288
|
-
f.close()
|
|
289
|
-
temp_file = f.name
|
|
290
|
-
parts.append(f'--append-system-prompt "$(<{temp_file})"')
|
|
291
|
-
|
|
292
|
-
return AgentCommand(
|
|
293
|
-
command=" ".join(parts),
|
|
294
|
-
temp_file=temp_file,
|
|
295
|
-
env=env,
|
|
296
|
-
)
|
|
297
|
-
|
|
298
|
-
# === Claude Code ===
|
|
299
|
-
if session_type.startswith("claude"):
|
|
300
|
-
parts = ["claude"]
|
|
301
|
-
|
|
302
|
-
# Permission flags
|
|
303
|
-
if session_type == "claude-bypass":
|
|
304
|
-
parts.append("--dangerously-skip-permissions")
|
|
305
|
-
elif session_type == "claude-auto":
|
|
306
|
-
parts.extend(["--enable-auto-mode", "--permission-mode", "auto"])
|
|
307
|
-
# Inject core allows that bypass the classifier entirely (zero token cost)
|
|
308
|
-
core_allows = [
|
|
309
|
-
"Bash(agentwire *)", "Bash(tmux *)", "Bash(git *)",
|
|
310
|
-
"Bash(gh pr create*)", "Bash(gh pr view*)",
|
|
311
|
-
"Read(*)", "Edit(*)", "Write(*)", "Glob(*)", "Grep(*)",
|
|
312
|
-
]
|
|
313
|
-
parts.extend(["--allowedTools", shlex.quote(",".join(core_allows))])
|
|
314
|
-
elif session_type == "claude-restricted":
|
|
315
|
-
parts.append("--tools Bash")
|
|
316
|
-
# claude-prompted has no special flags
|
|
317
|
-
|
|
318
|
-
# Model override
|
|
319
|
-
if model:
|
|
320
|
-
parts.append(f"--model {model}")
|
|
321
|
-
|
|
322
|
-
# Role-based flags (not for restricted mode)
|
|
323
|
-
temp_file = None
|
|
324
|
-
if merged and session_type != "claude-restricted":
|
|
325
|
-
if merged.tools:
|
|
326
|
-
parts.append(f"--tools {','.join(merged.tools)}")
|
|
327
|
-
|
|
328
|
-
if merged.disallowed_tools:
|
|
329
|
-
parts.append(f"--disallowedTools {','.join(merged.disallowed_tools)}")
|
|
330
|
-
|
|
331
|
-
if merged.instructions:
|
|
332
|
-
# Write to temp file to avoid shell escaping issues
|
|
333
|
-
# See docs/wiki/internals/shell-escaping.md for details
|
|
334
|
-
# MUST be last flag — multiline content can break subsequent args
|
|
335
|
-
f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
|
|
336
|
-
f.write(merged.instructions)
|
|
337
|
-
f.close()
|
|
338
|
-
temp_file = f.name
|
|
339
|
-
parts.append(f'--append-system-prompt "$(<{temp_file})"')
|
|
340
|
-
|
|
341
|
-
return AgentCommand(
|
|
342
|
-
command=" ".join(parts),
|
|
343
|
-
temp_file=temp_file,
|
|
344
|
-
)
|
|
345
|
-
|
|
346
|
-
# Unknown session type - return empty
|
|
347
|
-
return AgentCommand(command="")
|
|
226
|
+
parts = ["claude"]
|
|
227
|
+
if resume_session_id:
|
|
228
|
+
parts.extend(["--resume", resume_session_id, "--fork-session"])
|
|
229
|
+
|
|
230
|
+
# Permission-mode flags (one per posture; prompted adds none — hooks gate it)
|
|
231
|
+
if posture == "bypass":
|
|
232
|
+
parts.append("--dangerously-skip-permissions")
|
|
233
|
+
elif posture == "auto":
|
|
234
|
+
parts.extend(["--enable-auto-mode", "--permission-mode", "auto"])
|
|
235
|
+
# Inject core allows that bypass the classifier entirely (zero token cost)
|
|
236
|
+
core_allows = [
|
|
237
|
+
"Bash(agentwire *)", "Bash(tmux *)", "Bash(git *)",
|
|
238
|
+
"Bash(gh pr create*)", "Bash(gh pr view*)",
|
|
239
|
+
"Read(*)", "Edit(*)", "Write(*)", "Glob(*)", "Grep(*)",
|
|
240
|
+
]
|
|
241
|
+
parts.extend(["--allowedTools", shlex.quote(",".join(core_allows))])
|
|
242
|
+
|
|
243
|
+
# Model override
|
|
244
|
+
if model:
|
|
245
|
+
parts.append(f"--model {model}")
|
|
246
|
+
|
|
247
|
+
# Role-based flags (merged roles always apply — no tool-locking posture left)
|
|
248
|
+
temp_file = None
|
|
249
|
+
if merged:
|
|
250
|
+
if merged.tools:
|
|
251
|
+
parts.append(f"--tools {','.join(merged.tools)}")
|
|
252
|
+
|
|
253
|
+
if merged.disallowed_tools:
|
|
254
|
+
parts.append(f"--disallowedTools {','.join(merged.disallowed_tools)}")
|
|
255
|
+
|
|
256
|
+
if merged.instructions:
|
|
257
|
+
# Write to temp file to avoid shell escaping issues
|
|
258
|
+
# See docs/wiki/internals/shell-escaping.md for details
|
|
259
|
+
# MUST be last flag — multiline content can break subsequent args
|
|
260
|
+
f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
|
|
261
|
+
f.write(merged.instructions)
|
|
262
|
+
f.close()
|
|
263
|
+
temp_file = f.name
|
|
264
|
+
parts.append(f'--append-system-prompt "$(<{temp_file})"')
|
|
265
|
+
|
|
266
|
+
return AgentCommand(
|
|
267
|
+
command=" ".join(parts),
|
|
268
|
+
temp_file=temp_file,
|
|
269
|
+
)
|
|
348
270
|
|
|
349
271
|
|
|
350
272
|
def check_python_version() -> bool:
|
|
@@ -1184,65 +1106,58 @@ def _post_desktop_notification(text: str, session: str | None = None, priority:
|
|
|
1184
1106
|
return False
|
|
1185
1107
|
|
|
1186
1108
|
|
|
1187
|
-
def
|
|
1188
|
-
"""
|
|
1189
|
-
isolated on its own worktree — a pane (agentwire spawn) or a worker on
|
|
1190
|
-
plain main topology, both sharing a live checkout someone else may be
|
|
1191
|
-
watching, stay restricted. Orchestrators (main or worktree topology) and
|
|
1192
|
-
worktree-topology workers get full autonomous access — nothing to step
|
|
1193
|
-
on but their own isolated branch.
|
|
1194
|
-
"""
|
|
1195
|
-
if kind == "worker" and not worktree_topology:
|
|
1196
|
-
return "restricted"
|
|
1197
|
-
return "bypass"
|
|
1198
|
-
|
|
1109
|
+
def _resolve_posture_from_args(args) -> tuple[str | None, str | None]:
|
|
1110
|
+
"""Resolve the session's posture from the shared spawn-flag core.
|
|
1199
1111
|
|
|
1200
|
-
|
|
1201
|
-
|
|
1112
|
+
Posture is the ONLY session axis (#729), and every spawn defaults to the
|
|
1113
|
+
same one — bypass — regardless of kind/topology: workers run bypass +
|
|
1114
|
+
damage-control just like orchestrators, no tool-locking. Precedence:
|
|
1115
|
+
explicit --posture first; else the internal --bare/--prompted booleans
|
|
1116
|
+
(set by cmd_worktree / cmd_recreate callers); else the default posture.
|
|
1202
1117
|
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
are accepted on input but never the primary surface.
|
|
1206
|
-
|
|
1207
|
-
Precedence: explicit --posture/--harness compose first; else legacy
|
|
1208
|
-
--type; else legacy booleans; else the kind's default posture × claude.
|
|
1209
|
-
|
|
1210
|
-
Returns ``(session_type, error)`` — error is a message string when an
|
|
1211
|
-
invalid posture was given, session_type is None in that case.
|
|
1118
|
+
Returns ``(posture, error)`` — error is a message string when an invalid
|
|
1119
|
+
posture was given, posture is None in that case.
|
|
1212
1120
|
"""
|
|
1213
1121
|
posture = getattr(args, 'posture', None)
|
|
1214
|
-
|
|
1215
|
-
type_arg = getattr(args, 'type', None)
|
|
1216
|
-
default_posture = _default_posture(kind, worktree_topology)
|
|
1217
|
-
|
|
1218
|
-
if posture or harness:
|
|
1122
|
+
if posture:
|
|
1219
1123
|
try:
|
|
1220
|
-
return
|
|
1124
|
+
return resolve_posture(posture), None
|
|
1221
1125
|
except ValueError as e:
|
|
1222
1126
|
return None, str(e)
|
|
1223
|
-
if type_arg:
|
|
1224
|
-
return normalize_session_type(type_arg, detect_default_agent_type()), None
|
|
1225
|
-
# Internal legacy booleans (set by cmd_worktree / cmd_recreate callers).
|
|
1226
1127
|
if getattr(args, 'bare', False):
|
|
1227
|
-
return
|
|
1228
|
-
if getattr(args, 'restricted', False):
|
|
1229
|
-
return f"{detect_default_agent_type()}-restricted", None
|
|
1128
|
+
return BARE, None
|
|
1230
1129
|
if getattr(args, 'prompted', False):
|
|
1231
|
-
return
|
|
1232
|
-
return
|
|
1130
|
+
return "prompted", None
|
|
1131
|
+
return DEFAULT_POSTURE, None
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
def _resolve_posture_or_config(args, project_config, default: str = DEFAULT_POSTURE) -> tuple[str | None, str | None]:
|
|
1135
|
+
"""Posture for recreate/fork: explicit --posture wins, else the source
|
|
1136
|
+
config's posture, else *default*. Returns ``(posture, error)``."""
|
|
1137
|
+
posture = getattr(args, 'posture', None)
|
|
1138
|
+
if posture:
|
|
1139
|
+
try:
|
|
1140
|
+
return resolve_posture(posture), None
|
|
1141
|
+
except ValueError as e:
|
|
1142
|
+
return None, str(e)
|
|
1143
|
+
cfg_posture = getattr(project_config, 'posture', None) if project_config else None
|
|
1144
|
+
if cfg_posture:
|
|
1145
|
+
try:
|
|
1146
|
+
return resolve_posture(cfg_posture), None
|
|
1147
|
+
except ValueError:
|
|
1148
|
+
return default, None
|
|
1149
|
+
return default, None
|
|
1233
1150
|
|
|
1234
1151
|
|
|
1235
|
-
def
|
|
1236
|
-
"""Register the
|
|
1152
|
+
def _add_posture_flag(parser) -> None:
|
|
1153
|
+
"""Register the canonical posture axis on a spawn-verb parser (#729).
|
|
1237
1154
|
|
|
1238
|
-
|
|
1239
|
-
|
|
1155
|
+
Accepts ``bare`` too (the no-agent sentinel) so a bare session can be
|
|
1156
|
+
re-specified on recreate/fork through the one axis flag.
|
|
1240
1157
|
"""
|
|
1241
|
-
parser.add_argument("--posture", choices=
|
|
1242
|
-
help="
|
|
1243
|
-
"(
|
|
1244
|
-
parser.add_argument("--harness",
|
|
1245
|
-
help="Agent backend: claude (default), pi-<provider> (e.g. pi-zai, pi-deepseek), or bare")
|
|
1158
|
+
parser.add_argument("--posture", choices=[*POSTURES, BARE],
|
|
1159
|
+
help="Permission mode the agent runs under: bypass/prompted/auto "
|
|
1160
|
+
"(or bare for no agent). Default: bypass.")
|
|
1246
1161
|
|
|
1247
1162
|
|
|
1248
1163
|
def _git_behind_origin(repo: Path, base: str = "main", do_fetch: bool = True):
|
|
@@ -96,7 +96,7 @@ def list_live_sessions() -> set[str]:
|
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
def create_session(
|
|
99
|
-
name: str, roles: list[str],
|
|
99
|
+
name: str, roles: list[str], posture: str, model: str | None, cwd: str
|
|
100
100
|
) -> None:
|
|
101
101
|
"""Create one council session via ``agentwire new`` in the sitting's
|
|
102
102
|
workspace. Raises ``RuntimeError`` on failure.
|
|
@@ -106,7 +106,7 @@ def create_session(
|
|
|
106
106
|
"-s", name,
|
|
107
107
|
"-p", cwd,
|
|
108
108
|
"--roles", ",".join(roles),
|
|
109
|
-
"--
|
|
109
|
+
"--posture", posture,
|
|
110
110
|
"--allow-shared-dir",
|
|
111
111
|
"--json",
|
|
112
112
|
]
|
|
@@ -237,7 +237,7 @@ def resolve_name(args) -> tuple[str | None, str | None]:
|
|
|
237
237
|
# --- workspace ------------------------------------------------------------------
|
|
238
238
|
|
|
239
239
|
|
|
240
|
-
def _write_workspace(name: str,
|
|
240
|
+
def _write_workspace(name: str, posture: str) -> None:
|
|
241
241
|
"""Workspace dir the sitting's sessions run in.
|
|
242
242
|
|
|
243
243
|
``parent: agentwire-council-<name>`` routes any ``agentwire notify-parent`` from a
|
|
@@ -246,7 +246,7 @@ def _write_workspace(name: str, session_type: str) -> None:
|
|
|
246
246
|
ws = state.workspace_dir(name)
|
|
247
247
|
ws.mkdir(parents=True, exist_ok=True)
|
|
248
248
|
(ws / ".agentwire.yml").write_text(
|
|
249
|
-
f"
|
|
249
|
+
f"posture: {posture}\nparent: {state.orchestrator_for(name)}\n"
|
|
250
250
|
)
|
|
251
251
|
|
|
252
252
|
|
|
@@ -288,9 +288,9 @@ def cmd_council_start(args) -> int:
|
|
|
288
288
|
kill_session(s)
|
|
289
289
|
state.clear_sitting(name)
|
|
290
290
|
|
|
291
|
-
|
|
291
|
+
posture = getattr(args, "posture", None) or "bypass"
|
|
292
292
|
model = getattr(args, "model", None)
|
|
293
|
-
_write_workspace(name,
|
|
293
|
+
_write_workspace(name, posture)
|
|
294
294
|
workspace = str(state.workspace_dir(name))
|
|
295
295
|
|
|
296
296
|
# Advisory: name the live sittings when seating beyond the first.
|
|
@@ -304,7 +304,7 @@ def cmd_council_start(args) -> int:
|
|
|
304
304
|
failed: list[dict] = []
|
|
305
305
|
|
|
306
306
|
try:
|
|
307
|
-
create_session(orchestrator, ["council-orchestrator"],
|
|
307
|
+
create_session(orchestrator, ["council-orchestrator"], posture, model, workspace)
|
|
308
308
|
except RuntimeError as e:
|
|
309
309
|
return _emit_error(args, f"failed to start orchestrator: {e}")
|
|
310
310
|
|
|
@@ -312,7 +312,7 @@ def cmd_council_start(args) -> int:
|
|
|
312
312
|
session = state.session_for(name, lens)
|
|
313
313
|
try:
|
|
314
314
|
create_session(
|
|
315
|
-
session, ["council-member", f"council-{lens}"],
|
|
315
|
+
session, ["council-member", f"council-{lens}"], posture, model, workspace
|
|
316
316
|
)
|
|
317
317
|
sessions[lens] = session
|
|
318
318
|
except RuntimeError as e:
|
|
@@ -330,7 +330,7 @@ def cmd_council_start(args) -> int:
|
|
|
330
330
|
sessions=sessions,
|
|
331
331
|
started_at=state.now_iso(),
|
|
332
332
|
cwd=workspace,
|
|
333
|
-
|
|
333
|
+
posture=posture,
|
|
334
334
|
),
|
|
335
335
|
)
|
|
336
336
|
|
|
@@ -135,7 +135,7 @@ class Sitting:
|
|
|
135
135
|
started_at: str
|
|
136
136
|
cwd: str = "" # dir the sitting was started from (for `council list`)
|
|
137
137
|
next_prompt_id: int = 1
|
|
138
|
-
|
|
138
|
+
posture: str = "bypass"
|
|
139
139
|
|
|
140
140
|
def to_dict(self) -> dict:
|
|
141
141
|
return {
|
|
@@ -145,7 +145,7 @@ class Sitting:
|
|
|
145
145
|
"started_at": self.started_at,
|
|
146
146
|
"cwd": self.cwd,
|
|
147
147
|
"next_prompt_id": self.next_prompt_id,
|
|
148
|
-
"
|
|
148
|
+
"posture": self.posture,
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
@classmethod
|
|
@@ -157,7 +157,7 @@ class Sitting:
|
|
|
157
157
|
started_at=d.get("started_at", ""),
|
|
158
158
|
cwd=d.get("cwd", ""),
|
|
159
159
|
next_prompt_id=int(d.get("next_prompt_id", 1)),
|
|
160
|
-
|
|
160
|
+
posture=d.get("posture", "bypass"),
|
|
161
161
|
)
|
|
162
162
|
|
|
163
163
|
|