agentwire-dev 1.77.0__tar.gz → 1.77.2__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.77.0 → agentwire_dev-1.77.2}/PKG-INFO +3 -3
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/README.md +1 -1
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/RELEASING.md +1 -1
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/core.py +10 -5
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/portal_cli.py +110 -3
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rule_baselines.json +2 -1
- agentwire_dev-1.77.2/corpus/cases/path_spelling.yaml +5791 -0
- agentwire_dev-1.77.2/corpus/cases/relative_paths.yaml +296 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/corpus/golden/effective_rules.json +16 -1
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/corpus/golden/snapshot.json +10204 -2824
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/corpus/schema.json +1 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/deployment/remote-access.md +18 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/internals/damage-control.md +87 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/__init__.py +1 -1
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/engine.py +121 -28
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/core.json +15 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/core.yaml +20 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/pyproject.toml +1 -1
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/corpus_runner.py +1 -1
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_golden_snapshot.py +1 -1
- agentwire_dev-1.77.2/tests/unit/test_path_spelling.py +54 -0
- agentwire_dev-1.77.2/tests/unit/test_portal_pair_url.py +64 -0
- agentwire_dev-1.77.2/tests/unit/test_relative_path_operands.py +127 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.agentwire.yml.example +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.claude/commands/handoff.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.claude/skills/wiki/SKILL.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/workflows/pytest.yml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/workflows/ruff.yml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/workflows/security.yml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.github/workflows/tts-smoke.yml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/.gitignore +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/AGENTS.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/Dockerfile.local +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/LICENSE +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/SECURITY.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/SPONSORS.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/__main__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/auth_expired.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/background_tasks.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/beta.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/channels/push.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/channels_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/chrome_tabs.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/claude_settings.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/cohort.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/completion.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/config.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/config_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/council/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/council/cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/council/inbox.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/council/minutes.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/council/state.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/council/view.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/devices.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/diff_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/doctor_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/doctor_voice.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/ensure_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/env_loader.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/fetch.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/handoff/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/handoff/git_state.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/handoff/instructions.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/handoff/parser.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/handoff/renderer.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/handoff/schema.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/handoff_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/history.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/history_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/history_migrate.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/hooks/agentwire-permission.sh +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/hooks/idle-handler.sh +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/hooks/outcome_logger.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/hooks/queue-processor.sh +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/hooks_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/inbox.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/limits_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/listen.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/locking.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/machine_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_channels.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_chrome.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_core.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_council.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_desktop.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_handoff.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_history.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_listen.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_lock.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_machine.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_msg.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_notify.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_pane.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_projects.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_scheduler.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_scratchpad.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_server.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_services.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_session.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_status.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_task.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_tunnels.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_voice.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_wiki.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/mcp_worktree.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/msg_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/network.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/notify_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/onboarding.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/palette_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/pane_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/playback_lane.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/project_config.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/projects.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/prompt_router.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/prompts_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/push_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/push_store.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/repo_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/research.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/restart_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/role_prompts.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/agentwire.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/anchor.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/contributor.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/correspondent.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-brain.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-conscience.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-critic.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-devils-advocate.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-gut.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-historian.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-member.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/council-orchestrator.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/init.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/notifications.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/orchestrator.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/reviewer-worktree.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/reviewer.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/shared-checkout.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/soul.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/voice.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/worker-worktree.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles/worker.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/roles_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/artifacts.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/config.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/council.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/desktop.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/history.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/machines.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/notify.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/palette.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/permission.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/projects.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/push.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/safety.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/scheduler.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/scratchpad.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/sessions.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/sessions_admin.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/routes/voice.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/audit.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/lint.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/provenance.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/residuals.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-control-plane.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-control-plane.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-core.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-core.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-mcp-tools.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-mcp-tools.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-outbound.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire-outbound.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/rules/agentwire.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety/suggest.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety_commands.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety_ext.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety_migrate.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety_notify.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/safety_packs_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/dispatch.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/gates.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/loop.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/models.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/report.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/schedule.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/state.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler/zombie.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scheduler_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/scratchpad.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/security.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/send_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/sent_ledger.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/server.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/services.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/session_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/session_context.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/session_ready.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/session_state.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/ssh.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/announcements.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/apple-touch-icon.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/css/desktop.css +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/css/mobile.css +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/favicon-32.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/favicon-64.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/bear.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/cat.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/crown.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/deer.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/drone.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/eagle.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/fox.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/hawk.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/horse.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/lion.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/rabbit.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/robot.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/tiger.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/icons/sessions/wolf.webp +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/img/icon-192.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/img/icon-512.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/announcement-modal.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/api.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/artifact-window.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/card-terminal.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/collage.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/command-palette.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/council-window.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/dead-key-residue.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/desktop-manager.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/desktop.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/help-modal.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/hotkeys.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/icon-manager.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/lineage.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/mobile.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/notification-prefs.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/notifications-panel.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/ptt.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/push-client.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/review-window.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/safety-shared.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/safety-window.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/scratchpad.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/service-classification.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/session-hud-controller.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/session-hud-notices.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/session-hud-spawn.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/session-hud.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/session-id.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/session-window.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/shortcuts.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/config-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/council-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/machines-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/projects-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/safety-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar/sessions-section.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/sidebar.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/spawn-ghost.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/taskbar-persist.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/terminal-font-prefs.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/terminal-pane.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/tile-manager.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/toast.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/token-modal.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/topology-render.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/utils/ansi.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/utils/rich-text.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/utils/swipe.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/voice/audio-unlock.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/voice/autosend-prefs.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/voice/browser-stt.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/voice/browser-tts.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/voice/jargon.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/voice/prompt.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/js/workspace-window.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/manifest.webmanifest +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/service-worker.js +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/static/topology-harness.html +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/stt/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/stt/base.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/stt/cloud.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/stt/engine.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/stt/local.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/stt/server_backend.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/stt/stt_server.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/system_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tabs_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tasks.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tasks_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/council/minutes.html.j2 +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/desktop.html +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/handoff/theme.css.j2 +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/mobile.html +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/pair.html +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/statusline.sh +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templates/tmux.conf +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/templating.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/audio.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/base.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/kokoro_server.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/local.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tts_server.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/tunnels_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/usage_limit.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/utils/event_log.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/utils/speech.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/validation.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/voice_status.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/wait_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/wiki.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/wiki_audit.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/wiki_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/worktree.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/worktree_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/agentwire/worktree_registry.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/corpus/cases/bypass.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/corpus/cases/control_plane.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/corpus/golden/harvested.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/corpus/golden/rule_ids.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/decisions/obsidian-second-brain.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/design/session-card-fields.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/design/session-card-recommendation.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/logo.png +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/INDEX.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/architecture.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/auth-expired.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/briefing-mode.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/communication/channels.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/communication/hammerspoon.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/communication/handoff.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/concepts.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/council.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/deployment/remote-machines.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/glossary.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/internals/parallel-refactor.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/internals/portal.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/internals/session-topology.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/internals/shell-escaping.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/internals/troubleshooting.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/internals/window-collage.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/quickstart.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/security/damage-control-hardening.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/security/pip-audit.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/security/remote-access-hardening.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/security/secrets.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/services.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/conversation-identity.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/fan-out-cohorts.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/heal-line-count-cliff.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/helper-sessions.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/messaging.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/prompt-routing.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/window-sizing.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/sessions/worktree-sessions.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/usage-limit-recovery.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/voice/shim-contract.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/voice/stt-cloud.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/voice/stt-self-hosted.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/docs/wiki/voice/tts-self-hosted.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/README.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/docs/coverage.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/docs/extending.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/docs/rule-authoring.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/docs/threat-model.md +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/pyproject.toml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/__main__.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/adapter.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/audit.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/breakglass.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/claude_code.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/groups.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/harness_config.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/hook.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/install.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/packs.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/policy.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/profile.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/aws.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/aws.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/cloud-hosting.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/containers.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/containers.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/control-plane.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/control-plane.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/databases.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/databases.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/firebase.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/gcp.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/git.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/git.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/infrastructure.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/mcp-tools.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/mcp-tools.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/outbound.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/outbound.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/payloads.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/payloads.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/publish.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/publish.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/registry.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/registry.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/remote.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/remote.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/tmux.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/rules/tmux.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/ruleset.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/aws.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/docker.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/gcp.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/gh.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/git.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/kubectl.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/npm.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/terraform.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/uv.json +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/src/damage_control/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/tools/build_rules_json.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/packages/damage-control-dev/tools/coverage_matrix.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/conftest.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/audio_unlock_harness.mjs +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_30_shell.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_agent.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_done.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_interrupted.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_monitor.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_quoted_footer.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_second_notice.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_shell.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/pane_80_shell_and_monitor.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/transcript_bash_done.jsonl +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/transcript_bash_pending.jsonl +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/transcript_monitor_done.jsonl +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/background_tasks/transcript_monitor_events.jsonl +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/dc_msg_body_quoting_carriers.txt +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/hotkeys_harness.mjs +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/sample_agentwire.yml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/session_hud_detent_harness.mjs +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/taskbar_persist_harness.mjs +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/fixtures/topology_expand_harness.mjs +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/home_guard.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/integration/test_council_portal.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/integration/test_scheduler_board.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/integration/test_send_verified_tmux.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/integration/test_server_websockets.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/integration/test_tmux_name_rewrite.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/integration/test_worktree_cmd.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_agentwire_rules_layer.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_announcements.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_audio_unlock_js.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_audit_attribution.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_audit_outcomes.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_auth_expired.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_auth_expired_dispatch.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_background_tasks.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_background_tasks_review.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_beta_flag.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_block_rows_carry_an_id.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_brace_expansion_zero_access.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_breakglass.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_buddy_removal_keeps.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_build_agent_command.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_channels.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_chrome_tabs.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_claude_settings.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_cli_commands.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_cli_output.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_cli_smoke.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_cli_stderr_clean.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_cohort.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_config.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_config_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_control_plane_protection.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_corpus.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_council_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_council_inbox.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_council_minutes.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_council_state.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_council_view.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_coverage_matrix.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_damage_control_bypass.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_damage_control_delete_recursive.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_damage_control_hooks.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_damage_control_pin.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_dangling_worktrees.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_dc_install.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_dc_policy_packs.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_dc_profile_isolation.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_devices.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_diff_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_doctor_orphaned_history.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_doctor_scheduler_staleness.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_doctor_secrets_perms.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_doctor_task_migration.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_doctor_voice.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_engine_standalone.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_ensure_shared_dir.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_ensure_verified_prompt.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_env_loader.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_event_log.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_extension_points.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_guarded_launch_command.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_handoff_git_state.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_handoff_instructions.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_handoff_parser.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_handoff_renderer.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_helper_session.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_heredoc_marker_liveness.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_history_migrate.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_history_migrate_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_history_resume_name.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_hook_fail_closed.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_hook_fail_closed_matrix.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_hook_link_guard.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_hook_python_floor.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_hook_subprocess.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_hooks_install.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_hotkeys_js.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_idle_handler.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_idle_nag.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_inbox.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_init_command.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_install_parity.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_launch_line_reentry.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_launch_via_env.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_limits_tick_isolation.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_mcp_nonblocking.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_mcp_server.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_mcp_tool_policy.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_mcp_tools_args.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_msg_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_notify_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_onboarding_reinit.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_owner_only_writes.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_palette_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_path_case_folding.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_payload_position.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_pending_message_visibility.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_playback_lane.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_policy_ladder.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_portal_api.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_posture_default.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_powershell_matcher.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_project_config.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_projects_registry.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_prompt_router.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_prompt_router_dedup.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_prompt_router_resume.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_prose_operands.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_push.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_rebuild_guard.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_rebuild_uv_lock.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_remote_session_record.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_repo_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_restart_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_rich_text_js.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_rm_recoverable.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_role_prompt_retention.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_role_prompt_sweep_wiring.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_roles.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_routes_snapshot.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_rule_files_load.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_rule_ids_pinned.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_rules_json_in_sync.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safe_cwd.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safety_deployment.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safety_ext.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safety_groups.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safety_install.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safety_migrate.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safety_notify.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_safety_packs.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_say_lane.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_scan_budget.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_scheduler.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_scheduler_liveness.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_scheduler_zombie.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_scratchpad.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_security.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_sed_script_is_data.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_sent_ledger.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_server_async.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_services.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_services_command.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_session_context.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_session_created_by_env.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_session_hud_detent_js.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_session_metadata_ssot.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_session_metadata_write.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_session_ready.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_session_state.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_shared_dir_guard.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_shim_selfheal.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_skill_install.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_speech_tags.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_ssh.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_stt_backend.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_stt_cloud.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_stt_engine.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_task_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_task_max_duration.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_taskbar_persist_js.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_tasks.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_tasks_cli.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_templating.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_terminal_resize.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_tmux_session_cwd.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_topology_expand_js.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_tts_engine_resolution.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_tts_local.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_tunnels_probe.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_unattended_allow.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_unattended_env_isolation.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_unattended_scoped_allow.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_usage_limit.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_voice_assistant_removed.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_voice_off_and_shim_bind.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_voice_status.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_watchdog_stages.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_wiki.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_wiki_audit.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_worktree.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_worktree_branch_cleanup.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_worktree_dot_project.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_worktree_git_truth.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_worktree_layout.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_worktree_registry.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tests/unit/test_zero_access_member_access.py +0 -0
- {agentwire_dev-1.77.0 → agentwire_dev-1.77.2}/tools/nonce_stt_probe.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentwire-dev
|
|
3
|
-
Version: 1.77.
|
|
3
|
+
Version: 1.77.2
|
|
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
|
|
@@ -228,7 +228,7 @@ Requires-Dist: aiohttp-jinja2>=1.6
|
|
|
228
228
|
Requires-Dist: aiohttp>=3.13.4
|
|
229
229
|
Requires-Dist: av>=12.0.0
|
|
230
230
|
Requires-Dist: certifi>=2026.10.23
|
|
231
|
-
Requires-Dist: damage-control-dev<0.2,>=0.1.
|
|
231
|
+
Requires-Dist: damage-control-dev<0.2,>=0.1.3
|
|
232
232
|
Requires-Dist: fastapi>=0.104.0
|
|
233
233
|
Requires-Dist: jinja2>=3.1.0
|
|
234
234
|
Requires-Dist: kokoro-onnx>=0.4.9; python_version < '3.14'
|
|
@@ -377,7 +377,7 @@ The portal binds to loopback (`127.0.0.1`) by default. To access the portal from
|
|
|
377
377
|
```bash
|
|
378
378
|
agentwire portal token
|
|
379
379
|
```
|
|
380
|
-
4. **Connect**:
|
|
380
|
+
4. **Connect**: run `agentwire portal pair` on the host and scan the QR (or open the printed URL) on your phone. The URL follows the bind: with `server.host: 0.0.0.0` it uses your machine's `.local` name or LAN IP, not `localhost`; pick another address with `--url`. Or open `https://<your-machine-ip>:8765` yourself and enter the token.
|
|
381
381
|
|
|
382
382
|
Origin checks reject cross-site browser requests on every bind. Keep the portal on a trusted LAN — never port-forward it or run it on a public-facing VPS. For internet access, use Cloudflare Tunnel + Zero Trust. See [SECURITY.md](SECURITY.md) for details.
|
|
383
383
|
|
|
@@ -106,7 +106,7 @@ The portal binds to loopback (`127.0.0.1`) by default. To access the portal from
|
|
|
106
106
|
```bash
|
|
107
107
|
agentwire portal token
|
|
108
108
|
```
|
|
109
|
-
4. **Connect**:
|
|
109
|
+
4. **Connect**: run `agentwire portal pair` on the host and scan the QR (or open the printed URL) on your phone. The URL follows the bind: with `server.host: 0.0.0.0` it uses your machine's `.local` name or LAN IP, not `localhost`; pick another address with `--url`. Or open `https://<your-machine-ip>:8765` yourself and enter the token.
|
|
110
110
|
|
|
111
111
|
Origin checks reject cross-site browser requests on every bind. Keep the portal on a trusted LAN — never port-forward it or run it on a public-facing VPS. For internet access, use Cloudflare Tunnel + Zero Trust. See [SECURITY.md](SECURITY.md) for details.
|
|
112
112
|
|
|
@@ -6,7 +6,7 @@ Every release does **both** a PyPI publish and a GitHub release. The **GitHub re
|
|
|
6
6
|
|
|
7
7
|
## Release order (two packages)
|
|
8
8
|
|
|
9
|
-
`agentwire-dev` depends on `damage-control-dev` (its own PyPI project, engine source in `packages/damage-control-dev/`). `pyproject.toml` pins it to a range — currently `damage-control-dev>=0.1.
|
|
9
|
+
`agentwire-dev` depends on `damage-control-dev` (its own PyPI project, engine source in `packages/damage-control-dev/`). `pyproject.toml` pins it to a range — currently `damage-control-dev>=0.1.3,<0.2` — and `tests/unit/test_damage_control_pin.py` fails if the workspace version leaves that range. A checkout resolves the engine from the workspace; a PyPI install resolves it from PyPI. Order matters, because an `agentwire-dev` that names a version PyPI doesn't have yet is uninstallable:
|
|
10
10
|
|
|
11
11
|
1. **Engine changed?** Bump `__version__` in `packages/damage-control-dev/src/damage_control/__init__.py`, merge, then build and publish it **first** (commands in step 3). Skip entirely when the engine didn't change — the existing pin keeps resolving.
|
|
12
12
|
2. **Pin still admits the engine?** A patch/minor bump inside the range needs no `agentwire-dev` change. A bump outside it (e.g. `0.2.0`) requires widening the range in `pyproject.toml` (`>=0.2.0,<0.3`) in the agentwire PR — the pin test enforces this.
|
|
@@ -1545,17 +1545,22 @@ def format_relative_time(timestamp_ms: int) -> str:
|
|
|
1545
1545
|
|
|
1546
1546
|
# === Cross-group shared helpers (Phase 0.5 sweep, #495) ===
|
|
1547
1547
|
|
|
1548
|
-
def
|
|
1549
|
-
"""
|
|
1550
|
-
|
|
1551
|
-
ssl_cfg =
|
|
1548
|
+
def _portal_scheme(config: dict) -> str:
|
|
1549
|
+
"""Portal scheme — mirrors the typed config's logic: https only when
|
|
1550
|
+
server.ssl cert/key are configured AND exist on disk."""
|
|
1551
|
+
ssl_cfg = config.get("server", {}).get("ssl", {})
|
|
1552
1552
|
cert, key = ssl_cfg.get("cert"), ssl_cfg.get("key")
|
|
1553
1553
|
enabled = bool(
|
|
1554
1554
|
cert and key
|
|
1555
1555
|
and Path(os.path.expanduser(cert)).exists()
|
|
1556
1556
|
and Path(os.path.expanduser(key)).exists()
|
|
1557
1557
|
)
|
|
1558
|
-
return
|
|
1558
|
+
return "https" if enabled else "http"
|
|
1559
|
+
|
|
1560
|
+
|
|
1561
|
+
def _default_portal_url() -> str:
|
|
1562
|
+
"""Default portal URL (loopback) for this machine's own CLI calls."""
|
|
1563
|
+
return f"{_portal_scheme(load_config())}://localhost:8765"
|
|
1559
1564
|
|
|
1560
1565
|
|
|
1561
1566
|
def _run_remote(machine_id: str, command: str) -> subprocess.CompletedProcess:
|
|
@@ -10,6 +10,7 @@ and curl helpers travel with this module.
|
|
|
10
10
|
from __future__ import annotations
|
|
11
11
|
|
|
12
12
|
import shlex
|
|
13
|
+
import socket
|
|
13
14
|
import subprocess
|
|
14
15
|
import sys
|
|
15
16
|
from pathlib import Path
|
|
@@ -17,13 +18,14 @@ from pathlib import Path
|
|
|
17
18
|
from .core import (
|
|
18
19
|
_check_portal_health,
|
|
19
20
|
_check_tmux_installed,
|
|
20
|
-
_default_portal_url,
|
|
21
21
|
_output_json,
|
|
22
|
+
_portal_scheme,
|
|
22
23
|
_start_portal_local,
|
|
23
24
|
get_portal_session_name,
|
|
24
25
|
load_config,
|
|
25
26
|
tmux_session_exists,
|
|
26
27
|
)
|
|
28
|
+
from .security import is_loopback_host
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
def _start_portal_remote(ssh_target: str, machine_id: str, args) -> int:
|
|
@@ -333,20 +335,121 @@ def cmd_portal_token(args) -> int:
|
|
|
333
335
|
return 0
|
|
334
336
|
|
|
335
337
|
|
|
338
|
+
def _lan_ipv4_addrs() -> list[str]:
|
|
339
|
+
"""Non-loopback IPv4 addresses of this host, primary outbound first.
|
|
340
|
+
|
|
341
|
+
The UDP-connect trick asks the kernel which interface routes outward;
|
|
342
|
+
``connect`` on a datagram socket sends no packets.
|
|
343
|
+
"""
|
|
344
|
+
addrs: list[str] = []
|
|
345
|
+
try:
|
|
346
|
+
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
|
347
|
+
s.connect(("192.0.2.1", 9)) # TEST-NET-1: never routed, never sent
|
|
348
|
+
addrs.append(s.getsockname()[0])
|
|
349
|
+
except OSError:
|
|
350
|
+
pass
|
|
351
|
+
try:
|
|
352
|
+
for ip in socket.gethostbyname_ex(socket.gethostname())[2]:
|
|
353
|
+
addrs.append(ip)
|
|
354
|
+
except OSError:
|
|
355
|
+
pass
|
|
356
|
+
seen: list[str] = []
|
|
357
|
+
for ip in addrs:
|
|
358
|
+
if ip not in seen and not ip.startswith("127.") and ip != "0.0.0.0":
|
|
359
|
+
seen.append(ip)
|
|
360
|
+
return seen
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def _mdns_hostname(lan_addrs: list[str]) -> str | None:
|
|
364
|
+
"""``<host>.local`` when it resolves back to one of this host's addresses."""
|
|
365
|
+
name = socket.gethostname().split(".")[0] + ".local"
|
|
366
|
+
try:
|
|
367
|
+
resolved = {ai[4][0] for ai in socket.getaddrinfo(name, None, socket.AF_INET)}
|
|
368
|
+
except OSError:
|
|
369
|
+
return None
|
|
370
|
+
return name if resolved & set(lan_addrs) else None
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def derive_pair_url(
|
|
374
|
+
config: dict,
|
|
375
|
+
*,
|
|
376
|
+
lan_addrs: list[str],
|
|
377
|
+
mdns_host: str | None,
|
|
378
|
+
override: str | None = None,
|
|
379
|
+
) -> tuple[str, str, list[str]]:
|
|
380
|
+
"""Pick the portal base URL a device should open to pair.
|
|
381
|
+
|
|
382
|
+
Returns ``(url, source, alternatives)``. Precedence: ``--url`` override >
|
|
383
|
+
explicit ``portal.url`` > a specific ``server.host`` > (wildcard bind)
|
|
384
|
+
``.local`` mDNS name > primary LAN IPv4. Loopback binds keep localhost.
|
|
385
|
+
The address lookups are injected so this stays a pure function.
|
|
386
|
+
"""
|
|
387
|
+
if override:
|
|
388
|
+
return override.rstrip("/"), "--url", []
|
|
389
|
+
explicit = config.get("portal", {}).get("url")
|
|
390
|
+
if explicit:
|
|
391
|
+
return explicit.rstrip("/"), "portal.url", []
|
|
392
|
+
|
|
393
|
+
server = config.get("server", {})
|
|
394
|
+
host = server.get("host", "127.0.0.1")
|
|
395
|
+
port = server.get("port", 8765)
|
|
396
|
+
scheme = _portal_scheme(config)
|
|
397
|
+
|
|
398
|
+
if is_loopback_host(host):
|
|
399
|
+
return f"{scheme}://localhost:{port}", "loopback bind", []
|
|
400
|
+
if host not in ("0.0.0.0", "::", ""):
|
|
401
|
+
return f"{scheme}://{host}:{port}", "server.host", []
|
|
402
|
+
if mdns_host:
|
|
403
|
+
return f"{scheme}://{mdns_host}:{port}", "mDNS hostname", [
|
|
404
|
+
f"{scheme}://{ip}:{port}" for ip in lan_addrs
|
|
405
|
+
]
|
|
406
|
+
if not lan_addrs:
|
|
407
|
+
return f"{scheme}://localhost:{port}", "no LAN address found", []
|
|
408
|
+
return f"{scheme}://{lan_addrs[0]}:{port}", "primary LAN address", [
|
|
409
|
+
f"{scheme}://{ip}:{port}" for ip in lan_addrs[1:]
|
|
410
|
+
]
|
|
411
|
+
|
|
412
|
+
|
|
336
413
|
def cmd_portal_pair(args) -> int:
|
|
337
414
|
"""Create a short-lived pairing code (+ QR) for a new device."""
|
|
338
415
|
from .devices import PAIRING_TTL_SECONDS, create_pairing
|
|
339
416
|
|
|
340
|
-
|
|
417
|
+
config = load_config()
|
|
418
|
+
lan_addrs = _lan_ipv4_addrs()
|
|
419
|
+
portal_url, source, alternatives = derive_pair_url(
|
|
420
|
+
config,
|
|
421
|
+
lan_addrs=lan_addrs,
|
|
422
|
+
mdns_host=_mdns_hostname(lan_addrs),
|
|
423
|
+
override=getattr(args, "url", None),
|
|
424
|
+
)
|
|
341
425
|
|
|
342
|
-
|
|
426
|
+
pairing = create_pairing(name=getattr(args, "name", None) or "device")
|
|
343
427
|
pair_url = f"{portal_url}/pair?code={pairing.code}"
|
|
344
428
|
ttl_min = PAIRING_TTL_SECONDS // 60
|
|
345
429
|
|
|
430
|
+
if getattr(args, "json", False):
|
|
431
|
+
_output_json({
|
|
432
|
+
"success": True,
|
|
433
|
+
"code": pairing.code,
|
|
434
|
+
"name": pairing.name,
|
|
435
|
+
"expires_in_seconds": PAIRING_TTL_SECONDS,
|
|
436
|
+
"portal_url": portal_url,
|
|
437
|
+
"url_source": source,
|
|
438
|
+
"pair_url": pair_url,
|
|
439
|
+
"alternatives": alternatives,
|
|
440
|
+
})
|
|
441
|
+
return 0
|
|
442
|
+
|
|
346
443
|
print(f"Pairing code: {pairing.code}")
|
|
347
444
|
print(f" Name: {pairing.name}")
|
|
348
445
|
print(f" Expires in {ttl_min} minutes.")
|
|
349
446
|
print()
|
|
447
|
+
print(f"Using {portal_url} ({source}).")
|
|
448
|
+
if alternatives:
|
|
449
|
+
print("Other addresses (pick one with --url):")
|
|
450
|
+
for alt in alternatives:
|
|
451
|
+
print(f" {alt}")
|
|
452
|
+
print()
|
|
350
453
|
print("On the device, open:")
|
|
351
454
|
print(f" {pair_url}")
|
|
352
455
|
print("or visit", f"{portal_url}/pair", "and enter the code.")
|
|
@@ -497,6 +600,10 @@ def register_portal_parser(subparsers) -> None:
|
|
|
497
600
|
"pair", help="Pair a new device (prints a short-lived code + QR)"
|
|
498
601
|
)
|
|
499
602
|
portal_pair.add_argument("--name", help="Friendly device name (e.g. 'phone')")
|
|
603
|
+
portal_pair.add_argument(
|
|
604
|
+
"--url", help="Portal base URL the device should open (overrides auto-detection)"
|
|
605
|
+
)
|
|
606
|
+
portal_pair.add_argument("--json", action="store_true", help="Output as JSON")
|
|
500
607
|
portal_pair.set_defaults(func=cmd_portal_pair)
|
|
501
608
|
|
|
502
609
|
# portal devices — list paired devices
|
|
@@ -53,7 +53,8 @@
|
|
|
53
53
|
"c0ded80e7d544f10c9db2b831d10fd0469057d08b1737eaf3b7ce7485ba0ad17",
|
|
54
54
|
"c10d81a50fe5bf2b4d83a37bc9e58f22d2a8ea5265cd0757d6bceb38702481dd",
|
|
55
55
|
"d49e33dfeb72a8257e1853bdb4e11719610b41fb739979f439c4e08b53648705",
|
|
56
|
-
"d7323ac7f5a4f23d1b6a7455c8666a26abca2cfe248e0b9161f93346abdce82a"
|
|
56
|
+
"d7323ac7f5a4f23d1b6a7455c8666a26abca2cfe248e0b9161f93346abdce82a",
|
|
57
|
+
"f399f899aac4bf0008d81c9c9b7f3a6f12927aec5a31f4d1d0b135bec4d71f67"
|
|
57
58
|
],
|
|
58
59
|
"databases.yaml": [
|
|
59
60
|
"0547cffb489a750505941ba773a4be03dccc8217bb358aee12cf2cff663190d3",
|