agentwire-dev 1.44.0__tar.gz → 1.45.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.45.0/.agents/skills/wiki/SKILL.md +105 -0
- agentwire_dev-1.45.0/.claude/skills/wiki/SKILL.md +105 -0
- agentwire_dev-1.45.0/.github/workflows/security.yml +74 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/PKG-INFO +18 -6
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/README.md +16 -4
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/SECURITY.md +17 -3
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/SPONSORS.md +2 -2
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/__main__.py +319 -7
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/cli_safety.py +85 -2
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/config.py +0 -22
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +453 -68
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +459 -72
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/mcp-tool-damage-control.py +453 -68
- agentwire_dev-1.45.0/agentwire/hooks/damage-control/read-tool-damage-control.py +1245 -0
- agentwire_dev-1.45.0/agentwire/hooks/damage-control/rules/control-plane.yaml +24 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/core.yaml +20 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +459 -72
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/mcp_server.py +87 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/onboarding.py +3 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/project_config.py +3 -57
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/agentwire.md +1 -1
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/notifications.md +1 -2
- agentwire_dev-1.45.0/agentwire/safety/_core.py +1144 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/server.py +52 -10
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/session_ready.py +84 -6
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/tmux.conf +15 -1
- agentwire_dev-1.45.0/agentwire/wiki.py +524 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/architecture.md +1 -1
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/internals/damage-control.md +66 -12
- agentwire_dev-1.45.0/docs/wiki/security/damage-control-hardening.md +92 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/security/remote-access-hardening.md +1 -1
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/pyproject.toml +16 -1
- agentwire_dev-1.45.0/tests/unit/test_control_plane_protection.py +338 -0
- agentwire_dev-1.45.0/tests/unit/test_damage_control_bypass.py +168 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_damage_control_sync.py +1 -0
- agentwire_dev-1.45.0/tests/unit/test_idle_nag.py +62 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_project_config.py +13 -83
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_safety_heal.py +7 -6
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_session_ready.py +68 -0
- agentwire_dev-1.45.0/tests/unit/test_skill_install.py +187 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_tmux_template.py +6 -0
- agentwire_dev-1.45.0/tests/unit/test_wiki.py +305 -0
- agentwire_dev-1.44.0/.agents/skills/wiki/SKILL.md +0 -89
- agentwire_dev-1.44.0/agentwire/safety/_core.py +0 -759
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.agents/skills/agentwire-cli/SKILL.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.agents/skills/agentwire-config/SKILL.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.agents/skills/agentwire-desktop-ui/SKILL.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.agents/skills/agentwire-mcp-tools/SKILL.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.agents/skills/agentwire-pi/SKILL.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.agents/skills/agentwire-project-config/SKILL.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.agents/skills/agentwire-scheduler/SKILL.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.github/workflows/pytest.yml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.github/workflows/tts-smoke.yml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/.gitignore +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/AGENTS.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/CLA.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/Dockerfile.local +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/Dockerfile.runpod +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/LICENSE +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/RELEASING.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/completion.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/council/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/council/cli.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/council/inbox.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/council/state.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/council/view.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/devices.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/doctor_voice.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/fetch.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/handoff/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/handoff/git_state.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/handoff/instructions.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/handoff/parser.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/handoff/renderer.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/handoff/schema.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/history.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/agentwire-permission.sh +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/outbound.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/publish.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/idle-handler.sh +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/hooks/queue-processor.sh +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/inbox.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/limits_cli.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/listen.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/locking.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/msg_cli.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/network.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/projects.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/prompt_router.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/prompts/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/prompts/init.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/prompts_cli.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/research.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/anchor.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/correspondent.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-brain.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-conscience.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-critic.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-devils-advocate.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-gut.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-historian.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-member.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/council-orchestrator.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/init.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/orchestrator.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/soul.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/voice.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/worker.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/roles/worktree-session.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/safety/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/scheduler.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/scratchpad.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/security.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/services.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/session_context.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/ssh.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-Echo--black.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-Echo--transparent.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-Echo.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-email-banner.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/announcements.json +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/css/desktop.css +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/css/mobile.css +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/favicon.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/android.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/automaton.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/bot.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/droid.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/drone.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/guardian.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/mech.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/probe.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/robot.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/machines/unit.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/blob.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/cloud.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/crystal.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/flame.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/horned.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/moon.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/slime.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/star.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/projects/winged.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/bear.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/cat.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/crown.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/deer.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/drone.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/fox.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/horse.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/lion.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/robot.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/announcement-modal.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/api.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/artifact-window.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/collage.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/command-palette.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/components/icon-picker.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/components/list-card.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/components/type-tag.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/council-window.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/dead-key-suppressor.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/desktop-manager.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/desktop.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/icon-manager.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/mobile.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/notification-prefs.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/notifications-panel.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/safety-shared.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/safety-window.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/scratchpad.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/service-classification.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/session-id.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/session-window.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/config-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/council-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar/sessions-section.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/sidebar.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/tile-manager.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/toast.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/token-modal.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/utils/ansi.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/utils/auto-refresh.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/utils/swipe.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/voice/autosend-prefs.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/voice/browser-stt.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/voice/browser-tts.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/voice/jargon.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/voice/prompt.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/stt/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/stt/base.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/stt/cloud.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/stt/engine.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/stt/local.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/stt/server_backend.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/stt/stt_server.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tasks.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/desktop.html +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/mobile.html +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templates/pair.html +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/templating.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/gws.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/audio.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/base.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/engines/qwen_base.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/engines/qwen_custom.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/engines/qwen_design.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/kokoro_server.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/local.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tts_server.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/usage_limit.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/utils/speech.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/validation.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/voice_status.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/voiceclone.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/voices/darren.wav +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/voices/default.wav +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/voices/jessica.wav +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/voices/lisa.wav +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/voices/may.wav +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/wiki_audit.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/worktree.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/agentwire/worktree_registry.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/decisions/obsidian-second-brain.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/logo.png +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/INDEX.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/briefing-mode.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/communication/channels.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/communication/hammerspoon.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/communication/handoff.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/concepts.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/council.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/deployment/remote-access.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/deployment/remote-machines.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/glossary.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/internals/portal.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/internals/shell-escaping.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/internals/troubleshooting.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/internals/window-collage.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/quickstart.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/security/secrets.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/services.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/sessions/messaging.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/sessions/pi.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/sessions/prompt-routing.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/sessions/window-sizing.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/sessions/worktree-sessions.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/usage-limit-recovery.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/voice/shim-contract.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/voice/stt-cloud.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/docs/wiki/voice/tts-self-hosted.md +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/requirements-tts.txt +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/conftest.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/fixtures/sample_agentwire.yml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/integration/test_council_portal.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/integration/test_scheduler_board.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/integration/test_server_websockets.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/integration/test_worktree_cmd.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_announcements.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_build_agent_command.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_channels.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_cli_commands.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_cli_output.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_cli_safety.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_config.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_council_cli.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_council_inbox.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_council_state.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_council_view.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_damage_control_hooks.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_devices.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_doctor_voice.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_file_io.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_handoff_git_state.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_handoff_instructions.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_handoff_parser.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_handoff_renderer.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_hooks_install.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_idle_handler.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_inbox.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_mcp_server.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_mcp_tools_args.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_msg_cli.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_portal_api.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_prompt_router.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_rebuild_guard.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_roles.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_safety_disabled_rules.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_safety_escape_hatch.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_safety_kill_switch.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_scheduler.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_scheduler_parsing.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_scratchpad.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_security.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_server_async.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_server_pure.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_services.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_session_context.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_speech_tags.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_ssh.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_stt_backend.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_stt_cloud.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_stt_engine.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_task_cli.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_tasks.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_templating.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_terminal_resize.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_tts_engine_resolution.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_tts_local.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_usage_limit.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_validation.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_voice_status.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_wiki_audit.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_worktree.py +0 -0
- {agentwire_dev-1.44.0 → agentwire_dev-1.45.0}/tests/unit/test_worktree_registry.py +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wiki
|
|
3
|
+
description: "Manage the agentwire LLM Wiki knowledge base. Authoring is in-context; mechanical ops (query, lint, status, new, done) run through the deterministic `agentwire wiki` CLI / `wiki_*` MCP tools. Use when recording knowledge, querying it, or health-checking the wiki. Subcommands: /wiki ingest, /wiki query <question>, /wiki lint (incl. ground-truth audit against the codebase)"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AgentWire Wiki
|
|
7
|
+
|
|
8
|
+
LLM-maintained knowledge base at `~/.agentwire/wiki/`. Read `~/.agentwire/wiki/AGENTS.md` for the full schema and conventions.
|
|
9
|
+
|
|
10
|
+
**How the loop actually works:** authoring is **in-context** — the session that learns something writes the page itself (`Write`/`Edit` into `wiki/<category>/<name>.md`), with full context, for free. That's the working path; there is **no scheduled batch ingester**. The *mechanical* parts — searching, health-checking, scaffolding, archiving sources — are deterministic and run through the `agentwire wiki` CLI (and the `wiki_query` / `wiki_lint` / `wiki_status` MCP tools), exactly like `/handoff` splits "LLM distills in-context, CLI renders deterministically."
|
|
11
|
+
|
|
12
|
+
| Mechanical op | Command |
|
|
13
|
+
|---|---|
|
|
14
|
+
| Search the wiki | `agentwire wiki query <q> [--limit N] [--json]` / MCP `wiki_query` |
|
|
15
|
+
| Health-check (structural + ground-truth) | `agentwire wiki lint [--strict] [--json]` / MCP `wiki_lint` |
|
|
16
|
+
| Overview (counts, unprocessed raw, health) | `agentwire wiki status [--json]` / MCP `wiki_status` |
|
|
17
|
+
| Scaffold a page with correct frontmatter | `agentwire wiki new <category> <name> [--title T]` |
|
|
18
|
+
| Archive a consumed source | `agentwire wiki done <rawfile>` |
|
|
19
|
+
|
|
20
|
+
(All stdlib-only — they run from a source checkout with no rebuild.)
|
|
21
|
+
|
|
22
|
+
## Subcommands
|
|
23
|
+
|
|
24
|
+
### `/wiki ingest`
|
|
25
|
+
|
|
26
|
+
**Authoring is in-context and primary.** When you discover something worth keeping, write or update the page *now*, in your own session — `agentwire wiki new <category> <name>` scaffolds the frontmatter, then you fill in the body and add `[[page-name]]` wikilinks. This is how the wiki is maintained; don't wait for a batch job (there isn't one).
|
|
27
|
+
|
|
28
|
+
`raw/` is an **optional verbatim-source inbox** — a place to stash an article, gist, transcript, or findings dump you might author from later. It is **not** the primary path and nothing drains it automatically.
|
|
29
|
+
|
|
30
|
+
**To author from a stranded raw source:**
|
|
31
|
+
1. Read the file in `raw/`.
|
|
32
|
+
2. Identify entities (technologies, patterns, APIs, research topics) and, for each, create (`agentwire wiki new …`) or update the matching `wiki/<category>/<name>.md` — in-context, citing the raw file as a source.
|
|
33
|
+
3. Add `[[page-name]]` wikilinks for cross-references.
|
|
34
|
+
4. When the source is consumed, archive it: **`agentwire wiki done <rawfile>`** moves `raw/<f>` → `raw/processed/<f>` (content is never edited — only relocated, so immutability holds; "unprocessed = files directly in `raw/`" stays a trivial check, no `.ingested` marker).
|
|
35
|
+
|
|
36
|
+
**Never edit the *content* of files in `raw/`** — they are immutable source material. `wiki done` only relocates them.
|
|
37
|
+
|
|
38
|
+
### `/wiki query <question>`
|
|
39
|
+
|
|
40
|
+
Answer a question grounded in wiki content.
|
|
41
|
+
|
|
42
|
+
**Steps:**
|
|
43
|
+
1. **`agentwire wiki query "<question>"`** (or MCP `wiki_query`) — deterministic ranked search (name/title weighted over body), returns top pages with `path + score + snippet`.
|
|
44
|
+
2. Read the top pages it points at.
|
|
45
|
+
3. Synthesize an answer citing specific wiki pages. (The CLI does **not** call an LLM — *you* synthesize, in your own context.)
|
|
46
|
+
4. If the wiki doesn't have enough information, say so clearly — do not hallucinate.
|
|
47
|
+
5. If you discover new knowledge while answering, write/update the relevant wiki pages (in-context).
|
|
48
|
+
|
|
49
|
+
### `/wiki lint`
|
|
50
|
+
|
|
51
|
+
Health check the wiki. Two passes: a **structural** pass (links, freshness, frontmatter) and a **ground-truth audit** that verifies concrete claims against the actual codebase. Both run from one command:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
agentwire wiki lint # structural + ground-truth, report-only
|
|
55
|
+
agentwire wiki lint --json # machine-readable findings
|
|
56
|
+
agentwire wiki lint --strict # exit 1 when issues found (CI)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Structural pass (implemented as code in `agentwire/wiki.py`):**
|
|
60
|
+
- **Stale pages**: `last_updated` older than 90 days
|
|
61
|
+
- **Orphaned pages**: no other page links to them via `[[wikilink]]`
|
|
62
|
+
- **Broken wikilinks**: `[[page-name]]` pointing to a non-existent page
|
|
63
|
+
- **Missing/invalid frontmatter**: no frontmatter, missing `name`/`last_updated`, or an unparseable date
|
|
64
|
+
|
|
65
|
+
It does NOT auto-fix — review and decide.
|
|
66
|
+
|
|
67
|
+
#### Ground-truth audit
|
|
68
|
+
|
|
69
|
+
The wiki accrues concrete claims about the codebase — `agentwire` subcommands and flags, repo file paths, config keys, qualified Python symbols — that nothing ever verifies. Left unchecked they rot into confident-but-wrong, which is worse than no wiki. This audit extracts the checkable assertions from every page and flags the ones that no longer resolve against the source. **`agentwire wiki lint` folds this pass in automatically** alongside the structural checks; the standalone module below is the same engine, handy for pointing at a different wiki/codebase.
|
|
70
|
+
|
|
71
|
+
**Run it** (from a checkout of the agentwire repo — stdlib only, no build/install needed):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
agentwire wiki lint # structural + this ground-truth pass
|
|
75
|
+
python -m agentwire.wiki_audit # ground-truth pass only, against this repo
|
|
76
|
+
python -m agentwire.wiki_audit --json # machine-readable findings
|
|
77
|
+
python -m agentwire.wiki_audit --strict # exit 1 when drift is found (CI)
|
|
78
|
+
python -m agentwire.wiki_audit \
|
|
79
|
+
--wiki-dir <dir> --repo-dir <repo> # point at a different wiki / codebase
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Each finding is reported as `wiki_file:line [kind] claim → reason`, so you can jump straight to the stale line.
|
|
83
|
+
|
|
84
|
+
**What it checks (precision over recall — it would rather miss a stale claim than cry wolf on a true one):**
|
|
85
|
+
|
|
86
|
+
| Kind | Claim it verifies | How |
|
|
87
|
+
|------|-------------------|-----|
|
|
88
|
+
| `subcommand` | `` `agentwire <cmd>` `` in a code span | `<cmd>` must be a registered `add_parser("<cmd>")` |
|
|
89
|
+
| `flag` | `--flag` inside an `agentwire …` command span | must be a declared `add_argument("--flag")` |
|
|
90
|
+
| `path` | repo-relative paths under `agentwire/ docs/ scripts/ tests/ examples/ .Codex/ .github/` | must exist on disk |
|
|
91
|
+
| `symbol` | `` `module.symbol` `` where `agentwire/<module>.py` exists | `symbol` must be defined in that module |
|
|
92
|
+
| `config-key` | dotted key near a config-file mention | every segment must be a field on a `@dataclass` in `config.py` |
|
|
93
|
+
|
|
94
|
+
Scoping that keeps it quiet: flags/subcommands are only read inside code spans (bare prose mentioning `agentwire` or a flag isn't a claim); paths under the wiki's own `wiki/`/`raw/` trees and `~`/absolute paths are ignored; common method calls (`config.get`), filenames (`__main__.py`), and version strings (`agentwire v1.35.1`) are not mistaken for claims.
|
|
95
|
+
|
|
96
|
+
**Act on it:** treat each finding as "a human renamed/removed/moved something and the wiki didn't follow." Confirm against the code, then update the wiki page (or, if the page is a deliberate historical record — e.g. a retrospective on removed code — leave it and note that in the page). As with the structural pass, the audit **never auto-fixes**.
|
|
97
|
+
|
|
98
|
+
## Guidelines
|
|
99
|
+
|
|
100
|
+
- Always read `~/.agentwire/wiki/AGENTS.md` first for the current schema
|
|
101
|
+
- One page per entity — check before creating duplicates
|
|
102
|
+
- Practical over theoretical — "how we use it" and "what broke" over textbook definitions
|
|
103
|
+
- Include code snippets, commands, config examples
|
|
104
|
+
- Date your updates in frontmatter `last_updated`
|
|
105
|
+
- Cite sources (URLs, commit hashes, issue numbers)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wiki
|
|
3
|
+
description: "Manage the agentwire LLM Wiki knowledge base. Authoring is in-context; mechanical ops (query, lint, status, new, done) run through the deterministic `agentwire wiki` CLI / `wiki_*` MCP tools. Use when recording knowledge, querying it, or health-checking the wiki. Subcommands: /wiki ingest, /wiki query <question>, /wiki lint (incl. ground-truth audit against the codebase)"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AgentWire Wiki
|
|
7
|
+
|
|
8
|
+
LLM-maintained knowledge base at `~/.agentwire/wiki/`. Read `~/.agentwire/wiki/CLAUDE.md` for the full schema and conventions.
|
|
9
|
+
|
|
10
|
+
**How the loop actually works:** authoring is **in-context** — the session that learns something writes the page itself (`Write`/`Edit` into `wiki/<category>/<name>.md`), with full context, for free. That's the working path; there is **no scheduled batch ingester**. The *mechanical* parts — searching, health-checking, scaffolding, archiving sources — are deterministic and run through the `agentwire wiki` CLI (and the `wiki_query` / `wiki_lint` / `wiki_status` MCP tools), exactly like `/handoff` splits "LLM distills in-context, CLI renders deterministically."
|
|
11
|
+
|
|
12
|
+
| Mechanical op | Command |
|
|
13
|
+
|---|---|
|
|
14
|
+
| Search the wiki | `agentwire wiki query <q> [--limit N] [--json]` / MCP `wiki_query` |
|
|
15
|
+
| Health-check (structural + ground-truth) | `agentwire wiki lint [--strict] [--json]` / MCP `wiki_lint` |
|
|
16
|
+
| Overview (counts, unprocessed raw, health) | `agentwire wiki status [--json]` / MCP `wiki_status` |
|
|
17
|
+
| Scaffold a page with correct frontmatter | `agentwire wiki new <category> <name> [--title T]` |
|
|
18
|
+
| Archive a consumed source | `agentwire wiki done <rawfile>` |
|
|
19
|
+
|
|
20
|
+
(All stdlib-only — they run from a source checkout with no rebuild.)
|
|
21
|
+
|
|
22
|
+
## Subcommands
|
|
23
|
+
|
|
24
|
+
### `/wiki ingest`
|
|
25
|
+
|
|
26
|
+
**Authoring is in-context and primary.** When you discover something worth keeping, write or update the page *now*, in your own session — `agentwire wiki new <category> <name>` scaffolds the frontmatter, then you fill in the body and add `[[page-name]]` wikilinks. This is how the wiki is maintained; don't wait for a batch job (there isn't one).
|
|
27
|
+
|
|
28
|
+
`raw/` is an **optional verbatim-source inbox** — a place to stash an article, gist, transcript, or findings dump you might author from later. It is **not** the primary path and nothing drains it automatically.
|
|
29
|
+
|
|
30
|
+
**To author from a stranded raw source:**
|
|
31
|
+
1. Read the file in `raw/`.
|
|
32
|
+
2. Identify entities (technologies, patterns, APIs, research topics) and, for each, create (`agentwire wiki new …`) or update the matching `wiki/<category>/<name>.md` — in-context, citing the raw file as a source.
|
|
33
|
+
3. Add `[[page-name]]` wikilinks for cross-references.
|
|
34
|
+
4. When the source is consumed, archive it: **`agentwire wiki done <rawfile>`** moves `raw/<f>` → `raw/processed/<f>` (content is never edited — only relocated, so immutability holds; "unprocessed = files directly in `raw/`" stays a trivial check, no `.ingested` marker).
|
|
35
|
+
|
|
36
|
+
**Never edit the *content* of files in `raw/`** — they are immutable source material. `wiki done` only relocates them.
|
|
37
|
+
|
|
38
|
+
### `/wiki query <question>`
|
|
39
|
+
|
|
40
|
+
Answer a question grounded in wiki content.
|
|
41
|
+
|
|
42
|
+
**Steps:**
|
|
43
|
+
1. **`agentwire wiki query "<question>"`** (or MCP `wiki_query`) — deterministic ranked search (name/title weighted over body), returns top pages with `path + score + snippet`.
|
|
44
|
+
2. Read the top pages it points at.
|
|
45
|
+
3. Synthesize an answer citing specific wiki pages. (The CLI does **not** call an LLM — *you* synthesize, in your own context.)
|
|
46
|
+
4. If the wiki doesn't have enough information, say so clearly — do not hallucinate.
|
|
47
|
+
5. If you discover new knowledge while answering, write/update the relevant wiki pages (in-context).
|
|
48
|
+
|
|
49
|
+
### `/wiki lint`
|
|
50
|
+
|
|
51
|
+
Health check the wiki. Two passes: a **structural** pass (links, freshness, frontmatter) and a **ground-truth audit** that verifies concrete claims against the actual codebase. Both run from one command:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
agentwire wiki lint # structural + ground-truth, report-only
|
|
55
|
+
agentwire wiki lint --json # machine-readable findings
|
|
56
|
+
agentwire wiki lint --strict # exit 1 when issues found (CI)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Structural pass (implemented as code in `agentwire/wiki.py`):**
|
|
60
|
+
- **Stale pages**: `last_updated` older than 90 days
|
|
61
|
+
- **Orphaned pages**: no other page links to them via `[[wikilink]]`
|
|
62
|
+
- **Broken wikilinks**: `[[page-name]]` pointing to a non-existent page
|
|
63
|
+
- **Missing/invalid frontmatter**: no frontmatter, missing `name`/`last_updated`, or an unparseable date
|
|
64
|
+
|
|
65
|
+
It does NOT auto-fix — review and decide.
|
|
66
|
+
|
|
67
|
+
#### Ground-truth audit
|
|
68
|
+
|
|
69
|
+
The wiki accrues concrete claims about the codebase — `agentwire` subcommands and flags, repo file paths, config keys, qualified Python symbols — that nothing ever verifies. Left unchecked they rot into confident-but-wrong, which is worse than no wiki. This audit extracts the checkable assertions from every page and flags the ones that no longer resolve against the source. **`agentwire wiki lint` folds this pass in automatically** alongside the structural checks; the standalone module below is the same engine, handy for pointing at a different wiki/codebase.
|
|
70
|
+
|
|
71
|
+
**Run it** (from a checkout of the agentwire repo — stdlib only, no build/install needed):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
agentwire wiki lint # structural + this ground-truth pass
|
|
75
|
+
python -m agentwire.wiki_audit # ground-truth pass only, against this repo
|
|
76
|
+
python -m agentwire.wiki_audit --json # machine-readable findings
|
|
77
|
+
python -m agentwire.wiki_audit --strict # exit 1 when drift is found (CI)
|
|
78
|
+
python -m agentwire.wiki_audit \
|
|
79
|
+
--wiki-dir <dir> --repo-dir <repo> # point at a different wiki / codebase
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Each finding is reported as `wiki_file:line [kind] claim → reason`, so you can jump straight to the stale line.
|
|
83
|
+
|
|
84
|
+
**What it checks (precision over recall — it would rather miss a stale claim than cry wolf on a true one):**
|
|
85
|
+
|
|
86
|
+
| Kind | Claim it verifies | How |
|
|
87
|
+
|------|-------------------|-----|
|
|
88
|
+
| `subcommand` | `` `agentwire <cmd>` `` in a code span | `<cmd>` must be a registered `add_parser("<cmd>")` |
|
|
89
|
+
| `flag` | `--flag` inside an `agentwire …` command span | must be a declared `add_argument("--flag")` |
|
|
90
|
+
| `path` | repo-relative paths under `agentwire/ docs/ scripts/ tests/ examples/ .claude/ .github/` | must exist on disk |
|
|
91
|
+
| `symbol` | `` `module.symbol` `` where `agentwire/<module>.py` exists | `symbol` must be defined in that module |
|
|
92
|
+
| `config-key` | dotted key near a config-file mention | every segment must be a field on a `@dataclass` in `config.py` |
|
|
93
|
+
|
|
94
|
+
Scoping that keeps it quiet: flags/subcommands are only read inside code spans (bare prose mentioning `agentwire` or a flag isn't a claim); paths under the wiki's own `wiki/`/`raw/` trees and `~`/absolute paths are ignored; common method calls (`config.get`), filenames (`__main__.py`), and version strings (`agentwire v1.35.1`) are not mistaken for claims.
|
|
95
|
+
|
|
96
|
+
**Act on it:** treat each finding as "a human renamed/removed/moved something and the wiki didn't follow." Confirm against the code, then update the wiki page (or, if the page is a deliberate historical record — e.g. a retrospective on removed code — leave it and note that in the page). As with the structural pass, the audit **never auto-fixes**.
|
|
97
|
+
|
|
98
|
+
## Guidelines
|
|
99
|
+
|
|
100
|
+
- Always read `~/.agentwire/wiki/CLAUDE.md` first for the current schema
|
|
101
|
+
- One page per entity — check before creating duplicates
|
|
102
|
+
- Practical over theoretical — "how we use it" and "what broke" over textbook definitions
|
|
103
|
+
- Include code snippets, commands, config examples
|
|
104
|
+
- Date your updates in frontmatter `last_updated`
|
|
105
|
+
- Cite sources (URLs, commit hashes, issue numbers)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Security CI for the damage-control matcher.
|
|
2
|
+
#
|
|
3
|
+
# Three independent signals:
|
|
4
|
+
# 1. bypass-corpus — the load-bearing gate. Asserts the known evasion vectors
|
|
5
|
+
# (quoting/escaping, $VAR, substitution, tilde/$HOME secret
|
|
6
|
+
# reads, non-rm deletion) stay BLOCK/ASK and a corpus of
|
|
7
|
+
# safe everyday commands keeps PASSing. Merges gate on this.
|
|
8
|
+
# 2. bandit — advisory (non-blocking) static scan. There are intentional
|
|
9
|
+
# `shell=True` sites (scheduler gates, service healthchecks),
|
|
10
|
+
# so this informs review rather than blocking it.
|
|
11
|
+
# 3. pip-audit — known-vuln scan over the resolved dependency set, on PRs
|
|
12
|
+
# and a weekly cron.
|
|
13
|
+
name: security
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
push:
|
|
17
|
+
branches: [main]
|
|
18
|
+
pull_request:
|
|
19
|
+
schedule:
|
|
20
|
+
- cron: "0 7 * * 1" # Mondays 07:00 UTC
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
bypass-corpus:
|
|
24
|
+
name: damage-control bypass corpus (merge gate)
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- name: Install uv
|
|
29
|
+
uses: astral-sh/setup-uv@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.12"
|
|
32
|
+
- name: Sync dependencies
|
|
33
|
+
run: uv sync --extra dev
|
|
34
|
+
- name: Hooks are in sync with _core.py
|
|
35
|
+
run: uv run --no-sync python scripts/regen_damage_control_hooks.py --check
|
|
36
|
+
- name: Run bypass + sync + control-plane corpus
|
|
37
|
+
run: >
|
|
38
|
+
uv run --no-sync pytest -q
|
|
39
|
+
tests/unit/test_damage_control_bypass.py
|
|
40
|
+
tests/unit/test_damage_control_sync.py
|
|
41
|
+
tests/unit/test_control_plane_protection.py
|
|
42
|
+
|
|
43
|
+
bandit:
|
|
44
|
+
name: bandit (advisory)
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
continue-on-error: true # intentional shell=True sites — advisory only
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/checkout@v4
|
|
49
|
+
- name: Install uv
|
|
50
|
+
uses: astral-sh/setup-uv@v5
|
|
51
|
+
with:
|
|
52
|
+
python-version: "3.12"
|
|
53
|
+
- name: Run bandit
|
|
54
|
+
run: uvx bandit -r agentwire -ll
|
|
55
|
+
|
|
56
|
+
pip-audit:
|
|
57
|
+
name: pip-audit (advisory)
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
# Advisory, not a merge gate: most flagged CVEs live in heavy OPTIONAL deps
|
|
60
|
+
# (torch/onnxruntime pulled by kokoro/moonshine) and are transitive, so
|
|
61
|
+
# hard-blocking every PR on them is noise. Keep it running on PRs + the
|
|
62
|
+
# weekly cron for visibility; the damage-control bypass corpus is the hard
|
|
63
|
+
# merge gate. Direct portal-facing deps are bumped explicitly in pyproject.
|
|
64
|
+
continue-on-error: true
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/checkout@v4
|
|
67
|
+
- name: Install uv
|
|
68
|
+
uses: astral-sh/setup-uv@v5
|
|
69
|
+
with:
|
|
70
|
+
python-version: "3.12"
|
|
71
|
+
- name: Export locked dependencies
|
|
72
|
+
run: uv export --no-emit-project --format requirements-txt -o requirements.txt
|
|
73
|
+
- name: Audit dependencies
|
|
74
|
+
run: uvx pip-audit -r requirements.txt
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentwire-dev
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.45.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
|
|
@@ -685,7 +685,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
685
685
|
Classifier: Topic :: Software Development :: User Interfaces
|
|
686
686
|
Requires-Python: >=3.10
|
|
687
687
|
Requires-Dist: aiohttp-jinja2>=1.6
|
|
688
|
-
Requires-Dist: aiohttp>=3.
|
|
688
|
+
Requires-Dist: aiohttp>=3.13.4
|
|
689
689
|
Requires-Dist: av>=12.0.0
|
|
690
690
|
Requires-Dist: jinja2>=3.1.0
|
|
691
691
|
Requires-Dist: kokoro-onnx>=0.4.9; python_version < '3.14'
|
|
@@ -734,7 +734,6 @@ Description-Content-Type: text/markdown
|
|
|
734
734
|
<a href="https://github.com/dotdevdotdev/agentwire-dev/stargazers"><img src="https://img.shields.io/github/stars/dotdevdotdev/agentwire-dev?style=flat&logo=github&color=00d4ff" alt="GitHub Stars"></a>
|
|
735
735
|
<a href="https://pypi.org/project/agentwire-dev/"><img src="https://img.shields.io/pypi/pyversions/agentwire-dev" alt="Python"></a>
|
|
736
736
|
<a href="https://github.com/dotdevdotdev/agentwire-dev/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dotdevdotdev/agentwire-dev" alt="License"></a>
|
|
737
|
-
<a href="https://discord.gg/bspFZNTdUr"><img src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
|
|
738
737
|
</p>
|
|
739
738
|
|
|
740
739
|
---
|
|
@@ -774,7 +773,6 @@ pip install agentwire-dev
|
|
|
774
773
|
|
|
775
774
|
# Setup (interactive)
|
|
776
775
|
agentwire init
|
|
777
|
-
agentwire generate-certs
|
|
778
776
|
|
|
779
777
|
# Run
|
|
780
778
|
agentwire portal start
|
|
@@ -785,7 +783,22 @@ agentwire portal start
|
|
|
785
783
|
|
|
786
784
|
**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).
|
|
787
785
|
|
|
788
|
-
|
|
786
|
+
### Phone / LAN Access
|
|
787
|
+
|
|
788
|
+
The portal binds to loopback (`127.0.0.1`) by default. To access the portal from your phone, tablet, or other devices on your local network:
|
|
789
|
+
|
|
790
|
+
1. **Generate SSL certificates** (required for microphone access over non-loopback connections):
|
|
791
|
+
```bash
|
|
792
|
+
agentwire generate-certs
|
|
793
|
+
```
|
|
794
|
+
2. **Enable LAN access**: set `server.host: 0.0.0.0` in `~/.agentwire/config.yaml`.
|
|
795
|
+
3. **Get your auth token**: non-loopback connections require a bearer token. Print it with:
|
|
796
|
+
```bash
|
|
797
|
+
agentwire portal token
|
|
798
|
+
```
|
|
799
|
+
4. **Connect**: Open `https://<your-machine-ip>:8765` on your phone and enter the token when prompted.
|
|
800
|
+
|
|
801
|
+
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.
|
|
789
802
|
|
|
790
803
|
<details>
|
|
791
804
|
<summary><strong>Platform-specific instructions</strong></summary>
|
|
@@ -1002,7 +1015,6 @@ Quick links:
|
|
|
1002
1015
|
|
|
1003
1016
|
## Community
|
|
1004
1017
|
|
|
1005
|
-
- [Discord](https://discord.gg/bspFZNTdUr) - Chat, support, feature requests
|
|
1006
1018
|
- [Issues](https://github.com/dotdevdotdev/agentwire-dev/issues) - Bug reports
|
|
1007
1019
|
- [Website](https://agentwire.dev) - Docs and demos
|
|
1008
1020
|
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
<a href="https://github.com/dotdevdotdev/agentwire-dev/stargazers"><img src="https://img.shields.io/github/stars/dotdevdotdev/agentwire-dev?style=flat&logo=github&color=00d4ff" alt="GitHub Stars"></a>
|
|
13
13
|
<a href="https://pypi.org/project/agentwire-dev/"><img src="https://img.shields.io/pypi/pyversions/agentwire-dev" alt="Python"></a>
|
|
14
14
|
<a href="https://github.com/dotdevdotdev/agentwire-dev/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dotdevdotdev/agentwire-dev" alt="License"></a>
|
|
15
|
-
<a href="https://discord.gg/bspFZNTdUr"><img src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
|
|
16
15
|
</p>
|
|
17
16
|
|
|
18
17
|
---
|
|
@@ -52,7 +51,6 @@ pip install agentwire-dev
|
|
|
52
51
|
|
|
53
52
|
# Setup (interactive)
|
|
54
53
|
agentwire init
|
|
55
|
-
agentwire generate-certs
|
|
56
54
|
|
|
57
55
|
# Run
|
|
58
56
|
agentwire portal start
|
|
@@ -63,7 +61,22 @@ agentwire portal start
|
|
|
63
61
|
|
|
64
62
|
**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).
|
|
65
63
|
|
|
66
|
-
|
|
64
|
+
### Phone / LAN Access
|
|
65
|
+
|
|
66
|
+
The portal binds to loopback (`127.0.0.1`) by default. To access the portal from your phone, tablet, or other devices on your local network:
|
|
67
|
+
|
|
68
|
+
1. **Generate SSL certificates** (required for microphone access over non-loopback connections):
|
|
69
|
+
```bash
|
|
70
|
+
agentwire generate-certs
|
|
71
|
+
```
|
|
72
|
+
2. **Enable LAN access**: set `server.host: 0.0.0.0` in `~/.agentwire/config.yaml`.
|
|
73
|
+
3. **Get your auth token**: non-loopback connections require a bearer token. Print it with:
|
|
74
|
+
```bash
|
|
75
|
+
agentwire portal token
|
|
76
|
+
```
|
|
77
|
+
4. **Connect**: Open `https://<your-machine-ip>:8765` on your phone and enter the token when prompted.
|
|
78
|
+
|
|
79
|
+
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.
|
|
67
80
|
|
|
68
81
|
<details>
|
|
69
82
|
<summary><strong>Platform-specific instructions</strong></summary>
|
|
@@ -280,7 +293,6 @@ Quick links:
|
|
|
280
293
|
|
|
281
294
|
## Community
|
|
282
295
|
|
|
283
|
-
- [Discord](https://discord.gg/bspFZNTdUr) - Chat, support, feature requests
|
|
284
296
|
- [Issues](https://github.com/dotdevdotdev/agentwire-dev/issues) - Bug reports
|
|
285
297
|
- [Website](https://agentwire.dev) - Docs and demos
|
|
286
298
|
|
|
@@ -39,11 +39,25 @@ This security policy applies to:
|
|
|
39
39
|
|
|
40
40
|
AgentWire includes built-in security features:
|
|
41
41
|
|
|
42
|
-
- **Damage Control Hooks:** Block 300+ dangerous command patterns
|
|
43
|
-
|
|
42
|
+
- **Damage Control Hooks:** Block 300+ dangerous command patterns. Commands are
|
|
43
|
+
matched after shell-aware normalization (quote/escape stripping, simple `$VAR`
|
|
44
|
+
resolution); constructs that can't be statically verified (command
|
|
45
|
+
substitution, `eval`, `base64 -d | sh`) fail closed.
|
|
46
|
+
- **Path Protection:** Prevent access to sensitive files (`.env`, SSH keys,
|
|
47
|
+
credentials) across shell, file edits/writes, **and native content reads**
|
|
48
|
+
(Read/Grep/Glob). Committed env templates (`.env.example`, `.sample`,
|
|
49
|
+
`.template`, `.dist`) are treated as secret-free and remain readable.
|
|
44
50
|
- **Audit Logging:** All blocked operations are logged
|
|
45
51
|
|
|
46
|
-
See `docs/wiki/internals/damage-control.md` for details
|
|
52
|
+
See `docs/wiki/internals/damage-control.md` for details, and
|
|
53
|
+
`docs/wiki/security/damage-control-hardening.md` for the 2026-06 matcher
|
|
54
|
+
hardening (control-plane path coverage, tilde/`$HOME` canonicalization, `.env`
|
|
55
|
+
whole-component matching, shell-aware fail-closed matching, read-surface
|
|
56
|
+
policing) and the new fail-closed-when-unattended behavior.
|
|
57
|
+
|
|
58
|
+
### Redundant Permissions Bypass (`--dangerously-skip-permissions`)
|
|
59
|
+
|
|
60
|
+
By default, AgentWire initializes Claude Code with the `--dangerously-skip-permissions` flag. This is safe because AgentWire implements its own **Damage Control Hooks** at the system shell level (installed via `agentwire hooks install`). Rather than relying on fragile, prompt-based AI dialogs for command approval, AgentWire intercepts and enforces safety rules directly in the shell. Bypassing Claude's built-in prompts prevents unnecessary interruptions and speeds up agent execution while keeping AgentWire's compensating shell-level controls in force.
|
|
47
61
|
|
|
48
62
|
## Trust Model
|
|
49
63
|
|
|
@@ -35,11 +35,11 @@ AgentWire is made possible by these generous supporters.
|
|
|
35
35
|
|
|
36
36
|
| Tier | Amount | What you get |
|
|
37
37
|
|---|---|---|
|
|
38
|
-
| **Supporter** | $5/mo | Name in SPONSORS.md
|
|
38
|
+
| **Supporter** | $5/mo | Name in SPONSORS.md |
|
|
39
39
|
| **Backer** | $15/mo | Everything in Supporter · Priority responses on your GitHub issues · Input on what gets built next |
|
|
40
40
|
| **Pro** | $35/mo | Everything in Backer · Early access to new features · Vote on roadmap priorities · Beta branch access |
|
|
41
41
|
| **Team** | $100/mo | Everything in Pro · Logo in README · Monthly 30-minute support call · Priority bug fixes |
|
|
42
|
-
| **Enterprise** | $500/mo | Everything in Team ·
|
|
42
|
+
| **Enterprise** | $500/mo | Everything in Team · 48-hour bug response · Quarterly roadmap review · Featured logo placement |
|
|
43
43
|
|
|
44
44
|
### One-Time
|
|
45
45
|
|