agentwire-dev 1.52.0__tar.gz → 1.53.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.
Files changed (474) hide show
  1. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/workflows/security.yml +3 -3
  2. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/CONTRIBUTING.md +10 -20
  3. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/Dockerfile.local +2 -2
  4. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/PKG-INFO +21 -12
  5. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/README.md +16 -11
  6. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/__init__.py +1 -1
  7. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/__main__.py +3 -1
  8. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/channels_cli.py +4 -1
  9. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/completion.py +0 -232
  10. agentwire_dev-1.53.0/agentwire/config_cli.py +318 -0
  11. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/core.py +184 -15
  12. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/doctor_cli.py +13 -1
  13. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/history.py +0 -30
  14. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/idle-handler.sh +9 -1
  15. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/inbox.py +66 -11
  16. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/limits_cli.py +131 -24
  17. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/locking.py +0 -24
  18. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_desktop.py +4 -11
  19. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_voice.py +2 -9
  20. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/notify_cli.py +38 -6
  21. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/onboarding.py +72 -11
  22. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/pane_cli.py +97 -81
  23. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/pane_manager.py +0 -70
  24. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/portal_cli.py +0 -43
  25. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/prompt_router.py +81 -11
  26. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/config.py +2 -2
  27. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/desktop.py +13 -26
  28. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/notify.py +4 -0
  29. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/permission.py +26 -34
  30. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/sessions.py +11 -16
  31. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/sessions_admin.py +22 -33
  32. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/voice.py +3 -8
  33. agentwire_dev-1.53.0/agentwire/scheduler/__init__.py +111 -0
  34. agentwire_dev-1.53.0/agentwire/scheduler/dispatch.py +773 -0
  35. agentwire_dev-1.53.0/agentwire/scheduler/gates.py +146 -0
  36. agentwire_dev-1.53.0/agentwire/scheduler/loop.py +209 -0
  37. agentwire_dev-1.53.0/agentwire/scheduler/models.py +179 -0
  38. agentwire_dev-1.53.0/agentwire/scheduler/report.py +259 -0
  39. agentwire_dev-1.53.0/agentwire/scheduler/schedule.py +362 -0
  40. agentwire_dev-1.53.0/agentwire/scheduler/state.py +233 -0
  41. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/server.py +311 -127
  42. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/session_cli.py +35 -146
  43. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/session_context.py +0 -23
  44. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/session_ready.py +46 -20
  45. agentwire_dev-1.53.0/agentwire/static/apple-touch-icon.png +0 -0
  46. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/css/desktop.css +31 -0
  47. agentwire_dev-1.53.0/agentwire/static/favicon-32.png +0 -0
  48. agentwire_dev-1.53.0/agentwire/static/favicon-64.png +0 -0
  49. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/desktop.js +46 -89
  50. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/mobile.js +30 -93
  51. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/notifications-panel.js +62 -2
  52. agentwire_dev-1.53.0/agentwire/static/js/ptt.js +148 -0
  53. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/session-window.js +75 -132
  54. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/system_cli.py +63 -39
  55. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/base.html +3 -2
  56. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/mobile.html +1 -1
  57. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/pair.html +1 -1
  58. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts_cli.py +48 -19
  59. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/usage_limit.py +8 -2
  60. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/utils/paths.py +0 -11
  61. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/validation.py +1 -117
  62. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/voiceclone.py +0 -31
  63. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/worktree.py +0 -50
  64. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/quickstart.md +15 -8
  65. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/sessions/messaging.md +11 -1
  66. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/sessions/prompt-routing.md +14 -3
  67. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/usage-limit-recovery.md +15 -8
  68. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/pyproject.toml +10 -6
  69. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_cli_commands.py +4 -2
  70. agentwire_dev-1.53.0/tests/unit/test_config_cli.py +181 -0
  71. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_inbox.py +198 -28
  72. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_init_command.py +3 -2
  73. agentwire_dev-1.53.0/tests/unit/test_install_parity.py +161 -0
  74. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_mcp_server.py +24 -21
  75. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_msg_cli.py +8 -2
  76. agentwire_dev-1.53.0/tests/unit/test_notify_cli.py +95 -0
  77. agentwire_dev-1.53.0/tests/unit/test_onboarding_reinit.py +91 -0
  78. agentwire_dev-1.53.0/tests/unit/test_pip_environment.py +58 -0
  79. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_portal_api.py +133 -34
  80. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_rebuild_guard.py +103 -3
  81. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_scheduler.py +1 -1
  82. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_server_async.py +4 -4
  83. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_session_ready.py +145 -12
  84. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_tts_local.py +1 -7
  85. agentwire_dev-1.52.0/agentwire/scheduler.py +0 -2090
  86. agentwire_dev-1.52.0/agentwire/static/favicon.png +0 -0
  87. agentwire_dev-1.52.0/agentwire/voices/darren.wav +0 -0
  88. agentwire_dev-1.52.0/agentwire/voices/default.wav +0 -0
  89. agentwire_dev-1.52.0/agentwire/voices/jessica.wav +0 -0
  90. agentwire_dev-1.52.0/agentwire/voices/lisa.wav +0 -0
  91. agentwire_dev-1.52.0/agentwire/voices/may.wav +0 -0
  92. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.agentwire.yml.example +0 -0
  93. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.claude/commands/handoff.md +0 -0
  94. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.claude/skills/wiki/SKILL.md +0 -0
  95. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/FUNDING.yml +0 -0
  96. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  97. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  98. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  99. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  100. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/workflows/pytest.yml +0 -0
  101. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/workflows/ruff.yml +0 -0
  102. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.github/workflows/tts-smoke.yml +0 -0
  103. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/.gitignore +0 -0
  104. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/AGENTS.md +0 -0
  105. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/CODE_OF_CONDUCT.md +0 -0
  106. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/LICENSE +0 -0
  107. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/RELEASING.md +0 -0
  108. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/SECURITY.md +0 -0
  109. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/SPONSORS.md +0 -0
  110. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/agents/__init__.py +0 -0
  111. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/agents/base.py +0 -0
  112. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/agents/tmux.py +0 -0
  113. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/cached_status.py +0 -0
  114. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/channels/__init__.py +0 -0
  115. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/channels/base.py +0 -0
  116. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/channels/email.py +0 -0
  117. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/channels/push.py +0 -0
  118. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/channels/quo.py +0 -0
  119. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/config.py +0 -0
  120. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/council/__init__.py +0 -0
  121. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/council/cli.py +0 -0
  122. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/council/inbox.py +0 -0
  123. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/council/state.py +0 -0
  124. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/council/view.py +0 -0
  125. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/devices.py +0 -0
  126. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/diff_cli.py +0 -0
  127. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/doctor_voice.py +0 -0
  128. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/ensure_cli.py +0 -0
  129. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/fetch.py +0 -0
  130. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/handoff/__init__.py +0 -0
  131. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/handoff/git_state.py +0 -0
  132. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/handoff/instructions.py +0 -0
  133. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/handoff/parser.py +0 -0
  134. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/handoff/renderer.py +0 -0
  135. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/handoff/schema.py +0 -0
  136. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/handoff_cli.py +0 -0
  137. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/history_cli.py +0 -0
  138. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/__init__.py +0 -0
  139. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/agentwire-permission.sh +0 -0
  140. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/__init__.py +0 -0
  141. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  142. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  143. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  144. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/mcp-tool-damage-control.py +0 -0
  145. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/read-tool-damage-control.py +0 -0
  146. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  147. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  148. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  149. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  150. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/control-plane.yaml +0 -0
  151. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  152. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  153. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  154. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  155. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  156. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  157. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  158. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/outbound.yaml +0 -0
  159. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/publish.yaml +0 -0
  160. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  161. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  162. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks/queue-processor.sh +0 -0
  163. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/hooks_cli.py +0 -0
  164. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/listen.py +0 -0
  165. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/machine_cli.py +0 -0
  166. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_channels.py +0 -0
  167. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_cli.py +0 -0
  168. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_core.py +0 -0
  169. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_council.py +0 -0
  170. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_handoff.py +0 -0
  171. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_history.py +0 -0
  172. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_listen.py +0 -0
  173. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_lock.py +0 -0
  174. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_machine.py +0 -0
  175. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_msg.py +0 -0
  176. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_notify.py +0 -0
  177. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_pane.py +0 -0
  178. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_projects.py +0 -0
  179. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_scheduler.py +0 -0
  180. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_scratchpad.py +0 -0
  181. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_server.py +0 -0
  182. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_services.py +0 -0
  183. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_session.py +0 -0
  184. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_status.py +0 -0
  185. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_task.py +0 -0
  186. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_tunnels.py +0 -0
  187. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_voiceclone.py +0 -0
  188. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_wiki.py +0 -0
  189. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/mcp_worktree.py +0 -0
  190. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/msg_cli.py +0 -0
  191. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/network.py +0 -0
  192. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/project_config.py +0 -0
  193. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/projects.py +0 -0
  194. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/prompts_cli.py +0 -0
  195. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/push_cli.py +0 -0
  196. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/push_store.py +0 -0
  197. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/repo_cli.py +0 -0
  198. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/research.py +0 -0
  199. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/__init__.py +0 -0
  200. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/agentwire.md +0 -0
  201. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/anchor.md +0 -0
  202. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/chatbot.md +0 -0
  203. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/contributor.md +0 -0
  204. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/correspondent.md +0 -0
  205. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-brain.md +0 -0
  206. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-conscience.md +0 -0
  207. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-critic.md +0 -0
  208. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-devils-advocate.md +0 -0
  209. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-gut.md +0 -0
  210. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-historian.md +0 -0
  211. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-member.md +0 -0
  212. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/council-orchestrator.md +0 -0
  213. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/init.md +0 -0
  214. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/notifications.md +0 -0
  215. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/orchestrator.md +0 -0
  216. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/soul.md +0 -0
  217. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/task-runner.md +0 -0
  218. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/voice.md +0 -0
  219. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/worker.md +0 -0
  220. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles/worktree-session.md +0 -0
  221. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/roles_cli.py +0 -0
  222. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/__init__.py +0 -0
  223. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/artifacts.py +0 -0
  224. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/council.py +0 -0
  225. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/history.py +0 -0
  226. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/machines.py +0 -0
  227. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/projects.py +0 -0
  228. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/push.py +0 -0
  229. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/safety.py +0 -0
  230. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/scheduler.py +0 -0
  231. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/routes/scratchpad.py +0 -0
  232. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/safety/__init__.py +0 -0
  233. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/safety/_core.py +0 -0
  234. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/safety_cli.py +0 -0
  235. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/safety_commands.py +0 -0
  236. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/scheduler_cli.py +0 -0
  237. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/scratchpad.py +0 -0
  238. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/security.py +0 -0
  239. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/send_cli.py +0 -0
  240. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/services.py +0 -0
  241. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/ssh.py +0 -0
  242. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  243. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  244. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  245. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  246. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  247. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/announcements.json +0 -0
  248. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/css/mobile.css +0 -0
  249. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/bear.webp +0 -0
  250. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/cat.webp +0 -0
  251. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/crown.webp +0 -0
  252. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
  253. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
  254. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
  255. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/deer.webp +0 -0
  256. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/drone.webp +0 -0
  257. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/eagle.webp +0 -0
  258. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/fox.webp +0 -0
  259. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/hawk.webp +0 -0
  260. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/horse.webp +0 -0
  261. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/lion.webp +0 -0
  262. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/rabbit.webp +0 -0
  263. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/robot.webp +0 -0
  264. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/tiger.webp +0 -0
  265. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/icons/sessions/wolf.webp +0 -0
  266. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/img/icon-192.png +0 -0
  267. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/img/icon-512.png +0 -0
  268. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/.gitkeep +0 -0
  269. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/announcement-modal.js +0 -0
  270. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/api.js +0 -0
  271. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/artifact-window.js +0 -0
  272. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/collage.js +0 -0
  273. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/command-palette.js +0 -0
  274. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/council-window.js +0 -0
  275. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/dead-key-suppressor.js +0 -0
  276. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/desktop-manager.js +0 -0
  277. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/help-modal.js +0 -0
  278. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/icon-manager.js +0 -0
  279. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/notification-prefs.js +0 -0
  280. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/push-client.js +0 -0
  281. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/review-window.js +0 -0
  282. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/safety-shared.js +0 -0
  283. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/safety-window.js +0 -0
  284. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/scratchpad.js +0 -0
  285. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/service-classification.js +0 -0
  286. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/session-id.js +0 -0
  287. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/shortcuts.js +0 -0
  288. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  289. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/config-section.js +0 -0
  290. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/council-section.js +0 -0
  291. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
  292. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
  293. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
  294. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  295. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/services-section.js +0 -0
  296. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  297. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/sidebar.js +0 -0
  298. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
  299. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/tile-manager.js +0 -0
  300. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/toast.js +0 -0
  301. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/token-modal.js +0 -0
  302. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/utils/ansi.js +0 -0
  303. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/utils/swipe.js +0 -0
  304. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/voice/autosend-prefs.js +0 -0
  305. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/voice/browser-stt.js +0 -0
  306. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/voice/browser-tts.js +0 -0
  307. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/voice/jargon.js +0 -0
  308. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/voice/prompt.js +0 -0
  309. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
  310. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/manifest.webmanifest +0 -0
  311. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/static/service-worker.js +0 -0
  312. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/stt/__init__.py +0 -0
  313. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/stt/base.py +0 -0
  314. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/stt/cloud.py +0 -0
  315. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/stt/engine.py +0 -0
  316. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/stt/local.py +0 -0
  317. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/stt/server_backend.py +0 -0
  318. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/stt/stt_server.py +0 -0
  319. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tasks.py +0 -0
  320. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/__init__.py +0 -0
  321. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/desktop.html +0 -0
  322. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/email_notification.html +0 -0
  323. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  324. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
  325. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templates/tmux.conf +0 -0
  326. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/templating.py +0 -0
  327. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/aws.yaml +0 -0
  328. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/docker.yaml +0 -0
  329. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/gcp.yaml +0 -0
  330. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/gh.yaml +0 -0
  331. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/git.yaml +0 -0
  332. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/gws.yaml +0 -0
  333. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/kubectl.yaml +0 -0
  334. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/npm.yaml +0 -0
  335. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/terraform.yaml +0 -0
  336. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tooldefs/uv.yaml +0 -0
  337. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/__init__.py +0 -0
  338. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/audio.py +0 -0
  339. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/base.py +0 -0
  340. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/engines/__init__.py +0 -0
  341. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/engines/chatterbox.py +0 -0
  342. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/engines/kokoro.py +0 -0
  343. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/engines/zonos.py +0 -0
  344. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/kokoro_server.py +0 -0
  345. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/local.py +0 -0
  346. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts/registry.py +0 -0
  347. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tts_server.py +0 -0
  348. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tunnels.py +0 -0
  349. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/tunnels_cli.py +0 -0
  350. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/utils/__init__.py +0 -0
  351. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/utils/chunker.py +0 -0
  352. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/utils/event_log.py +0 -0
  353. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/utils/file_io.py +0 -0
  354. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/utils/speech.py +0 -0
  355. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/utils/subprocess.py +0 -0
  356. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/voice_status.py +0 -0
  357. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/wiki.py +0 -0
  358. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/wiki_audit.py +0 -0
  359. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/wiki_cli.py +0 -0
  360. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/agentwire/worktree_registry.py +0 -0
  361. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/decisions/obsidian-second-brain.md +0 -0
  362. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/logo.png +0 -0
  363. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/INDEX.md +0 -0
  364. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/architecture.md +0 -0
  365. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/briefing-mode.md +0 -0
  366. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/communication/channels.md +0 -0
  367. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/communication/hammerspoon.md +0 -0
  368. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/communication/handoff.md +0 -0
  369. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/concepts.md +0 -0
  370. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/council.md +0 -0
  371. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/deployment/remote-access.md +0 -0
  372. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/deployment/remote-machines.md +0 -0
  373. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/glossary.md +0 -0
  374. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  375. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/internals/damage-control.md +0 -0
  376. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/internals/parallel-refactor.md +0 -0
  377. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/internals/portal.md +0 -0
  378. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/internals/shell-escaping.md +0 -0
  379. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/internals/troubleshooting.md +0 -0
  380. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/internals/window-collage.md +0 -0
  381. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
  382. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
  383. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  384. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/security/damage-control-hardening.md +0 -0
  385. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/security/pip-audit.md +0 -0
  386. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/security/remote-access-hardening.md +0 -0
  387. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/security/secrets.md +0 -0
  388. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/services.md +0 -0
  389. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  390. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/sessions/pi.md +0 -0
  391. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/sessions/window-sizing.md +0 -0
  392. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/sessions/worktree-sessions.md +0 -0
  393. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/voice/shim-contract.md +0 -0
  394. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/voice/stt-cloud.md +0 -0
  395. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
  396. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/docs/wiki/voice/tts-self-hosted.md +0 -0
  397. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/conftest.py +0 -0
  398. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/e2e/test_portal_ui.py +0 -0
  399. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/fixtures/sample_agentwire.yml +0 -0
  400. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/fixtures/sample_config.yaml +0 -0
  401. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/fixtures/sample_scheduler.yaml +0 -0
  402. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/integration/test_council_portal.py +0 -0
  403. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/integration/test_scheduler_board.py +0 -0
  404. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/integration/test_send_verified_tmux.py +0 -0
  405. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/integration/test_server_websockets.py +0 -0
  406. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/integration/test_worktree_cmd.py +0 -0
  407. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_announcements.py +0 -0
  408. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_build_agent_command.py +0 -0
  409. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_channels.py +0 -0
  410. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_cli_output.py +0 -0
  411. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_cli_smoke.py +0 -0
  412. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_config.py +0 -0
  413. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_control_plane_protection.py +0 -0
  414. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_council_cli.py +0 -0
  415. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_council_inbox.py +0 -0
  416. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_council_state.py +0 -0
  417. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_council_view.py +0 -0
  418. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_damage_control_bypass.py +0 -0
  419. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_damage_control_hooks.py +0 -0
  420. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_damage_control_sync.py +0 -0
  421. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_devices.py +0 -0
  422. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_diff_cli.py +0 -0
  423. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_doctor_voice.py +0 -0
  424. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_event_log.py +0 -0
  425. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_file_io.py +0 -0
  426. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_handoff_git_state.py +0 -0
  427. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_handoff_instructions.py +0 -0
  428. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_handoff_parser.py +0 -0
  429. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_handoff_renderer.py +0 -0
  430. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_history.py +0 -0
  431. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_hooks_install.py +0 -0
  432. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_idle_handler.py +0 -0
  433. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_idle_nag.py +0 -0
  434. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_limits_tick_isolation.py +0 -0
  435. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_locking.py +0 -0
  436. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_mcp_tools_args.py +0 -0
  437. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_project_config.py +0 -0
  438. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_prompt_router.py +0 -0
  439. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_push.py +0 -0
  440. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_repo_cli.py +0 -0
  441. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_roles.py +0 -0
  442. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_routes_snapshot.py +0 -0
  443. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_safety_commands.py +0 -0
  444. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_safety_disabled_rules.py +0 -0
  445. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_safety_escape_hatch.py +0 -0
  446. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_safety_heal.py +0 -0
  447. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_safety_kill_switch.py +0 -0
  448. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_scheduler_parsing.py +0 -0
  449. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_scratchpad.py +0 -0
  450. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_security.py +0 -0
  451. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_server_pure.py +0 -0
  452. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_services.py +0 -0
  453. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_session_context.py +0 -0
  454. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_shared_dir_guard.py +0 -0
  455. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_skill_install.py +0 -0
  456. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_speech_tags.py +0 -0
  457. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_ssh.py +0 -0
  458. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_stt_backend.py +0 -0
  459. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_stt_cloud.py +0 -0
  460. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_stt_engine.py +0 -0
  461. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_task_cli.py +0 -0
  462. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_tasks.py +0 -0
  463. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_templating.py +0 -0
  464. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_terminal_resize.py +0 -0
  465. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_tmux_template.py +0 -0
  466. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_tts_engine_resolution.py +0 -0
  467. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_tunnels_probe.py +0 -0
  468. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_usage_limit.py +0 -0
  469. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_validation.py +0 -0
  470. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_voice_status.py +0 -0
  471. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_wiki.py +0 -0
  472. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_wiki_audit.py +0 -0
  473. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_worktree.py +0 -0
  474. {agentwire_dev-1.52.0 → agentwire_dev-1.53.0}/tests/unit/test_worktree_registry.py +0 -0
@@ -55,7 +55,7 @@ jobs:
55
55
  # asserts), and we fail only on high-severity high-confidence findings.
56
56
  # Green on the clean tree today; red only on NEW genuinely-dangerous code.
57
57
  - name: Run bandit
58
- run: uvx bandit -c pyproject.toml -r agentwire --severity-level high --confidence-level high
58
+ run: uvx bandit==1.9.4 -c pyproject.toml -r agentwire --severity-level high --confidence-level high
59
59
 
60
60
  pip-audit:
61
61
  name: pip-audit (advisory)
@@ -87,7 +87,7 @@ jobs:
87
87
  # chatterbox-tts relax the ceiling. See docs/wiki/security/pip-audit.md.
88
88
  - name: Audit runtime dependencies
89
89
  run: >
90
- uvx pip-audit -r requirements.txt
90
+ uvx pip-audit==2.10.1 -r requirements.txt
91
91
  --ignore-vuln PYSEC-2026-161
92
92
  --ignore-vuln CVE-2026-48818
93
93
  --ignore-vuln CVE-2026-48817
@@ -101,4 +101,4 @@ jobs:
101
101
  run: uv export --no-emit-project --all-extras --format requirements-txt -o requirements-all.txt
102
102
  - name: Full audit (weekly cron, optional extras)
103
103
  if: github.event_name == 'schedule'
104
- run: uvx pip-audit -r requirements-all.txt
104
+ run: uvx pip-audit==2.10.1 -r requirements-all.txt
@@ -25,16 +25,21 @@ Add it automatically with `git commit -s` (use your real name and an email that
25
25
  git clone https://github.com/dotdevdotdev/agentwire-dev.git
26
26
  cd agentwire-dev
27
27
 
28
- # Install in development mode
29
- uv pip install -e .
28
+ # Install dependencies into a project venv (creates .venv automatically)
29
+ uv sync --extra dev
30
+
31
+ # Run the test suite
32
+ uv run pytest
30
33
 
31
34
  # Run in development mode (picks up code changes instantly)
32
- agentwire portal start --dev
35
+ uv run agentwire portal start --dev
33
36
 
34
- # After structural changes (pyproject.toml, new files)
35
- agentwire rebuild
37
+ # After changing pyproject.toml or adding files, re-sync
38
+ uv sync --extra dev
36
39
  ```
37
40
 
41
+ If you also have agentwire installed as a tool (`uv tool install agentwire-dev`) and want that install to pick up your source changes, run `agentwire rebuild` (reinstalls from your checkout).
42
+
38
43
  ### Development Workflow
39
44
 
40
45
  ```bash
@@ -108,20 +113,6 @@ from agentwire.utils import agentwire_dir, config_path, logs_dir
108
113
  base = agentwire_dir() # ~/.agentwire/
109
114
  ```
110
115
 
111
- ### Error Handling
112
-
113
- Use the structured error classes in `agentwire/errors.py`:
114
-
115
- ```python
116
- from agentwire.errors import AgentWireError
117
-
118
- raise AgentWireError(
119
- what="Session not found",
120
- why="No tmux session exists with that name",
121
- how="Create a new session with 'agentwire new -s name'"
122
- )
123
- ```
124
-
125
116
  ### Configuration
126
117
 
127
118
  Use dataclasses for configuration (see `agentwire/config.py`):
@@ -164,7 +155,6 @@ agentwire/
164
155
  ├── *_cli.py # Per-domain command groups, each with a register_<domain>_parser()
165
156
  ├── server.py # WebSocket server
166
157
  ├── config.py # Configuration dataclasses
167
- ├── errors.py # Structured error classes
168
158
  ├── validation.py # Config validation
169
159
  ├── utils/ # Shared utilities
170
160
  │ ├── subprocess.py # Command execution
@@ -33,8 +33,8 @@ WORKDIR /app
33
33
 
34
34
  # Install Python dependencies for HTTP server
35
35
  RUN pip install --no-cache-dir \
36
- torch>=2.0.0 \
37
- torchaudio>=2.0.0 \
36
+ "torch>=2.0.0" \
37
+ "torchaudio>=2.0.0" \
38
38
  fastapi \
39
39
  uvicorn[standard] \
40
40
  faster-whisper \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentwire-dev
3
- Version: 1.52.0
3
+ Version: 1.53.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
@@ -227,18 +227,22 @@ Requires-Python: >=3.10
227
227
  Requires-Dist: aiohttp-jinja2>=1.6
228
228
  Requires-Dist: aiohttp>=3.13.4
229
229
  Requires-Dist: av>=12.0.0
230
+ Requires-Dist: fastapi>=0.104.0
230
231
  Requires-Dist: jinja2>=3.1.0
231
232
  Requires-Dist: kokoro-onnx>=0.4.9; python_version < '3.14'
232
233
  Requires-Dist: markdown>=3.5
233
234
  Requires-Dist: mcp>=1.2.0
234
235
  Requires-Dist: pydantic>=2.0.0
235
236
  Requires-Dist: python-dotenv>=1.2.2
237
+ Requires-Dist: python-multipart>=0.0.6
236
238
  Requires-Dist: pywebpush>=1.14.0
237
239
  Requires-Dist: pyyaml>=6.0
238
240
  Requires-Dist: qrcode>=7.4
239
241
  Requires-Dist: requests>=2.33.0
240
242
  Requires-Dist: resend>=2.0.0
243
+ Requires-Dist: soundfile>=0.12.0; python_version < '3.14'
241
244
  Requires-Dist: useful-moonshine-onnx>=20250101; python_version < '3.14'
245
+ Requires-Dist: uvicorn>=0.24.0
242
246
  Provides-Extra: dev
243
247
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
244
248
  Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
@@ -336,8 +340,8 @@ session to commanding many.
336
340
  ## Quick Start
337
341
 
338
342
  ```bash
339
- # Install
340
- pip install agentwire-dev
343
+ # Install (isolated tool env — works on any Python, including Homebrew/Debian PEP 668 setups)
344
+ uv tool install agentwire-dev
341
345
 
342
346
  # Setup (interactive)
343
347
  agentwire init
@@ -346,12 +350,13 @@ agentwire init
346
350
  agentwire portal start
347
351
  # Open http://127.0.0.1:8765 in Chrome — your cockpit is live (voice works immediately too)
348
352
 
349
- # New here? Start a guided helper session — it walks you through setup,
350
- # wires up your projects, explains the system, and helps you file issues or fork.
351
- agentwire dev
353
+ # Start your first agent session
354
+ agentwire new -s hello -p ~/projects/hello
352
355
  ```
353
356
 
354
- **Requirements:** Python 3.10+, tmux, ffmpeg, Claude Code
357
+ > **Optional:** clone this repo (`git clone https://github.com/dotdevdotdev/agentwire-dev ~/projects/agentwire-dev`) and `agentwire dev` opens a guided helper session inside it — setup walkthrough, project wiring, issue filing, forking. It requires the source checkout; everything above works without one.
358
+
359
+ **Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture and voice cloning — browser voice input works without it).
355
360
 
356
361
  **Honest setup time:** under a minute to a working voice portal with a genuinely good voice — Kokoro-82M runs on CPU out of the box (one-time ~200 MB model download in the background; the browser voice covers the wait). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
357
362
 
@@ -377,17 +382,21 @@ Origin checks reject cross-site browser requests on every bind. Keep the portal
377
382
 
378
383
  **macOS:**
379
384
  ```bash
380
- brew install tmux ffmpeg
381
- pip install agentwire-dev
385
+ brew install tmux uv # ffmpeg optional: only for host-mic PTT + voice cloning
386
+ uv tool install agentwire-dev
382
387
  ```
383
388
 
389
+ > Bare `pip install agentwire-dev` fails on Homebrew Python 3.12+ with `error: externally-managed-environment` (PEP 668). `uv tool install` (or `pipx install agentwire-dev`) sidesteps that by installing into its own isolated environment.
390
+
384
391
  **Ubuntu/Debian:**
385
392
  ```bash
386
- sudo apt install tmux ffmpeg python3-pip python3-venv
387
- python3 -m venv ~/.agentwire-venv && source ~/.agentwire-venv/bin/activate
388
- pip install agentwire-dev
393
+ sudo apt install tmux # ffmpeg optional: only for host-mic PTT + voice cloning
394
+ curl -LsSf https://astral.sh/uv/install.sh | sh
395
+ uv tool install agentwire-dev
389
396
  ```
390
397
 
398
+ `pipx install agentwire-dev` works everywhere too. Prefer plain pip? Use a venv: `python3 -m venv ~/.agentwire-venv && source ~/.agentwire-venv/bin/activate && pip install agentwire-dev`.
399
+
391
400
  **WSL2:** Same as Ubuntu. Audio is limited; use as remote worker with portal on Windows host.
392
401
 
393
402
  </details>
@@ -73,8 +73,8 @@ session to commanding many.
73
73
  ## Quick Start
74
74
 
75
75
  ```bash
76
- # Install
77
- pip install agentwire-dev
76
+ # Install (isolated tool env — works on any Python, including Homebrew/Debian PEP 668 setups)
77
+ uv tool install agentwire-dev
78
78
 
79
79
  # Setup (interactive)
80
80
  agentwire init
@@ -83,12 +83,13 @@ agentwire init
83
83
  agentwire portal start
84
84
  # Open http://127.0.0.1:8765 in Chrome — your cockpit is live (voice works immediately too)
85
85
 
86
- # New here? Start a guided helper session — it walks you through setup,
87
- # wires up your projects, explains the system, and helps you file issues or fork.
88
- agentwire dev
86
+ # Start your first agent session
87
+ agentwire new -s hello -p ~/projects/hello
89
88
  ```
90
89
 
91
- **Requirements:** Python 3.10+, tmux, ffmpeg, Claude Code
90
+ > **Optional:** clone this repo (`git clone https://github.com/dotdevdotdev/agentwire-dev ~/projects/agentwire-dev`) and `agentwire dev` opens a guided helper session inside it — setup walkthrough, project wiring, issue filing, forking. It requires the source checkout; everything above works without one.
91
+
92
+ **Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture and voice cloning — browser voice input works without it).
92
93
 
93
94
  **Honest setup time:** under a minute to a working voice portal with a genuinely good voice — Kokoro-82M runs on CPU out of the box (one-time ~200 MB model download in the background; the browser voice covers the wait). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
94
95
 
@@ -114,17 +115,21 @@ Origin checks reject cross-site browser requests on every bind. Keep the portal
114
115
 
115
116
  **macOS:**
116
117
  ```bash
117
- brew install tmux ffmpeg
118
- pip install agentwire-dev
118
+ brew install tmux uv # ffmpeg optional: only for host-mic PTT + voice cloning
119
+ uv tool install agentwire-dev
119
120
  ```
120
121
 
122
+ > Bare `pip install agentwire-dev` fails on Homebrew Python 3.12+ with `error: externally-managed-environment` (PEP 668). `uv tool install` (or `pipx install agentwire-dev`) sidesteps that by installing into its own isolated environment.
123
+
121
124
  **Ubuntu/Debian:**
122
125
  ```bash
123
- sudo apt install tmux ffmpeg python3-pip python3-venv
124
- python3 -m venv ~/.agentwire-venv && source ~/.agentwire-venv/bin/activate
125
- pip install agentwire-dev
126
+ sudo apt install tmux # ffmpeg optional: only for host-mic PTT + voice cloning
127
+ curl -LsSf https://astral.sh/uv/install.sh | sh
128
+ uv tool install agentwire-dev
126
129
  ```
127
130
 
131
+ `pipx install agentwire-dev` works everywhere too. Prefer plain pip? Use a venv: `python3 -m venv ~/.agentwire-venv && source ~/.agentwire-venv/bin/activate && pip install agentwire-dev`.
132
+
128
133
  **WSL2:** Same as Ubuntu. Audio is limited; use as remote worker with portal on Windows host.
129
134
 
130
135
  </details>
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.52.0"
3
+ __version__ = "1.53.0"
@@ -187,7 +187,7 @@ Command Categories:
187
187
  # - msg: polite agent-to-agent inbox (rides the watchdog)
188
188
  from . import diff_cli, limits_cli, msg_cli, pane_cli, prompts_cli, send_cli # noqa: I001 # session_cli kept on its own line below to minimize Phase 1 #495 merge conflicts
189
189
  from . import session_cli
190
- from . import channels_cli, portal_cli, tts_cli
190
+ from . import channels_cli, config_cli, portal_cli, tts_cli
191
191
  from . import scheduler_cli, ensure_cli
192
192
  from . import doctor_cli, history_cli, machine_cli, safety_cli
193
193
  from . import handoff_cli, hooks_cli, mcp_cli, roles_cli, tunnels_cli
@@ -222,6 +222,7 @@ Command Categories:
222
222
  system_cli.register_system_parser,
223
223
  push_cli.register_push_parser,
224
224
  repo_cli.register_repo_parser,
225
+ config_cli.register_config_parser,
225
226
  ]
226
227
  for _reg in _REGISTRARS:
227
228
  _reg(subparsers)
@@ -353,6 +354,7 @@ _GROUP_COMMANDS = [
353
354
  "portal", "tts", "stt", "tunnels", "machine", "history", "handoff",
354
355
  "wiki", "hooks", "projects", "safety", "network", "listen",
355
356
  "voiceclone", "roles", "task", "lock", "scheduler", "council", "limits",
357
+ "config",
356
358
  ]
357
359
 
358
360
 
@@ -288,7 +288,10 @@ def cmd_say(args) -> int:
288
288
  display = getattr(args, 'display', None)
289
289
  # Capture whether the toast actually reached the portal, so the caller can
290
290
  # report it honestly rather than claiming "shown" when the portal is down.
291
- toast_ok = _post_desktop_notification(display, session=session, priority="high") if display else None
291
+ # Briefing cards are info, not action items: normal priority, but a longer
292
+ # fade than the 8s default since the card carries more than the spoken line.
293
+ toast_ok = _post_desktop_notification(display, session=session, priority="normal",
294
+ timeout=30) if display else None
292
295
 
293
296
  def _say_result(rc: int, sink: str, clients: int = 0) -> int:
294
297
  """Report which sink actually received the audio (#444): browser
@@ -170,49 +170,6 @@ def write_task_context(
170
170
  return context_file
171
171
 
172
172
 
173
- def read_task_context(session: str) -> dict | None:
174
- """Read task context file.
175
-
176
- Args:
177
- session: tmux session name
178
-
179
- Returns:
180
- Context dict or None if not found
181
- """
182
- context_file = TASKS_DIR / f"{session}.json"
183
- if not context_file.exists():
184
- return None
185
-
186
- try:
187
- return json.loads(context_file.read_text())
188
- except (json.JSONDecodeError, OSError):
189
- return None
190
-
191
-
192
- def update_task_context(session: str, **updates) -> bool:
193
- """Update fields in task context file.
194
-
195
- Args:
196
- session: tmux session name
197
- **updates: Fields to update
198
-
199
- Returns:
200
- True if updated successfully
201
- """
202
- context = read_task_context(session)
203
- if context is None:
204
- return False
205
-
206
- context.update(updates)
207
- context_file = TASKS_DIR / f"{session}.json"
208
-
209
- try:
210
- context_file.write_text(json.dumps(context, indent=2))
211
- return True
212
- except OSError:
213
- return False
214
-
215
-
216
173
  def clear_task_context(session: str) -> None:
217
174
  """Remove task context and completion signal files.
218
175
 
@@ -332,145 +289,6 @@ def get_summary_prompt(summary_file: str) -> str:
332
289
  return SYSTEM_SUMMARY_PROMPT.format(summary_file=summary_file)
333
290
 
334
291
 
335
- def is_session_idle(session: str, idle_threshold: float = 3.0) -> bool:
336
- """Check if a session is currently idle.
337
-
338
- Uses the portal's cached status if available, otherwise checks tmux activity.
339
-
340
- Args:
341
- session: Session name
342
- idle_threshold: Seconds of inactivity to consider idle
343
-
344
- Returns:
345
- True if session is idle, False otherwise
346
- """
347
- # Try to get activity time from tmux
348
- # Note: display-message and capture-pane don't support = prefix for exact match
349
- try:
350
- result = subprocess.run(
351
- ["tmux", "display-message", "-p", "-t", session, "#{pane_last_activity}"],
352
- capture_output=True,
353
- text=True,
354
- timeout=5,
355
- )
356
- if result.returncode == 0 and result.stdout.strip():
357
- last_activity = int(result.stdout.strip())
358
- current_time = int(time.time())
359
- idle_seconds = current_time - last_activity
360
- return idle_seconds >= idle_threshold
361
- except (subprocess.TimeoutExpired, ValueError, subprocess.SubprocessError):
362
- pass
363
-
364
- # Fallback: check if output is changing
365
- # This is less reliable but works as a backup
366
- return False
367
-
368
-
369
- def wait_for_idle(
370
- session: str,
371
- timeout: float = 300.0,
372
- idle_threshold: float = 3.0,
373
- poll_interval: float = 2.0,
374
- stable_count: int = 3,
375
- ) -> bool:
376
- """Wait for a session to become idle.
377
-
378
- "Idle" means the session has not produced output for idle_threshold seconds
379
- for stable_count consecutive checks.
380
-
381
- Args:
382
- session: Session name
383
- timeout: Maximum seconds to wait
384
- idle_threshold: Seconds of inactivity to consider idle
385
- poll_interval: Seconds between checks
386
- stable_count: Number of consecutive idle checks required
387
-
388
- Returns:
389
- True if session became idle, False if timeout
390
-
391
- Raises:
392
- CompletionTimeout: If timeout is exceeded
393
- """
394
- start_time = time.time()
395
- consecutive_idle = 0
396
- last_output_hash = None
397
-
398
- while True:
399
- elapsed = time.time() - start_time
400
- if elapsed >= timeout:
401
- raise CompletionTimeout(
402
- f"Timeout waiting for session '{session}' to become idle "
403
- f"after {timeout:.0f}s"
404
- )
405
-
406
- # Check if session is still running
407
- result = subprocess.run(
408
- ["tmux", "has-session", "-t", f"={session}"],
409
- capture_output=True,
410
- )
411
- if result.returncode != 0:
412
- raise CompletionError(f"Session '{session}' no longer exists")
413
-
414
- # Get current output snapshot
415
- # Note: capture-pane doesn't support = prefix for exact match
416
- result = subprocess.run(
417
- ["tmux", "capture-pane", "-t", session, "-p", "-S", "-20"],
418
- capture_output=True,
419
- text=True,
420
- timeout=5,
421
- )
422
- if result.returncode != 0:
423
- time.sleep(poll_interval)
424
- continue
425
-
426
- current_hash = hash(result.stdout)
427
-
428
- if current_hash == last_output_hash:
429
- consecutive_idle += 1
430
- if consecutive_idle >= stable_count:
431
- return True
432
- else:
433
- consecutive_idle = 0
434
- last_output_hash = current_hash
435
-
436
- time.sleep(poll_interval)
437
-
438
-
439
- def wait_for_file(
440
- path: Path,
441
- timeout: float = 60.0,
442
- poll_interval: float = 1.0,
443
- ) -> bool:
444
- """Wait for a file to be created.
445
-
446
- Args:
447
- path: Path to the file
448
- timeout: Maximum seconds to wait
449
- poll_interval: Seconds between checks
450
-
451
- Returns:
452
- True if file was created
453
-
454
- Raises:
455
- CompletionTimeout: If timeout is exceeded
456
- """
457
- start_time = time.time()
458
-
459
- while True:
460
- if path.exists() and path.stat().st_size > 0:
461
- # Give a moment for the file to be fully written
462
- time.sleep(0.5)
463
- return True
464
-
465
- elapsed = time.time() - start_time
466
- if elapsed >= timeout:
467
- raise CompletionTimeout(
468
- f"Timeout waiting for file '{path}' after {timeout:.0f}s"
469
- )
470
-
471
- time.sleep(poll_interval)
472
-
473
-
474
292
  def parse_summary_file(path: Path) -> SummaryResult:
475
293
  """Parse a task summary file.
476
294
 
@@ -596,53 +414,3 @@ def status_to_exit_code(status: str) -> int:
596
414
  return 7
597
415
  else:
598
416
  return 2
599
-
600
-
601
- # =============================================================================
602
- # Loop mode helpers
603
- # =============================================================================
604
-
605
- # Directory for iteration review files (relative to project root)
606
- ITERATIONS_DIR = ".agentwire/iterations"
607
-
608
-
609
- def generate_iteration_filename(session: str, iteration: int) -> str:
610
- """Generate a filename for an iteration review file.
611
-
612
- Args:
613
- session: tmux session name
614
- iteration: Current iteration number (1-based)
615
-
616
- Returns:
617
- Relative path like .agentwire/iterations/mysession-iter-1.md
618
- """
619
- return f"{ITERATIONS_DIR}/{session}-iter-{iteration}.md"
620
-
621
-
622
- # Prompt sent between loop iterations to get a review
623
- ITERATION_REVIEW_PROMPT = """Review your progress so far. Write a brief status report to {iter_file}:
624
-
625
- # Iteration {iteration} Review
626
-
627
- ## Status
628
- complete | incomplete
629
-
630
- ## What Was Done
631
- [Brief description of work in this iteration]
632
-
633
- ## Remaining Work
634
- [What still needs to be done, or "none" if complete]
635
-
636
- Use "complete" if the task is fully done. Use "incomplete" if more work is needed.
637
- Write the file now."""
638
-
639
-
640
- # Prompt sent to continue the loop with context
641
- ITERATION_CONTINUE_PROMPT = """Continue working on the task. This is iteration {iteration} of {max_iterations}.
642
-
643
- Previous iteration reviews are in {iterations_dir}/ — read them for context on what's been done.
644
-
645
- Original task:
646
- {original_prompt}
647
-
648
- Continue where you left off. Focus on remaining work identified in previous reviews."""