agentwire-dev 1.56.1__tar.gz → 1.58.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.56.1 → agentwire_dev-1.58.0}/.agentwire.yml.example +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/PKG-INFO +6 -6
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/README.md +5 -5
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/__main__.py +8 -7
- agentwire_dev-1.58.0/agentwire/chrome_tabs.py +124 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/config.py +10 -8
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/config_cli.py +0 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/core.py +160 -190
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/council/cli.py +9 -9
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/council/state.py +3 -3
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/diff_cli.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/doctor_cli.py +25 -26
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/ensure_cli.py +11 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/handoff/parser.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/handoff/schema.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/handoff_cli.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/history_cli.py +19 -29
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +105 -13
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +105 -13
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/mcp-tool-damage-control.py +105 -13
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/read-tool-damage-control.py +105 -13
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +6 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +105 -13
- agentwire_dev-1.58.0/agentwire/mcp_chrome.py +90 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_core.py +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_pane.py +4 -4
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_server.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_session.py +57 -7
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_voice.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_worktree.py +126 -25
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/onboarding.py +3 -3
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/pane_cli.py +31 -33
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/project_config.py +55 -147
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/projects.py +4 -4
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/__init__.py +56 -26
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/agentwire.md +10 -4
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/contributor.md +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/correspondent.md +3 -3
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/orchestrator.md +1 -1
- agentwire_dev-1.56.1/agentwire/roles/worktree-session.md → agentwire_dev-1.58.0/agentwire/roles/worker-worktree.md +11 -8
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/worker.md +4 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles_cli.py +4 -4
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/permission.py +12 -57
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/projects.py +5 -8
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/sessions_admin.py +12 -19
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/safety/_core.py +105 -13
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/dispatch.py +17 -17
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/models.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/state.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/security.py +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/server.py +4 -40
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/services.py +3 -3
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/session_cli.py +551 -250
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/css/desktop.css +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/command-palette.js +5 -16
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/dead-key-suppressor.js +0 -5
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/desktop.js +5 -17
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/shortcuts.js +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/sessions-section.js +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar.js +17 -6
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/system_cli.py +4 -7
- agentwire_dev-1.58.0/agentwire/tabs_cli.py +89 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tasks.py +16 -6
- agentwire_dev-1.58.0/agentwire/tasks_cli.py +299 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts_cli.py +17 -72
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/worktree.py +41 -10
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/worktree_registry.py +9 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/INDEX.md +5 -7
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/architecture.md +12 -8
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/briefing-mode.md +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/concepts.md +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/council.md +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/glossary.md +3 -7
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/internals/damage-control.md +80 -6
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/internals/parallel-refactor.md +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/internals/portal.md +3 -3
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/internals/troubleshooting.md +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/internals/window-collage.md +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/quickstart.md +10 -6
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/research/briefing-mode-feasibility.md +2 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/scheduling/scheduled-workloads.md +24 -14
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/security/damage-control-hardening.md +12 -4
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/security/secrets.md +0 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/services.md +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/sessions/claude-code-auto-mode.md +13 -13
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/sessions/prompt-routing.md +10 -3
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/sessions/worktree-sessions.md +36 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/voice/shim-contract.md +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/conftest.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/fixtures/sample_agentwire.yml +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/integration/test_scheduler_board.py +4 -4
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/integration/test_worktree_cmd.py +332 -4
- agentwire_dev-1.58.0/tests/unit/test_build_agent_command.py +163 -0
- agentwire_dev-1.58.0/tests/unit/test_chrome_tabs.py +110 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_cli_commands.py +121 -23
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_config_cli.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_control_plane_protection.py +149 -21
- agentwire_dev-1.58.0/tests/unit/test_core_created_by_rooting.py +117 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_council_cli.py +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_council_state.py +1 -1
- agentwire_dev-1.58.0/tests/unit/test_dangling_worktrees.py +142 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_mcp_server.py +3 -3
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_mcp_tools_args.py +132 -5
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_portal_api.py +7 -7
- agentwire_dev-1.58.0/tests/unit/test_posture_default.py +57 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_project_config.py +108 -125
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_roles.py +69 -31
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_scheduler.py +4 -4
- agentwire_dev-1.58.0/tests/unit/test_server_pure.py +50 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_services.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_task_cli.py +2 -2
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_tasks.py +14 -6
- agentwire_dev-1.58.0/tests/unit/test_tasks_cli.py +171 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_usage_limit.py +1 -1
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_worktree.py +61 -0
- agentwire_dev-1.58.0/tests/unit/test_worktree_branch_cleanup.py +165 -0
- agentwire_dev-1.56.1/agentwire/mcp_voiceclone.py +0 -81
- agentwire_dev-1.56.1/agentwire/voiceclone.py +0 -354
- agentwire_dev-1.56.1/docs/wiki/sessions/pi.md +0 -288
- agentwire_dev-1.56.1/tests/unit/test_build_agent_command.py +0 -392
- agentwire_dev-1.56.1/tests/unit/test_server_pure.py +0 -115
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.claude/commands/handoff.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.claude/skills/wiki/SKILL.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/workflows/pytest.yml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/workflows/ruff.yml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/workflows/security.yml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.github/workflows/tts-smoke.yml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/.gitignore +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/AGENTS.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/Dockerfile.local +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/LICENSE +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/RELEASING.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/SECURITY.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/SPONSORS.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/channels/push.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/channels_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/completion.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/council/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/council/inbox.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/council/minutes.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/council/view.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/devices.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/doctor_voice.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/fetch.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/handoff/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/handoff/git_state.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/handoff/instructions.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/handoff/renderer.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/history.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/agentwire-permission.sh +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/control-plane.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/outbound.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/publish.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/idle-handler.sh +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks/queue-processor.sh +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/hooks_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/inbox.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/limits_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/listen.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/locking.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/machine_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_channels.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_council.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_desktop.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_handoff.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_history.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_listen.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_lock.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_machine.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_msg.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_notify.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_projects.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_scheduler.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_scratchpad.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_services.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_status.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_task.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_tunnels.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/mcp_wiki.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/msg_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/network.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/notify_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/palette_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/portal_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/prompt_router.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/prompts_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/push_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/push_store.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/repo_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/research.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/anchor.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-brain.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-conscience.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-critic.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-devils-advocate.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-gut.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-historian.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-member.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/council-orchestrator.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/init.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/notifications.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/soul.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/roles/voice.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/artifacts.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/config.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/council.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/desktop.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/history.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/machines.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/notify.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/palette.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/push.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/safety.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/scheduler.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/scratchpad.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/sessions.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/routes/voice.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/safety/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/safety_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/safety_commands.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/gates.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/loop.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/report.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler/schedule.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scheduler_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/scratchpad.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/send_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/session_context.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/session_ready.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/ssh.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/announcements.json +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/apple-touch-icon.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/css/mobile.css +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/favicon-32.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/favicon-64.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/bear.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/cat.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/crown.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/deer.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/drone.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/eagle.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/fox.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/hawk.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/horse.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/lion.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/rabbit.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/robot.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/tiger.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/icons/sessions/wolf.webp +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/img/icon-192.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/img/icon-512.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/announcement-modal.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/api.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/artifact-window.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/collage.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/council-window.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/desktop-manager.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/help-modal.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/icon-manager.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/mobile.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/notification-prefs.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/notifications-panel.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/ptt.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/push-client.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/review-window.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/safety-shared.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/safety-window.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/scratchpad.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/service-classification.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/session-id.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/session-window.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/config-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/council-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/tile-manager.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/toast.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/token-modal.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/utils/ansi.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/utils/swipe.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/voice/autosend-prefs.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/voice/browser-stt.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/voice/browser-tts.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/voice/jargon.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/voice/prompt.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/manifest.webmanifest +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/static/service-worker.js +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/stt/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/stt/base.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/stt/cloud.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/stt/engine.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/stt/local.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/stt/server_backend.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/stt/stt_server.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/council/minutes.html.j2 +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/desktop.html +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/mobile.html +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/pair.html +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templates/tmux.conf +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/templating.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/gws.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/audio.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/base.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/kokoro_server.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/local.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tts_server.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/tunnels_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/usage_limit.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/utils/event_log.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/utils/speech.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/validation.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/voice_status.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/wiki.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/wiki_audit.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/agentwire/wiki_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/decisions/obsidian-second-brain.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/logo.png +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/communication/channels.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/communication/hammerspoon.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/communication/handoff.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/deployment/remote-access.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/deployment/remote-machines.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/internals/shell-escaping.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/security/pip-audit.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/security/remote-access-hardening.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/sessions/messaging.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/sessions/window-sizing.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/usage-limit-recovery.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/voice/stt-cloud.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/docs/wiki/voice/tts-self-hosted.md +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/pyproject.toml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/integration/test_council_portal.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/integration/test_send_verified_tmux.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/integration/test_server_websockets.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_announcements.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_channels.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_cli_output.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_cli_smoke.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_config.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_council_inbox.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_council_minutes.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_council_view.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_damage_control_bypass.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_damage_control_hooks.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_damage_control_sync.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_devices.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_diff_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_doctor_voice.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_event_log.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_file_io.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_handoff_git_state.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_handoff_instructions.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_handoff_parser.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_handoff_renderer.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_hooks_install.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_idle_handler.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_idle_nag.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_inbox.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_init_command.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_install_parity.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_limits_tick_isolation.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_msg_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_notify_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_onboarding_reinit.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_palette_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_pip_environment.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_prompt_router.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_push.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_rebuild_guard.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_repo_cli.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_routes_snapshot.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_safety_commands.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_safety_disabled_rules.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_safety_escape_hatch.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_safety_heal.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_safety_kill_switch.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_scheduler_parsing.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_scratchpad.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_security.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_server_async.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_session_context.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_session_ready.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_shared_dir_guard.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_skill_install.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_speech_tags.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_ssh.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_stt_backend.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_stt_cloud.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_stt_engine.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_templating.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_terminal_resize.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_tmux_template.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_tts_engine_resolution.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_tts_local.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_tunnels_probe.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_unattended_env_isolation.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_validation.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_voice_status.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_wiki.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_wiki_audit.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_window_cycling_binding.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.0}/tests/unit/test_worktree_layout.py +0 -0
- {agentwire_dev-1.56.1 → agentwire_dev-1.58.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.58.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>
|
|
@@ -16,9 +16,8 @@ from . import ( # noqa: E402 # must follow load_dotenv() above
|
|
|
16
16
|
from .core import ( # noqa: E402,F401 # E402: must follow load_dotenv(); F401: re-exported moved helpers
|
|
17
17
|
_UNATTENDED_ENV_KEYS,
|
|
18
18
|
CONFIG_DIR,
|
|
19
|
-
KIND_DEFAULT_POSTURE,
|
|
20
19
|
AgentCommand,
|
|
21
|
-
|
|
20
|
+
_add_posture_flag,
|
|
22
21
|
_build_tmux_env_flags,
|
|
23
22
|
_build_tmux_env_flags_shell,
|
|
24
23
|
_check_portal_health,
|
|
@@ -39,7 +38,7 @@ from .core import ( # noqa: E402,F401 # E402: must follow load_dotenv(); F401:
|
|
|
39
38
|
_portal_auth_headers,
|
|
40
39
|
_post_desktop_notification,
|
|
41
40
|
_record_session_creator,
|
|
42
|
-
|
|
41
|
+
_resolve_posture_from_args,
|
|
43
42
|
_run_remote,
|
|
44
43
|
_set_session_name_env,
|
|
45
44
|
_start_portal_local,
|
|
@@ -119,7 +118,6 @@ Command Categories:
|
|
|
119
118
|
|
|
120
119
|
Voice:
|
|
121
120
|
listen Voice input recording
|
|
122
|
-
voiceclone Record and upload voice clones
|
|
123
121
|
tts Manage TTS server
|
|
124
122
|
stt Manage STT server
|
|
125
123
|
|
|
@@ -188,10 +186,11 @@ Command Categories:
|
|
|
188
186
|
from . import diff_cli, limits_cli, msg_cli, pane_cli, prompts_cli, send_cli # noqa: I001 # session_cli kept on its own line below to minimize Phase 1 #495 merge conflicts
|
|
189
187
|
from . import session_cli
|
|
190
188
|
from . import channels_cli, config_cli, portal_cli, tts_cli
|
|
191
|
-
from . import scheduler_cli, ensure_cli
|
|
189
|
+
from . import scheduler_cli, ensure_cli, tasks_cli
|
|
192
190
|
from . import doctor_cli, history_cli, machine_cli, safety_cli
|
|
193
191
|
from . import handoff_cli, hooks_cli, mcp_cli, roles_cli, tunnels_cli
|
|
194
192
|
from . import notify_cli, palette_cli, push_cli, repo_cli, system_cli, wiki_cli
|
|
193
|
+
from . import tabs_cli
|
|
195
194
|
from .council import cli as council_cli
|
|
196
195
|
|
|
197
196
|
_REGISTRARS = [ # noqa: N806 # registry constant; Phase 1 of #495 appends here
|
|
@@ -207,6 +206,7 @@ Command Categories:
|
|
|
207
206
|
channels_cli.register_channels_parser,
|
|
208
207
|
scheduler_cli.register_scheduler_parser,
|
|
209
208
|
ensure_cli.register_ensure_parser,
|
|
209
|
+
tasks_cli.register_tasks_parser,
|
|
210
210
|
doctor_cli.register_doctor_parser,
|
|
211
211
|
safety_cli.register_safety_parser,
|
|
212
212
|
machine_cli.register_machine_parser,
|
|
@@ -224,6 +224,7 @@ Command Categories:
|
|
|
224
224
|
repo_cli.register_repo_parser,
|
|
225
225
|
config_cli.register_config_parser,
|
|
226
226
|
palette_cli.register_palette_parser,
|
|
227
|
+
tabs_cli.register_tabs_parser,
|
|
227
228
|
]
|
|
228
229
|
for _reg in _REGISTRARS:
|
|
229
230
|
_reg(subparsers)
|
|
@@ -255,7 +256,7 @@ Command Categories:
|
|
|
255
256
|
c_start.add_argument(
|
|
256
257
|
"--roster", help="Comma-separated lens names (default: full bundled roster)"
|
|
257
258
|
)
|
|
258
|
-
c_start.add_argument("--
|
|
259
|
+
c_start.add_argument("--posture", help="Permission mode for council sessions (default: bypass)")
|
|
259
260
|
c_start.add_argument("--model", help="Model override for all council sessions")
|
|
260
261
|
c_start.add_argument(
|
|
261
262
|
"--force", action="store_true", help="Tear down a live sitting first"
|
|
@@ -389,7 +390,7 @@ def _find_subparser(parser: argparse.ArgumentParser, *names: str):
|
|
|
389
390
|
_GROUP_COMMANDS = [
|
|
390
391
|
"portal", "tts", "stt", "tunnels", "machine", "history", "handoff",
|
|
391
392
|
"wiki", "hooks", "projects", "safety", "network", "listen",
|
|
392
|
-
"
|
|
393
|
+
"roles", "task", "lock", "scheduler", "council", "limits",
|
|
393
394
|
"config",
|
|
394
395
|
]
|
|
395
396
|
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""Tracks claude-in-chrome tab ids opened by a session (#717).
|
|
2
|
+
|
|
3
|
+
Worktree sessions open claude-in-chrome tabs to e2e-verify their work before
|
|
4
|
+
opening a PR. Those tabs are never closed if the session finishes without
|
|
5
|
+
tidying up after itself, or dies mid-work — this module is pure bookkeeping
|
|
6
|
+
so a crashed session's orphaned tabs can still be identified during teardown.
|
|
7
|
+
|
|
8
|
+
agentwire has no way to call `tabs_close_mcp` itself: that MCP server runs
|
|
9
|
+
inside the CALLING agent's own client, not agentwire's process. So this only
|
|
10
|
+
tracks tab ids; the actual close always happens at the LLM/agent layer —
|
|
11
|
+
either the session closing its own tabs before finishing (the normal path),
|
|
12
|
+
or `worktree_remove` surfacing untracked-but-still-open tab ids to whichever
|
|
13
|
+
agent runs the teardown (the crash backstop).
|
|
14
|
+
|
|
15
|
+
Layout: one JSON file (``~/.agentwire/chrome-tabs.json``), keyed by session
|
|
16
|
+
name -> list of ``{tab_id, url, tracked_at}``. Plain JSON, hand-editable.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import contextlib
|
|
20
|
+
import datetime
|
|
21
|
+
import fcntl
|
|
22
|
+
import json
|
|
23
|
+
import os
|
|
24
|
+
import tempfile
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
|
|
27
|
+
REGISTRY_FILE = Path.home() / ".agentwire" / "chrome-tabs.json"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@contextlib.contextmanager
|
|
31
|
+
def _locked():
|
|
32
|
+
"""Serialize read-modify-write across processes via an flock sidecar."""
|
|
33
|
+
REGISTRY_FILE.parent.mkdir(parents=True, exist_ok=True)
|
|
34
|
+
lock_path = REGISTRY_FILE.with_suffix(REGISTRY_FILE.suffix + ".lock")
|
|
35
|
+
fd = os.open(str(lock_path), os.O_CREAT | os.O_RDWR, 0o644)
|
|
36
|
+
try:
|
|
37
|
+
fcntl.flock(fd, fcntl.LOCK_EX)
|
|
38
|
+
yield
|
|
39
|
+
finally:
|
|
40
|
+
fcntl.flock(fd, fcntl.LOCK_UN)
|
|
41
|
+
os.close(fd)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _load() -> dict:
|
|
45
|
+
if not REGISTRY_FILE.exists():
|
|
46
|
+
return {}
|
|
47
|
+
try:
|
|
48
|
+
data = json.loads(REGISTRY_FILE.read_text())
|
|
49
|
+
return data if isinstance(data, dict) else {}
|
|
50
|
+
except (json.JSONDecodeError, OSError):
|
|
51
|
+
return {}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _save(data: dict) -> None:
|
|
55
|
+
"""Atomically write the registry (temp file in same dir + os.replace)."""
|
|
56
|
+
REGISTRY_FILE.parent.mkdir(parents=True, exist_ok=True)
|
|
57
|
+
payload = json.dumps(data, indent=2) + "\n"
|
|
58
|
+
fd, tmp = tempfile.mkstemp(dir=str(REGISTRY_FILE.parent), prefix=REGISTRY_FILE.name + ".", suffix=".tmp")
|
|
59
|
+
try:
|
|
60
|
+
with os.fdopen(fd, "w") as f:
|
|
61
|
+
f.write(payload)
|
|
62
|
+
f.flush()
|
|
63
|
+
os.fsync(f.fileno())
|
|
64
|
+
os.replace(tmp, REGISTRY_FILE) # atomic on POSIX
|
|
65
|
+
except BaseException:
|
|
66
|
+
with contextlib.suppress(OSError):
|
|
67
|
+
os.unlink(tmp)
|
|
68
|
+
raise
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def track(session: str, tab_id: str, url: str | None = None) -> dict:
|
|
72
|
+
"""Record that ``session`` opened claude-in-chrome tab ``tab_id``.
|
|
73
|
+
|
|
74
|
+
Idempotent per (session, tab_id) — re-tracking the same tab just refreshes
|
|
75
|
+
its entry rather than duplicating it.
|
|
76
|
+
"""
|
|
77
|
+
entry = {
|
|
78
|
+
"tab_id": tab_id,
|
|
79
|
+
"url": url,
|
|
80
|
+
"tracked_at": datetime.datetime.now().astimezone().isoformat(timespec="seconds"),
|
|
81
|
+
}
|
|
82
|
+
with _locked():
|
|
83
|
+
data = _load()
|
|
84
|
+
tabs = [t for t in data.get(session, []) if t.get("tab_id") != tab_id]
|
|
85
|
+
tabs.append(entry)
|
|
86
|
+
data[session] = tabs
|
|
87
|
+
_save(data)
|
|
88
|
+
return entry
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def untrack(session: str, tab_id: str) -> bool:
|
|
92
|
+
"""Drop a tracked tab (the session closed it itself). Returns whether it was tracked."""
|
|
93
|
+
with _locked():
|
|
94
|
+
data = _load()
|
|
95
|
+
tabs = data.get(session, [])
|
|
96
|
+
remaining = [t for t in tabs if t.get("tab_id") != tab_id]
|
|
97
|
+
removed = len(remaining) != len(tabs)
|
|
98
|
+
if remaining:
|
|
99
|
+
data[session] = remaining
|
|
100
|
+
else:
|
|
101
|
+
data.pop(session, None)
|
|
102
|
+
if removed:
|
|
103
|
+
_save(data)
|
|
104
|
+
return removed
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def tabs_for(session: str) -> list[dict]:
|
|
108
|
+
"""All tracked tabs for a session (read-only)."""
|
|
109
|
+
return _load().get(session, [])
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def clear(session: str) -> list[dict]:
|
|
113
|
+
"""Drop + return every tracked tab for a session — the teardown backstop."""
|
|
114
|
+
with _locked():
|
|
115
|
+
data = _load()
|
|
116
|
+
tabs = data.pop(session, [])
|
|
117
|
+
if tabs:
|
|
118
|
+
_save(data)
|
|
119
|
+
return tabs
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def all_tabs() -> dict[str, list[dict]]:
|
|
123
|
+
"""Every session -> tracked-tabs mapping (read-only, for listing/debugging)."""
|
|
124
|
+
return _load()
|
|
@@ -101,9 +101,11 @@ class WorktreesConfig:
|
|
|
101
101
|
# Gitignored files that `git worktree add` won't carry over (it only
|
|
102
102
|
# checks out tracked files). These are copied from the main repo into
|
|
103
103
|
# each fresh worktree so agents have the secrets/config they need.
|
|
104
|
-
# .agentwire.yml
|
|
105
|
-
# load their task
|
|
106
|
-
|
|
104
|
+
# .agentwire.yml/.agentwire.tasks.yml are included because worktree-dispatched
|
|
105
|
+
# tasks can't load their session/task config without them when the project
|
|
106
|
+
# gitignores them (the latter is the protected, host-authored task-exec file —
|
|
107
|
+
# #720).
|
|
108
|
+
copy_files: list = field(default_factory=lambda: [".env", ".agentwire.yml", ".agentwire.tasks.yml"])
|
|
107
109
|
|
|
108
110
|
|
|
109
111
|
@dataclass
|
|
@@ -120,7 +122,7 @@ class ProjectsConfig:
|
|
|
120
122
|
|
|
121
123
|
@dataclass
|
|
122
124
|
class WorktreeConfig:
|
|
123
|
-
"""Standalone worktree
|
|
125
|
+
"""Standalone worktree session orchestration (`worktree:` config key).
|
|
124
126
|
|
|
125
127
|
Governs `agentwire worktree <name>` — the first-class primitive for
|
|
126
128
|
spawning an isolated branch+worktree+session for one unit of work.
|
|
@@ -355,7 +357,7 @@ class CustomServiceConfig:
|
|
|
355
357
|
Custom services show up in the portal's Services column, are booted by
|
|
356
358
|
`agentwire up` AND on portal launch, and are watched by the portal's
|
|
357
359
|
service watchdog. A service is just an agentwire session created in a
|
|
358
|
-
project directory; `roles`/`
|
|
360
|
+
project directory; `roles`/`posture` override the project's .agentwire.yml
|
|
359
361
|
when set.
|
|
360
362
|
|
|
361
363
|
restart: never | on-failure | always — what the watchdog does when the
|
|
@@ -367,7 +369,7 @@ class CustomServiceConfig:
|
|
|
367
369
|
project: Optional[str] = None
|
|
368
370
|
autostart: bool = True
|
|
369
371
|
roles: Optional[str] = None # comma-separated; overrides project .agentwire.yml
|
|
370
|
-
|
|
372
|
+
posture: Optional[str] = None # posture override (e.g. bypass, auto)
|
|
371
373
|
restart: str = "on-failure" # never | on-failure | always
|
|
372
374
|
healthcheck: HealthcheckConfig = field(default_factory=HealthcheckConfig)
|
|
373
375
|
# Context auto-management policy (issue #442): clear | compact | none.
|
|
@@ -621,7 +623,7 @@ def _dict_to_config(data: dict) -> Config:
|
|
|
621
623
|
enabled=worktrees_data.get("enabled", True),
|
|
622
624
|
suffix=worktrees_data.get("suffix", "-worktrees"),
|
|
623
625
|
auto_create_branch=worktrees_data.get("auto_create_branch", True),
|
|
624
|
-
copy_files=worktrees_data.get("copy_files", [".env", ".agentwire.yml"]),
|
|
626
|
+
copy_files=worktrees_data.get("copy_files", [".env", ".agentwire.yml", ".agentwire.tasks.yml"]),
|
|
625
627
|
)
|
|
626
628
|
projects = ProjectsConfig(
|
|
627
629
|
dir=projects_data.get("dir", "~/projects"),
|
|
@@ -737,7 +739,7 @@ def _dict_to_config(data: dict) -> Config:
|
|
|
737
739
|
project=entry.get("project"),
|
|
738
740
|
autostart=entry.get("autostart", True),
|
|
739
741
|
roles=entry.get("roles"),
|
|
740
|
-
|
|
742
|
+
posture=entry.get("posture"),
|
|
741
743
|
restart=entry.get("restart", "on-failure"),
|
|
742
744
|
healthcheck=healthcheck,
|
|
743
745
|
context_policy=context_policy,
|