agentwire-dev 1.47.0__tar.gz → 1.49.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 (551) hide show
  1. agentwire_dev-1.49.0/.claude/commands/handoff.md +142 -0
  2. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.gitignore +3 -0
  3. agentwire_dev-1.49.0/AGENTS.md +5 -0
  4. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/CONTRIBUTING.md +4 -2
  5. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/PKG-INFO +5 -6
  6. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/README.md +4 -4
  7. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/RELEASING.md +5 -2
  8. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/__init__.py +1 -1
  9. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/agents/base.py +0 -27
  10. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/agents/tmux.py +0 -141
  11. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/channels/email.py +1 -1
  12. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/channels/quo.py +3 -3
  13. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/channels_cli.py +1 -1
  14. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/completion.py +4 -17
  15. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/config.py +2 -3
  16. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/council/cli.py +0 -54
  17. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/doctor_cli.py +5 -7
  18. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks_cli.py +2 -2
  19. agentwire_dev-1.49.0/agentwire/mcp_channels.py +88 -0
  20. agentwire_dev-1.49.0/agentwire/mcp_core.py +288 -0
  21. agentwire_dev-1.49.0/agentwire/mcp_council.py +193 -0
  22. agentwire_dev-1.49.0/agentwire/mcp_desktop.py +296 -0
  23. agentwire_dev-1.49.0/agentwire/mcp_handoff.py +95 -0
  24. agentwire_dev-1.49.0/agentwire/mcp_history.py +94 -0
  25. agentwire_dev-1.49.0/agentwire/mcp_listen.py +51 -0
  26. agentwire_dev-1.49.0/agentwire/mcp_lock.py +64 -0
  27. agentwire_dev-1.49.0/agentwire/mcp_machine.py +62 -0
  28. agentwire_dev-1.49.0/agentwire/mcp_msg.py +219 -0
  29. agentwire_dev-1.49.0/agentwire/mcp_notify.py +98 -0
  30. agentwire_dev-1.49.0/agentwire/mcp_pane.py +232 -0
  31. agentwire_dev-1.49.0/agentwire/mcp_projects.py +69 -0
  32. agentwire_dev-1.49.0/agentwire/mcp_scheduler.py +281 -0
  33. agentwire_dev-1.49.0/agentwire/mcp_scratchpad.py +50 -0
  34. agentwire_dev-1.49.0/agentwire/mcp_server.py +51 -0
  35. agentwire_dev-1.49.0/agentwire/mcp_services.py +69 -0
  36. agentwire_dev-1.49.0/agentwire/mcp_session.py +342 -0
  37. agentwire_dev-1.49.0/agentwire/mcp_status.py +92 -0
  38. agentwire_dev-1.49.0/agentwire/mcp_task.py +163 -0
  39. agentwire_dev-1.49.0/agentwire/mcp_tunnels.py +48 -0
  40. agentwire_dev-1.49.0/agentwire/mcp_voice.py +197 -0
  41. agentwire_dev-1.49.0/agentwire/mcp_voiceclone.py +81 -0
  42. agentwire_dev-1.49.0/agentwire/mcp_wiki.py +85 -0
  43. agentwire_dev-1.49.0/agentwire/mcp_worktree.py +202 -0
  44. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/init.md +1 -1
  45. agentwire_dev-1.49.0/agentwire/routes/__init__.py +22 -0
  46. agentwire_dev-1.49.0/agentwire/routes/artifacts.py +120 -0
  47. agentwire_dev-1.49.0/agentwire/routes/config.py +159 -0
  48. agentwire_dev-1.49.0/agentwire/routes/council.py +318 -0
  49. agentwire_dev-1.49.0/agentwire/routes/desktop.py +238 -0
  50. agentwire_dev-1.49.0/agentwire/routes/history.py +145 -0
  51. agentwire_dev-1.49.0/agentwire/routes/machines.py +330 -0
  52. agentwire_dev-1.49.0/agentwire/routes/notify.py +169 -0
  53. agentwire_dev-1.49.0/agentwire/routes/permission.py +379 -0
  54. agentwire_dev-1.49.0/agentwire/routes/projects.py +394 -0
  55. agentwire_dev-1.49.0/agentwire/routes/push.py +60 -0
  56. agentwire_dev-1.49.0/agentwire/routes/safety.py +117 -0
  57. agentwire_dev-1.49.0/agentwire/routes/scheduler.py +189 -0
  58. agentwire_dev-1.49.0/agentwire/routes/scratchpad.py +71 -0
  59. agentwire_dev-1.49.0/agentwire/routes/sessions.py +160 -0
  60. agentwire_dev-1.49.0/agentwire/routes/sessions_admin.py +609 -0
  61. agentwire_dev-1.49.0/agentwire/routes/voice.py +400 -0
  62. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/safety_cli.py +9 -9
  63. agentwire_dev-1.47.0/agentwire/cli_safety.py → agentwire_dev-1.49.0/agentwire/safety_commands.py +1 -5
  64. agentwire_dev-1.49.0/agentwire/server.py +2871 -0
  65. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/session_cli.py +5 -0
  66. agentwire_dev-1.49.0/agentwire/session_ready.py +312 -0
  67. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/announcements.json +17 -0
  68. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/css/desktop.css +139 -148
  69. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/command-palette.js +5 -0
  70. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/desktop.js +9 -2
  71. agentwire_dev-1.49.0/agentwire/static/js/help-modal.js +133 -0
  72. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/icon-manager.js +0 -2
  73. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/service-classification.js +1 -0
  74. agentwire_dev-1.49.0/agentwire/static/js/shortcuts.js +91 -0
  75. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/desktop.html +3 -0
  76. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/base.py +1 -1
  77. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/engines/__init__.py +1 -4
  78. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/registry.py +1 -1
  79. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts_cli.py +5 -7
  80. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts_server.py +3 -32
  81. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/decisions/obsidian-second-brain.md +2 -0
  82. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/INDEX.md +4 -1
  83. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/briefing-mode.md +1 -1
  84. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/internals/portal.md +1 -1
  85. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/internals/troubleshooting.md +1 -1
  86. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/sessions/worktree-sessions.md +1 -1
  87. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/voice/shim-contract.md +3 -3
  88. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/voice/tts-self-hosted.md +3 -20
  89. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/pyproject.toml +38 -19
  90. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/integration/test_worktree_cmd.py +27 -1
  91. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_channels.py +0 -9
  92. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_cli_commands.py +2 -2
  93. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_config.py +0 -16
  94. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_control_plane_protection.py +1 -1
  95. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_council_cli.py +0 -19
  96. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_damage_control_bypass.py +1 -1
  97. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_mcp_server.py +44 -44
  98. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_mcp_tools_args.py +74 -74
  99. agentwire_dev-1.49.0/tests/unit/test_routes_snapshot.py +205 -0
  100. agentwire_dev-1.47.0/tests/unit/test_cli_safety.py → agentwire_dev-1.49.0/tests/unit/test_safety_commands.py +22 -22
  101. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_safety_disabled_rules.py +1 -1
  102. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_safety_escape_hatch.py +1 -1
  103. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_safety_heal.py +42 -42
  104. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_safety_kill_switch.py +1 -1
  105. agentwire_dev-1.49.0/tests/unit/test_session_ready.py +305 -0
  106. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_skill_install.py +1 -1
  107. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_tts_engine_resolution.py +3 -3
  108. agentwire_dev-1.47.0/.agents/skills/agentwire-cli/SKILL.md +0 -260
  109. agentwire_dev-1.47.0/.agents/skills/agentwire-config/SKILL.md +0 -236
  110. agentwire_dev-1.47.0/.agents/skills/agentwire-desktop-ui/SKILL.md +0 -76
  111. agentwire_dev-1.47.0/.agents/skills/agentwire-mcp-tools/SKILL.md +0 -176
  112. agentwire_dev-1.47.0/.agents/skills/agentwire-pi/SKILL.md +0 -205
  113. agentwire_dev-1.47.0/.agents/skills/agentwire-project-config/SKILL.md +0 -195
  114. agentwire_dev-1.47.0/.agents/skills/agentwire-scheduler/SKILL.md +0 -133
  115. agentwire_dev-1.47.0/.agents/skills/wiki/SKILL.md +0 -105
  116. agentwire_dev-1.47.0/AGENTS.md +0 -155
  117. agentwire_dev-1.47.0/Dockerfile.runpod +0 -60
  118. agentwire_dev-1.47.0/agentwire/mcp_server.py +0 -3454
  119. agentwire_dev-1.47.0/agentwire/prompts/__init__.py +0 -1
  120. agentwire_dev-1.47.0/agentwire/prompts/init.md +0 -155
  121. agentwire_dev-1.47.0/agentwire/server.py +0 -6312
  122. agentwire_dev-1.47.0/agentwire/session_ready.py +0 -226
  123. agentwire_dev-1.47.0/agentwire/static/agentwire-Echo--black.png +0 -0
  124. agentwire_dev-1.47.0/agentwire/static/agentwire-Echo--transparent.png +0 -0
  125. agentwire_dev-1.47.0/agentwire/static/agentwire-Echo.png +0 -0
  126. agentwire_dev-1.47.0/agentwire/static/agentwire-email-banner.png +0 -0
  127. agentwire_dev-1.47.0/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
  128. agentwire_dev-1.47.0/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
  129. agentwire_dev-1.47.0/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
  130. agentwire_dev-1.47.0/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
  131. agentwire_dev-1.47.0/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
  132. agentwire_dev-1.47.0/agentwire/static/agentwire-splash-logo-layers.png +0 -0
  133. agentwire_dev-1.47.0/agentwire/static/icons/machines/android.jpeg +0 -0
  134. agentwire_dev-1.47.0/agentwire/static/icons/machines/android.webp +0 -0
  135. agentwire_dev-1.47.0/agentwire/static/icons/machines/automaton.jpeg +0 -0
  136. agentwire_dev-1.47.0/agentwire/static/icons/machines/automaton.webp +0 -0
  137. agentwire_dev-1.47.0/agentwire/static/icons/machines/bot.jpeg +0 -0
  138. agentwire_dev-1.47.0/agentwire/static/icons/machines/bot.webp +0 -0
  139. agentwire_dev-1.47.0/agentwire/static/icons/machines/cyborg.jpeg +0 -0
  140. agentwire_dev-1.47.0/agentwire/static/icons/machines/cyborg.webp +0 -0
  141. agentwire_dev-1.47.0/agentwire/static/icons/machines/droid.jpeg +0 -0
  142. agentwire_dev-1.47.0/agentwire/static/icons/machines/droid.webp +0 -0
  143. agentwire_dev-1.47.0/agentwire/static/icons/machines/drone.jpeg +0 -0
  144. agentwire_dev-1.47.0/agentwire/static/icons/machines/drone.webp +0 -0
  145. agentwire_dev-1.47.0/agentwire/static/icons/machines/guardian.jpeg +0 -0
  146. agentwire_dev-1.47.0/agentwire/static/icons/machines/guardian.webp +0 -0
  147. agentwire_dev-1.47.0/agentwire/static/icons/machines/mech.jpeg +0 -0
  148. agentwire_dev-1.47.0/agentwire/static/icons/machines/mech.webp +0 -0
  149. agentwire_dev-1.47.0/agentwire/static/icons/machines/probe.jpeg +0 -0
  150. agentwire_dev-1.47.0/agentwire/static/icons/machines/probe.webp +0 -0
  151. agentwire_dev-1.47.0/agentwire/static/icons/machines/robot.jpeg +0 -0
  152. agentwire_dev-1.47.0/agentwire/static/icons/machines/robot.webp +0 -0
  153. agentwire_dev-1.47.0/agentwire/static/icons/machines/sentinel.jpeg +0 -0
  154. agentwire_dev-1.47.0/agentwire/static/icons/machines/sentinel.webp +0 -0
  155. agentwire_dev-1.47.0/agentwire/static/icons/machines/unit.jpeg +0 -0
  156. agentwire_dev-1.47.0/agentwire/static/icons/machines/unit.webp +0 -0
  157. agentwire_dev-1.47.0/agentwire/static/icons/projects/blob.jpeg +0 -0
  158. agentwire_dev-1.47.0/agentwire/static/icons/projects/blob.webp +0 -0
  159. agentwire_dev-1.47.0/agentwire/static/icons/projects/cloud.jpeg +0 -0
  160. agentwire_dev-1.47.0/agentwire/static/icons/projects/cloud.webp +0 -0
  161. agentwire_dev-1.47.0/agentwire/static/icons/projects/crystal.jpeg +0 -0
  162. agentwire_dev-1.47.0/agentwire/static/icons/projects/crystal.webp +0 -0
  163. agentwire_dev-1.47.0/agentwire/static/icons/projects/cyclops.jpeg +0 -0
  164. agentwire_dev-1.47.0/agentwire/static/icons/projects/cyclops.webp +0 -0
  165. agentwire_dev-1.47.0/agentwire/static/icons/projects/flame.jpeg +0 -0
  166. agentwire_dev-1.47.0/agentwire/static/icons/projects/flame.webp +0 -0
  167. agentwire_dev-1.47.0/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
  168. agentwire_dev-1.47.0/agentwire/static/icons/projects/fuzzy.webp +0 -0
  169. agentwire_dev-1.47.0/agentwire/static/icons/projects/horned.jpeg +0 -0
  170. agentwire_dev-1.47.0/agentwire/static/icons/projects/horned.webp +0 -0
  171. agentwire_dev-1.47.0/agentwire/static/icons/projects/moon.jpeg +0 -0
  172. agentwire_dev-1.47.0/agentwire/static/icons/projects/moon.webp +0 -0
  173. agentwire_dev-1.47.0/agentwire/static/icons/projects/slime.jpeg +0 -0
  174. agentwire_dev-1.47.0/agentwire/static/icons/projects/slime.webp +0 -0
  175. agentwire_dev-1.47.0/agentwire/static/icons/projects/star.jpeg +0 -0
  176. agentwire_dev-1.47.0/agentwire/static/icons/projects/star.webp +0 -0
  177. agentwire_dev-1.47.0/agentwire/static/icons/projects/tentacle.jpeg +0 -0
  178. agentwire_dev-1.47.0/agentwire/static/icons/projects/tentacle.webp +0 -0
  179. agentwire_dev-1.47.0/agentwire/static/icons/projects/winged.jpeg +0 -0
  180. agentwire_dev-1.47.0/agentwire/static/icons/projects/winged.webp +0 -0
  181. agentwire_dev-1.47.0/agentwire/static/icons/sessions/bear.jpeg +0 -0
  182. agentwire_dev-1.47.0/agentwire/static/icons/sessions/cat.jpeg +0 -0
  183. agentwire_dev-1.47.0/agentwire/static/icons/sessions/crown.jpeg +0 -0
  184. agentwire_dev-1.47.0/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
  185. agentwire_dev-1.47.0/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
  186. agentwire_dev-1.47.0/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
  187. agentwire_dev-1.47.0/agentwire/static/icons/sessions/deer.jpeg +0 -0
  188. agentwire_dev-1.47.0/agentwire/static/icons/sessions/drone.jpeg +0 -0
  189. agentwire_dev-1.47.0/agentwire/static/icons/sessions/eagle.jpeg +0 -0
  190. agentwire_dev-1.47.0/agentwire/static/icons/sessions/fox.jpeg +0 -0
  191. agentwire_dev-1.47.0/agentwire/static/icons/sessions/hawk.jpeg +0 -0
  192. agentwire_dev-1.47.0/agentwire/static/icons/sessions/horse.jpeg +0 -0
  193. agentwire_dev-1.47.0/agentwire/static/icons/sessions/lion.jpeg +0 -0
  194. agentwire_dev-1.47.0/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
  195. agentwire_dev-1.47.0/agentwire/static/icons/sessions/robot.jpeg +0 -0
  196. agentwire_dev-1.47.0/agentwire/static/icons/sessions/tiger.jpeg +0 -0
  197. agentwire_dev-1.47.0/agentwire/static/icons/sessions/wolf.jpeg +0 -0
  198. agentwire_dev-1.47.0/agentwire/static/js/components/icon-picker.js +0 -136
  199. agentwire_dev-1.47.0/agentwire/static/js/components/list-card.js +0 -156
  200. agentwire_dev-1.47.0/agentwire/static/js/components/type-tag.js +0 -45
  201. agentwire_dev-1.47.0/agentwire/static/js/utils/auto-refresh.js +0 -66
  202. agentwire_dev-1.47.0/agentwire/tts/engines/qwen_base.py +0 -192
  203. agentwire_dev-1.47.0/agentwire/tts/engines/qwen_custom.py +0 -189
  204. agentwire_dev-1.47.0/agentwire/tts/engines/qwen_design.py +0 -170
  205. agentwire_dev-1.47.0/requirements-tts.txt +0 -24
  206. agentwire_dev-1.47.0/tests/unit/test_session_ready.py +0 -244
  207. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.claude/skills/wiki/SKILL.md +0 -0
  208. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/FUNDING.yml +0 -0
  209. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  210. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  211. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  212. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  213. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/workflows/pytest.yml +0 -0
  214. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/workflows/ruff.yml +0 -0
  215. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/workflows/security.yml +0 -0
  216. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/.github/workflows/tts-smoke.yml +0 -0
  217. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/CODE_OF_CONDUCT.md +0 -0
  218. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/Dockerfile.local +0 -0
  219. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/LICENSE +0 -0
  220. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/SECURITY.md +0 -0
  221. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/SPONSORS.md +0 -0
  222. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/__main__.py +0 -0
  223. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/agents/__init__.py +0 -0
  224. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/cached_status.py +0 -0
  225. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/channels/__init__.py +0 -0
  226. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/channels/base.py +0 -0
  227. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/channels/push.py +0 -0
  228. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/core.py +0 -0
  229. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/council/__init__.py +0 -0
  230. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/council/inbox.py +0 -0
  231. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/council/state.py +0 -0
  232. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/council/view.py +0 -0
  233. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/devices.py +0 -0
  234. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/diff_cli.py +0 -0
  235. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/doctor_voice.py +0 -0
  236. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/ensure_cli.py +0 -0
  237. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/fetch.py +0 -0
  238. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/handoff/__init__.py +0 -0
  239. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/handoff/git_state.py +0 -0
  240. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/handoff/instructions.py +0 -0
  241. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/handoff/parser.py +0 -0
  242. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/handoff/renderer.py +0 -0
  243. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/handoff/schema.py +0 -0
  244. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/handoff_cli.py +0 -0
  245. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/history.py +0 -0
  246. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/history_cli.py +0 -0
  247. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/__init__.py +0 -0
  248. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/agentwire-permission.sh +0 -0
  249. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/__init__.py +0 -0
  250. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  251. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  252. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  253. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/mcp-tool-damage-control.py +0 -0
  254. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/read-tool-damage-control.py +0 -0
  255. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  256. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  257. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  258. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  259. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/control-plane.yaml +0 -0
  260. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  261. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  262. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  263. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  264. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  265. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  266. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  267. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/outbound.yaml +0 -0
  268. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/publish.yaml +0 -0
  269. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  270. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  271. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/idle-handler.sh +0 -0
  272. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/hooks/queue-processor.sh +0 -0
  273. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/inbox.py +0 -0
  274. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/limits_cli.py +0 -0
  275. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/listen.py +0 -0
  276. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/locking.py +0 -0
  277. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/machine_cli.py +0 -0
  278. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/mcp_cli.py +0 -0
  279. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/msg_cli.py +0 -0
  280. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/network.py +0 -0
  281. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/notify_cli.py +0 -0
  282. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/onboarding.py +0 -0
  283. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/pane_cli.py +0 -0
  284. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/pane_manager.py +0 -0
  285. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/portal_cli.py +0 -0
  286. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/project_config.py +0 -0
  287. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/projects.py +0 -0
  288. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/prompt_router.py +0 -0
  289. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/prompts_cli.py +0 -0
  290. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/push_cli.py +0 -0
  291. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/push_store.py +0 -0
  292. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/repo_cli.py +0 -0
  293. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/research.py +0 -0
  294. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/__init__.py +0 -0
  295. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/agentwire.md +0 -0
  296. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/anchor.md +0 -0
  297. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/chatbot.md +0 -0
  298. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/correspondent.md +0 -0
  299. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-brain.md +0 -0
  300. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-conscience.md +0 -0
  301. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-critic.md +0 -0
  302. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-devils-advocate.md +0 -0
  303. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-gut.md +0 -0
  304. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-historian.md +0 -0
  305. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-member.md +0 -0
  306. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/council-orchestrator.md +0 -0
  307. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/notifications.md +0 -0
  308. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/orchestrator.md +0 -0
  309. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/soul.md +0 -0
  310. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/task-runner.md +0 -0
  311. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/voice.md +0 -0
  312. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/worker.md +0 -0
  313. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles/worktree-session.md +0 -0
  314. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/roles_cli.py +0 -0
  315. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/safety/__init__.py +0 -0
  316. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/safety/_core.py +0 -0
  317. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/scheduler.py +0 -0
  318. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/scheduler_cli.py +0 -0
  319. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/scratchpad.py +0 -0
  320. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/security.py +0 -0
  321. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/send_cli.py +0 -0
  322. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/services.py +0 -0
  323. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/session_context.py +0 -0
  324. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/ssh.py +0 -0
  325. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  326. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  327. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  328. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  329. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  330. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/css/mobile.css +0 -0
  331. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/favicon.png +0 -0
  332. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/bear.webp +0 -0
  333. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/cat.webp +0 -0
  334. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/crown.webp +0 -0
  335. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
  336. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
  337. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
  338. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/deer.webp +0 -0
  339. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/drone.webp +0 -0
  340. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/eagle.webp +0 -0
  341. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/fox.webp +0 -0
  342. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/hawk.webp +0 -0
  343. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/horse.webp +0 -0
  344. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/lion.webp +0 -0
  345. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/rabbit.webp +0 -0
  346. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/robot.webp +0 -0
  347. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/tiger.webp +0 -0
  348. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/icons/sessions/wolf.webp +0 -0
  349. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/img/icon-192.png +0 -0
  350. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/img/icon-512.png +0 -0
  351. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/.gitkeep +0 -0
  352. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/announcement-modal.js +0 -0
  353. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/api.js +0 -0
  354. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/artifact-window.js +0 -0
  355. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/collage.js +0 -0
  356. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/council-window.js +0 -0
  357. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/dead-key-suppressor.js +0 -0
  358. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/desktop-manager.js +0 -0
  359. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/mobile.js +0 -0
  360. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/notification-prefs.js +0 -0
  361. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/notifications-panel.js +0 -0
  362. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/push-client.js +0 -0
  363. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/review-window.js +0 -0
  364. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/safety-shared.js +0 -0
  365. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/safety-window.js +0 -0
  366. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/scratchpad.js +0 -0
  367. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/session-id.js +0 -0
  368. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/session-window.js +0 -0
  369. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  370. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/config-section.js +0 -0
  371. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/council-section.js +0 -0
  372. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
  373. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
  374. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
  375. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  376. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/services-section.js +0 -0
  377. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  378. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/sidebar.js +0 -0
  379. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
  380. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/tile-manager.js +0 -0
  381. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/toast.js +0 -0
  382. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/token-modal.js +0 -0
  383. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/utils/ansi.js +0 -0
  384. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/utils/swipe.js +0 -0
  385. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/voice/autosend-prefs.js +0 -0
  386. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/voice/browser-stt.js +0 -0
  387. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/voice/browser-tts.js +0 -0
  388. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/voice/jargon.js +0 -0
  389. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/voice/prompt.js +0 -0
  390. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
  391. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/manifest.webmanifest +0 -0
  392. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/static/service-worker.js +0 -0
  393. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/stt/__init__.py +0 -0
  394. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/stt/base.py +0 -0
  395. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/stt/cloud.py +0 -0
  396. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/stt/engine.py +0 -0
  397. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/stt/local.py +0 -0
  398. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/stt/server_backend.py +0 -0
  399. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/stt/stt_server.py +0 -0
  400. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/system_cli.py +0 -0
  401. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tasks.py +0 -0
  402. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/__init__.py +0 -0
  403. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/base.html +0 -0
  404. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/email_notification.html +0 -0
  405. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  406. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
  407. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/mobile.html +0 -0
  408. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/pair.html +0 -0
  409. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templates/tmux.conf +0 -0
  410. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/templating.py +0 -0
  411. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/aws.yaml +0 -0
  412. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/docker.yaml +0 -0
  413. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/gcp.yaml +0 -0
  414. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/gh.yaml +0 -0
  415. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/git.yaml +0 -0
  416. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/gws.yaml +0 -0
  417. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/kubectl.yaml +0 -0
  418. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/npm.yaml +0 -0
  419. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/terraform.yaml +0 -0
  420. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tooldefs/uv.yaml +0 -0
  421. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/__init__.py +0 -0
  422. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/audio.py +0 -0
  423. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/engines/chatterbox.py +0 -0
  424. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/engines/kokoro.py +0 -0
  425. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/engines/zonos.py +0 -0
  426. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/kokoro_server.py +0 -0
  427. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tts/local.py +0 -0
  428. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tunnels.py +0 -0
  429. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/tunnels_cli.py +0 -0
  430. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/usage_limit.py +0 -0
  431. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/utils/__init__.py +0 -0
  432. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/utils/chunker.py +0 -0
  433. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/utils/event_log.py +0 -0
  434. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/utils/file_io.py +0 -0
  435. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/utils/paths.py +0 -0
  436. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/utils/speech.py +0 -0
  437. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/utils/subprocess.py +0 -0
  438. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/validation.py +0 -0
  439. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/voice_status.py +0 -0
  440. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/voiceclone.py +0 -0
  441. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/voices/darren.wav +0 -0
  442. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/voices/default.wav +0 -0
  443. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/voices/jessica.wav +0 -0
  444. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/voices/lisa.wav +0 -0
  445. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/voices/may.wav +0 -0
  446. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/wiki.py +0 -0
  447. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/wiki_audit.py +0 -0
  448. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/wiki_cli.py +0 -0
  449. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/worktree.py +0 -0
  450. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/agentwire/worktree_registry.py +0 -0
  451. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/logo.png +0 -0
  452. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/architecture.md +0 -0
  453. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/communication/channels.md +0 -0
  454. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/communication/hammerspoon.md +0 -0
  455. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/communication/handoff.md +0 -0
  456. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/concepts.md +0 -0
  457. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/council.md +0 -0
  458. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/deployment/remote-access.md +0 -0
  459. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/deployment/remote-machines.md +0 -0
  460. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/glossary.md +0 -0
  461. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  462. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/internals/damage-control.md +0 -0
  463. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/internals/parallel-refactor.md +0 -0
  464. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/internals/shell-escaping.md +0 -0
  465. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/internals/window-collage.md +0 -0
  466. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/quickstart.md +0 -0
  467. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
  468. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
  469. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  470. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/security/damage-control-hardening.md +0 -0
  471. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/security/pip-audit.md +0 -0
  472. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/security/remote-access-hardening.md +0 -0
  473. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/security/secrets.md +0 -0
  474. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/services.md +0 -0
  475. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  476. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/sessions/messaging.md +0 -0
  477. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/sessions/pi.md +0 -0
  478. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/sessions/prompt-routing.md +0 -0
  479. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/sessions/window-sizing.md +0 -0
  480. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/usage-limit-recovery.md +0 -0
  481. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/voice/stt-cloud.md +0 -0
  482. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
  483. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/conftest.py +0 -0
  484. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/e2e/test_portal_ui.py +0 -0
  485. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/fixtures/sample_agentwire.yml +0 -0
  486. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/fixtures/sample_config.yaml +0 -0
  487. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/fixtures/sample_scheduler.yaml +0 -0
  488. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/integration/test_council_portal.py +0 -0
  489. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/integration/test_scheduler_board.py +0 -0
  490. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/integration/test_server_websockets.py +0 -0
  491. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_announcements.py +0 -0
  492. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_build_agent_command.py +0 -0
  493. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_cli_output.py +0 -0
  494. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_cli_smoke.py +0 -0
  495. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_council_inbox.py +0 -0
  496. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_council_state.py +0 -0
  497. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_council_view.py +0 -0
  498. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_damage_control_hooks.py +0 -0
  499. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_damage_control_sync.py +0 -0
  500. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_devices.py +0 -0
  501. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_diff_cli.py +0 -0
  502. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_doctor_voice.py +0 -0
  503. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_event_log.py +0 -0
  504. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_file_io.py +0 -0
  505. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_handoff_git_state.py +0 -0
  506. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_handoff_instructions.py +0 -0
  507. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_handoff_parser.py +0 -0
  508. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_handoff_renderer.py +0 -0
  509. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_history.py +0 -0
  510. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_hooks_install.py +0 -0
  511. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_idle_handler.py +0 -0
  512. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_idle_nag.py +0 -0
  513. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_inbox.py +0 -0
  514. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_init_command.py +0 -0
  515. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_limits_tick_isolation.py +0 -0
  516. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_locking.py +0 -0
  517. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_msg_cli.py +0 -0
  518. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_portal_api.py +0 -0
  519. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_project_config.py +0 -0
  520. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_prompt_router.py +0 -0
  521. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_push.py +0 -0
  522. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_rebuild_guard.py +0 -0
  523. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_repo_cli.py +0 -0
  524. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_roles.py +0 -0
  525. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_scheduler.py +0 -0
  526. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_scheduler_parsing.py +0 -0
  527. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_scratchpad.py +0 -0
  528. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_security.py +0 -0
  529. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_server_async.py +0 -0
  530. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_server_pure.py +0 -0
  531. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_services.py +0 -0
  532. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_session_context.py +0 -0
  533. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_speech_tags.py +0 -0
  534. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_ssh.py +0 -0
  535. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_stt_backend.py +0 -0
  536. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_stt_cloud.py +0 -0
  537. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_stt_engine.py +0 -0
  538. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_task_cli.py +0 -0
  539. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_tasks.py +0 -0
  540. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_templating.py +0 -0
  541. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_terminal_resize.py +0 -0
  542. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_tmux_template.py +0 -0
  543. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_tts_local.py +0 -0
  544. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_tunnels_probe.py +0 -0
  545. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_usage_limit.py +0 -0
  546. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_validation.py +0 -0
  547. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_voice_status.py +0 -0
  548. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_wiki.py +0 -0
  549. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_wiki_audit.py +0 -0
  550. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_worktree.py +0 -0
  551. {agentwire_dev-1.47.0 → agentwire_dev-1.49.0}/tests/unit/test_worktree_registry.py +0 -0
@@ -0,0 +1,142 @@
1
+ ---
2
+ description: Distill this conversation into a shareable handoff bundle (ai-handoff.md + show-the-story.html)
3
+ ---
4
+
5
+ # /handoff
6
+
7
+ You are about to compile this conversation into a **shareable handoff bundle**. The output is two artifacts:
8
+
9
+ 1. **`ai-handoff.md`** — XML-tagged markdown a teammate can paste into another LLM (Opus 4.7) to roughly continue the conversation.
10
+ 2. **`show-the-story.html`** — single-file presentation a human can open in a browser.
11
+
12
+ You are uniquely positioned to do this well: you already have full conversation context. Don't ask the user clarifying questions unless something is genuinely ambiguous — distill what you know.
13
+
14
+ ## Workflow
15
+
16
+ ### 1. Initialize the bundle
17
+
18
+ Call the MCP tool to create the bundle dir and pre-fill the template with git state and the CLAUDE.md/rules/memory chain:
19
+
20
+ ```
21
+ mcp__agentwire__handoff_init(title="<short slug>")
22
+ ```
23
+
24
+ The tool returns a `bundle_dir` and an `ai_handoff_path`. The pre-filled template at `ai_handoff_path` already has:
25
+ - `<metadata>` populated with cwd, branch, commit, repo url
26
+ - `<instructions>` populated with the full CLAUDE.md chain (verbatim)
27
+ - `<project_state>` populated with `git status`, `git log`, and uncommitted diff
28
+
29
+ You **must not touch** the `<instructions>` section unless redacting something sensitive — it's what makes the bundle portable across machines.
30
+
31
+ ### 2. Read the pre-filled template
32
+
33
+ Use Read on `ai_handoff_path` to see exactly what got pre-filled.
34
+
35
+ ### 3. Fill in the rest
36
+
37
+ Use Write (or Edit) on `ai_handoff_path` to replace every `{{ ... }}` placeholder with real content. Specifically:
38
+
39
+ #### `<title>`
40
+ One short line summarizing the session — what it was about, not what was decided. Roughly 4-8 words.
41
+
42
+ #### `<metadata>` extras
43
+ Fill `started_at` / `ended_at` if you can estimate them, `user_identity` (if mentioned), and `mcp_servers` (the ones actually used in this conversation).
44
+
45
+ #### `<environment>`
46
+ What the receiver can't see from `cwd` alone. Active panes, channels (Slack/Discord/email), scheduler state if relevant. If nothing notable, write a one-line "no special environment" note.
47
+
48
+ #### `<conversation_summary>`
49
+ This is the most load-bearing section. Be dense and structured.
50
+
51
+ - `<goal>` — one sentence: what this session set out to do.
52
+ - `<tldr>` — one paragraph the receiver reads first. Convey decisions made, current state, and what's next.
53
+ - `<decisions>` — every meaningful decision. For each: `<title>` (short name), `<rationale>` (why), `<alternatives>` (what was considered and not picked). If a user message confirmed a choice, that's a decision.
54
+ - `<dead_ends>` — things tried and rejected. Critical: this saves the receiver from retracing your steps.
55
+ - `<open_threads>` — what's unresolved. Be specific. "tests/handoff/test_parser.py needs malformed-input cases" beats "tests pending".
56
+ - `<stats>` — turns, files_touched, tools_used, duration_minutes. Estimates are fine.
57
+
58
+ #### `<journey>`
59
+ 3-7 narrative beats — the *story* of the session, not the transcript. For each beat:
60
+ - `<beat title="...">` — short headline.
61
+ - `<quote>...</quote>` — optional verbatim line from the conversation that captured the turn (user or assistant).
62
+ - `<what_happened>...</what_happened>` — what actually changed.
63
+
64
+ This drives the visual presentation in show-the-story.html. Aim for memorable beats: turning points, surprises, decisions, blockers.
65
+
66
+ #### `<recent_turns>`
67
+ The last ~10-20 turns, **filtered**:
68
+ - Drop tool noise (file reads, searches) unless the result drove a decision.
69
+ - Keep all user turns verbatim — they're the signal of intent.
70
+ - Keep assistant turns that made decisions, asked questions, or summarized.
71
+ - Use markdown: `**user:**` / `**assistant:**` labels, blockquotes for quoted content.
72
+
73
+ #### `<handoff>`
74
+ Direct instructions to the next agent.
75
+ - `<one_sentence>` — what they should do first.
76
+ - `<resume_at>` — concrete file path / TODO id / step number.
77
+ - `<caveats>` — permission boundaries ("don't push", "don't edit X without asking"), env-specific notes, anything the receiver could trip on.
78
+
79
+ #### `<theme>`
80
+ Pick a palette and vibe that matches the **emotional tone** of the session. A debugging crisis at 2am gets different colors than a clean greenfield design pass. Be honest in `mood`. The shape:
81
+
82
+ ```json
83
+ {
84
+ "name": "short-slug",
85
+ "mood": "honest read of the session's emotional tone — 1 short sentence",
86
+ "palette": {
87
+ "bg": "#hex",
88
+ "surface": "#hex",
89
+ "fg": "#hex",
90
+ "muted": "#hex",
91
+ "accent": "#hex",
92
+ "accent_2": "#hex",
93
+ "border": "#hex"
94
+ },
95
+ "fonts": {
96
+ "heading": "css font-family stack",
97
+ "body": "css font-family stack"
98
+ },
99
+ "motion": "subtle"
100
+ }
101
+ ```
102
+
103
+ Tips:
104
+ - Dark backgrounds work better in this template — `bg` should be deep.
105
+ - `accent` is the dominant interactive color (tabs, headlines, highlights). Pick something that signals the mood.
106
+ - `accent_2` is for warnings / dead-ends. Often a warm color.
107
+ - Keep `fonts.heading` monospace-leaning, `fonts.body` sans-serif. Override only if the mood justifies it.
108
+ - `motion`: `"subtle"` (default), `"playful"` (longer transitions), `"none"` (instant).
109
+
110
+ ### 4. Render the HTML
111
+
112
+ After writing `ai-handoff.md`, render the HTML:
113
+
114
+ ```
115
+ mcp__agentwire__handoff_render(bundle_dir="<from step 1>", story=true)
116
+ ```
117
+
118
+ If render fails, the parser will tell you which tag is missing or malformed — fix and re-run.
119
+
120
+ ### 5. Report
121
+
122
+ Give the user:
123
+ - The bundle dir path
124
+ - A one-sentence summary of what you produced
125
+ - An explicit pointer to open `show-the-story.html` in a browser
126
+
127
+ Don't paste the full ai-handoff.md back — it's long. Just confirm it's saved and mention the highlights you captured (number of decisions, dead ends, journey beats, theme name/mood).
128
+
129
+ ## Quality bar
130
+
131
+ The receiver's first impression is everything. A great handoff:
132
+ - Reads cold — the receiver doesn't need to be in this folder.
133
+ - Is honest about dead ends. Hiding what didn't work wastes the receiver's tokens.
134
+ - Names specific files and line numbers, not vague pointers.
135
+ - Picks a theme that captures the session's actual feel. Don't pick "professional blue" for a chaotic debug session.
136
+
137
+ ## Don't
138
+
139
+ - Don't ask the user "should I include X?" — make the call yourself.
140
+ - Don't paste the entire conversation as `<recent_turns>` — filter aggressively.
141
+ - Don't over-design the theme. The structure is fixed; you're picking colors and vibes, not a layout.
142
+ - Don't edit `<instructions>` (the CLAUDE.md chain) unless redacting secrets.
@@ -57,3 +57,6 @@ htmlcov/
57
57
 
58
58
  # pytest-textual-snapshot diff page (regenerated each run)
59
59
  snapshot_report.html
60
+
61
+ # Node
62
+ node_modules/
@@ -0,0 +1,5 @@
1
+ # AgentWire
2
+
3
+ Voice interface for AI coding agents. Push-to-talk from any device to tmux sessions running Claude Code.
4
+
5
+ Agent instructions, conventions, and architecture live in [CLAUDE.md](CLAUDE.md).
@@ -144,7 +144,7 @@ def validate_config(config: Config) -> tuple[list[ConfigError], list[ConfigWarni
144
144
 
145
145
  ## CLI First
146
146
 
147
- All session/machine logic lives in CLI commands (`__main__.py`). The web portal is a thin wrapper that:
147
+ All session/machine logic lives in the CLI. The command tree is split per-domain (#495): shared helpers (machine config, SSH, JSON output, session resolution, etc.) live in `core.py`; each command group lives in its own `agentwire/<domain>_cli.py` exposing a `register_<domain>_parser(subparsers)` registrar, and `build_parser()` imports them and runs the `_REGISTRARS` loop. `__main__.py` is just the entry point. Adding a command means writing a new `*_cli.py` + appending its registrar, not editing a god-file. The web portal is a thin wrapper that:
148
148
 
149
149
  1. Calls CLI via `run_agentwire_cmd(["command", "args"])`
150
150
  2. Parses JSON output (`--json` flag)
@@ -159,7 +159,9 @@ When adding new functionality:
159
159
 
160
160
  ```
161
161
  agentwire/
162
- ├── __main__.py # CLI commands (entry point)
162
+ ├── __main__.py # CLI entry point (imports + runs the registrar loop)
163
+ ├── core.py # Shared CLI helpers (machine config, SSH, JSON, session resolution)
164
+ ├── *_cli.py # Per-domain command groups, each with a register_<domain>_parser()
163
165
  ├── server.py # WebSocket server
164
166
  ├── config.py # Configuration dataclasses
165
167
  ├── errors.py # Structured error classes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentwire-dev
3
- Version: 1.47.0
3
+ Version: 1.49.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
@@ -256,7 +256,6 @@ Requires-Dist: fastapi>=0.104.0; extra == 'tts'
256
256
  Requires-Dist: faster-whisper>=1.0.0; extra == 'tts'
257
257
  Requires-Dist: pydantic>=2.0.0; extra == 'tts'
258
258
  Requires-Dist: python-multipart>=0.0.6; extra == 'tts'
259
- Requires-Dist: runpod>=1.6.0; extra == 'tts'
260
259
  Requires-Dist: torch>=2.0.0; extra == 'tts'
261
260
  Requires-Dist: torchaudio>=2.0.0; extra == 'tts'
262
261
  Requires-Dist: uvicorn>=0.24.0; extra == 'tts'
@@ -295,9 +294,9 @@ structurally can't match:
295
294
  the machine.
296
295
  - **Voice-native, not voice-bolted-on.** Push-to-talk in, **neural TTS out on plain
297
296
  CPU** (Kokoro, no GPU). Want your agents to talk back in a **cloned voice**? Run a
298
- self-hosted GPU shim (Chatterbox / Qwen / Zonos) — same machine, still your keys.
297
+ self-hosted GPU shim (Chatterbox / Zonos) — same machine, still your keys.
299
298
  - **Built to orchestrate _many_ agents, not watch one.** Council (multi-soul
300
- deliberation), an overnight scheduler, briefing mode, and worktree-parallel
299
+ deliberation), a recurring scheduler, briefing mode, and worktree-parallel
301
300
  workers — tmux- and Claude-Code-native from the ground up.
302
301
 
303
302
  > **Use the official app to watch one session; use AgentWire to orchestrate many,
@@ -388,7 +387,7 @@ pip install agentwire-dev
388
387
  | **Voice Control** | Push-to-talk from any device on your network |
389
388
  | **Neural Voice + Cloning** | Kokoro neural TTS on CPU out of the box; voice cloning via a self-hosted GPU shim |
390
389
  | **Council** | Fan a prompt to multiple "soul" sessions (brain, conscience, critic…), synthesize with attribution |
391
- | **Scheduler** | Overnight / recurring autonomous tasks with gates, priorities, and usage-limit recovery |
390
+ | **Scheduler** | Recurring autonomous tasks with gates, priorities, and usage-limit recovery |
392
391
  | **Briefing Mode** | A terse human-facing anchor fans out verbose worktree correspondents, then briefs you on cue |
393
392
  | **Multi-Session** | Run multiple agents on different projects simultaneously |
394
393
  | **Git Worktrees** | Same project, multiple branches, parallel agents |
@@ -474,7 +473,7 @@ Two tiers, both sides:
474
473
  # ~/.agentwire/config.yaml
475
474
  tts:
476
475
  backend: "custom"
477
- url: "http://localhost:8100" # agentwire tts start (kokoro CPU / chatterbox GPU / qwen / zonos)
476
+ url: "http://localhost:8100" # agentwire tts start (kokoro CPU / chatterbox GPU / zonos)
478
477
  options:
479
478
  backend: kokoro
480
479
  stt:
@@ -31,9 +31,9 @@ structurally can't match:
31
31
  the machine.
32
32
  - **Voice-native, not voice-bolted-on.** Push-to-talk in, **neural TTS out on plain
33
33
  CPU** (Kokoro, no GPU). Want your agents to talk back in a **cloned voice**? Run a
34
- self-hosted GPU shim (Chatterbox / Qwen / Zonos) — same machine, still your keys.
34
+ self-hosted GPU shim (Chatterbox / Zonos) — same machine, still your keys.
35
35
  - **Built to orchestrate _many_ agents, not watch one.** Council (multi-soul
36
- deliberation), an overnight scheduler, briefing mode, and worktree-parallel
36
+ deliberation), a recurring scheduler, briefing mode, and worktree-parallel
37
37
  workers — tmux- and Claude-Code-native from the ground up.
38
38
 
39
39
  > **Use the official app to watch one session; use AgentWire to orchestrate many,
@@ -124,7 +124,7 @@ pip install agentwire-dev
124
124
  | **Voice Control** | Push-to-talk from any device on your network |
125
125
  | **Neural Voice + Cloning** | Kokoro neural TTS on CPU out of the box; voice cloning via a self-hosted GPU shim |
126
126
  | **Council** | Fan a prompt to multiple "soul" sessions (brain, conscience, critic…), synthesize with attribution |
127
- | **Scheduler** | Overnight / recurring autonomous tasks with gates, priorities, and usage-limit recovery |
127
+ | **Scheduler** | Recurring autonomous tasks with gates, priorities, and usage-limit recovery |
128
128
  | **Briefing Mode** | A terse human-facing anchor fans out verbose worktree correspondents, then briefs you on cue |
129
129
  | **Multi-Session** | Run multiple agents on different projects simultaneously |
130
130
  | **Git Worktrees** | Same project, multiple branches, parallel agents |
@@ -210,7 +210,7 @@ Two tiers, both sides:
210
210
  # ~/.agentwire/config.yaml
211
211
  tts:
212
212
  backend: "custom"
213
- url: "http://localhost:8100" # agentwire tts start (kokoro CPU / chatterbox GPU / qwen / zonos)
213
+ url: "http://localhost:8100" # agentwire tts start (kokoro CPU / chatterbox GPU / zonos)
214
214
  options:
215
215
  backend: kokoro
216
216
  stt:
@@ -34,10 +34,13 @@ unzip -l dist/agentwire_dev-{VERSION}-py3-none-any.whl | grep -E "templates/|sta
34
34
 
35
35
  ### 4. Publish to PyPI
36
36
 
37
- The `PYPI_TOKEN` lives in `~/.agentwire/.env`. Pass it explicitly:
37
+ The `PYPI_TOKEN` lives in `~/.agentwire/.env`. Don't `source` the file — it can
38
+ contain unquoted `&` in other values (e.g. a URL with query params), which makes
39
+ the shell hit a parse error before `uv publish` ever runs. Grep the token out
40
+ directly:
38
41
 
39
42
  ```bash
40
- source ~/.agentwire/.env && uv publish --token "$PYPI_TOKEN" dist/agentwire_dev-{VERSION}*
43
+ uv publish --token "$(grep '^PYPI_TOKEN=' ~/.agentwire/.env | cut -d= -f2-)" dist/agentwire_dev-{VERSION}*
41
44
  ```
42
45
 
43
46
  ### 5. Create GitHub release
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.47.0"
3
+ __version__ = "1.49.0"
@@ -1,26 +1,11 @@
1
1
  """Abstract base class for agent backends."""
2
2
 
3
3
  from abc import ABC, abstractmethod
4
- from pathlib import Path
5
4
 
6
5
 
7
6
  class AgentBackend(ABC):
8
7
  """Abstract base for managing AI coding agent sessions."""
9
8
 
10
- @abstractmethod
11
- def create_session(self, name: str, path: Path, options: dict | None = None) -> bool:
12
- """Create a new agent session.
13
-
14
- Args:
15
- name: Session name (e.g., "api", "auth")
16
- path: Working directory for the session
17
- options: Optional backend-specific options
18
-
19
- Returns:
20
- True if session was created successfully
21
- """
22
- pass
23
-
24
9
  @abstractmethod
25
10
  def session_exists(self, name: str) -> bool:
26
11
  """Check if a session exists.
@@ -74,18 +59,6 @@ class AgentBackend(ABC):
74
59
  """
75
60
  pass
76
61
 
77
- @abstractmethod
78
- def kill_session(self, name: str) -> bool:
79
- """Terminate a session.
80
-
81
- Args:
82
- name: Session name
83
-
84
- Returns:
85
- True if session was terminated successfully
86
- """
87
- pass
88
-
89
62
  @abstractmethod
90
63
  def list_sessions(self) -> list[str]:
91
64
  """List all active sessions.
@@ -3,7 +3,6 @@
3
3
  import json
4
4
  import logging
5
5
  import os
6
- import re
7
6
  import shlex
8
7
  import subprocess
9
8
  from pathlib import Path
@@ -13,30 +12,10 @@ from .base import AgentBackend
13
12
 
14
13
  logger = logging.getLogger(__name__)
15
14
 
16
- # Pattern to match env var prefix: VAR='value' or VAR="value" or VAR=value
17
- ENV_VAR_PREFIX_PATTERN = re.compile(r'^([A-Z_][A-Z0-9_]*)=([\'"]?)(.+?)\2\s+(.+)$')
18
-
19
15
  # Base command without permission flags - flags added based on bypass_permissions option
20
16
  DEFAULT_AGENT_COMMAND = "claude"
21
17
 
22
18
 
23
- def parse_env_var_prefix(command: str) -> tuple[str | None, str | None, str]:
24
- """Parse env var prefix from a command string.
25
-
26
- Handles commands like: VAR='value' some_command --args
27
- Returns: (var_name, var_value, remaining_command)
28
-
29
- If no env var prefix, returns (None, None, original_command)
30
- """
31
- match = ENV_VAR_PREFIX_PATTERN.match(command)
32
- if match:
33
- var_name = match.group(1)
34
- var_value = match.group(3) # The value without quotes
35
- remaining = match.group(4)
36
- return var_name, var_value, remaining
37
- return None, None, command
38
-
39
-
40
19
  def _tmux_path() -> str:
41
20
  """Resolve tmux binary path, with fallback to common locations."""
42
21
  import shutil
@@ -183,107 +162,6 @@ class TmuxAgent(AgentBackend):
183
162
  return name, None
184
163
  return name, None
185
164
 
186
- def _format_agent_command(self, name: str, path: Path, options: dict | None = None) -> str:
187
- """Format the agent command with placeholders.
188
-
189
- Args:
190
- name: Session name
191
- path: Working directory
192
- options: Additional options including:
193
- - model: Model to use
194
- - session_id: Claude Code session UUID
195
- - fork_from: Session ID to fork from (uses --resume --fork-session)
196
- - bypass_permissions: If True, add --dangerously-skip-permissions flag
197
-
198
- Returns:
199
- Formatted command string
200
- """
201
- options = options or {}
202
- model = options.get("model", self.default_model)
203
- session_id = options.get("session_id")
204
- fork_from = options.get("fork_from")
205
- bypass_permissions = options.get("bypass_permissions", True)
206
-
207
- cmd = self.agent_command
208
- cmd = cmd.replace("{name}", name)
209
- cmd = cmd.replace("{path}", str(path))
210
- cmd = cmd.replace("{model}", model)
211
-
212
- # Add permission bypass flag if requested
213
- if bypass_permissions:
214
- cmd = f"{cmd} --dangerously-skip-permissions"
215
-
216
- # Add session ID if provided (for new sessions)
217
- if session_id and not fork_from:
218
- cmd = f"{cmd} --session-id {session_id}"
219
-
220
- # Fork from existing session
221
- if fork_from:
222
- cmd = f"{cmd} --resume {fork_from} --fork-session"
223
- # Also set the new session ID if provided
224
- if session_id:
225
- cmd = f"{cmd} --session-id {session_id}"
226
-
227
- return cmd
228
-
229
- def create_session(self, name: str, path: Path, options: dict | None = None) -> bool:
230
- """Create a new tmux session and start the agent."""
231
- options = options or {}
232
- session_name, machine = self._parse_session_name(name)
233
- agent_cmd = self._format_agent_command(session_name, path, options)
234
-
235
- if machine:
236
- projects_dir = machine.get("projects_dir", "~/projects")
237
- remote_path = f"{projects_dir}/{path.name}" if not str(path).startswith("/") else str(path)
238
-
239
- # Parse env var prefix (e.g., ANTHROPIC_AUTH_TOKEN='...' claude)
240
- # Must use tmux set-environment for remote sessions since shlex.quote
241
- # would break the env var assignment
242
- env_var, env_val, actual_cmd = parse_env_var_prefix(agent_cmd)
243
-
244
- cmd_parts = [
245
- f"tmux new-session -d -s {shlex.quote(session_name)} -c {shlex.quote(remote_path)}"
246
- ]
247
-
248
- if env_var:
249
- # Set env var in tmux session environment
250
- cmd_parts.append(
251
- f"tmux set-environment -t {shlex.quote(session_name)} {env_var} {shlex.quote(env_val)}"
252
- )
253
-
254
- # Send the actual command (without env var prefix if it was extracted)
255
- cmd_parts.append(
256
- f"tmux send-keys -t {shlex.quote(session_name)} {shlex.quote(actual_cmd)} Enter"
257
- )
258
-
259
- cmd = " && ".join(cmd_parts)
260
- result = self._run_remote(machine, cmd)
261
- else:
262
- # Create session
263
- result = self._run_local([
264
- "tmux", "new-session", "-d",
265
- "-s", session_name,
266
- "-c", str(path),
267
- ])
268
-
269
- if result.returncode != 0:
270
- logger.error(f"Failed to create session: {result.stderr}")
271
- return False
272
-
273
- # Start agent
274
- result = self._run_local([
275
- "tmux", "send-keys",
276
- "-t", session_name,
277
- agent_cmd, "Enter",
278
- ])
279
-
280
- if result.returncode != 0:
281
- logger.error(f"Failed to start agent: {result.stderr}")
282
- return False
283
-
284
- logger.info(f"Created session '{name}' at {path}")
285
- return True
286
-
287
165
  def session_exists(self, name: str) -> bool:
288
166
  """Check if a tmux session exists."""
289
167
  session_name, machine = self._parse_session_name(name)
@@ -416,25 +294,6 @@ class TmuxAgent(AgentBackend):
416
294
 
417
295
  return True
418
296
 
419
- def kill_session(self, name: str) -> bool:
420
- """Terminate a tmux session."""
421
- session_name, machine = self._parse_session_name(name)
422
-
423
- if machine:
424
- cmd = f"tmux kill-session -t {shlex.quote(session_name)}"
425
- result = self._run_remote(machine, cmd)
426
- else:
427
- result = self._run_local([
428
- "tmux", "kill-session", "-t", session_name,
429
- ])
430
-
431
- if result.returncode != 0:
432
- logger.error(f"Failed to kill session: {result.stderr}")
433
- return False
434
-
435
- logger.info(f"Killed session '{name}'")
436
- return True
437
-
438
297
  def list_sessions(self) -> list[str]:
439
298
  """List all tmux sessions (from configured machines via SSH)."""
440
299
  sessions = []
@@ -160,7 +160,7 @@ def _render_email_template(
160
160
 
161
161
 
162
162
  def _get_email_config() -> EmailConfig:
163
- """Get email config from channels registry or legacy path."""
163
+ """Get email config from channels registry."""
164
164
  from agentwire.config import get_config
165
165
 
166
166
  config = get_config()
@@ -30,8 +30,8 @@ class QuoConfigError(NotificationError):
30
30
  class QuoConfig:
31
31
  """Quo (OpenPhone) SMS configuration.
32
32
 
33
- The API key is env-only: QUO_API_KEY (or legacy OPENPHONE_API_KEY),
34
- normally a line in ~/.agentwire/.env (docs/wiki/security/secrets.md).
33
+ The API key is env-only: QUO_API_KEY, normally a line in
34
+ ~/.agentwire/.env (docs/wiki/security/secrets.md).
35
35
  It is never read from config.yaml.
36
36
  """
37
37
 
@@ -40,7 +40,7 @@ class QuoConfig:
40
40
  api_key: str = field(init=False, default="")
41
41
 
42
42
  def __post_init__(self):
43
- self.api_key = os.environ.get("QUO_API_KEY", "") or os.environ.get("OPENPHONE_API_KEY", "")
43
+ self.api_key = os.environ.get("QUO_API_KEY", "")
44
44
 
45
45
 
46
46
  API_URL = "https://api.openphone.com/v1/messages"
@@ -534,7 +534,7 @@ def register_channels_parser(subparsers) -> None:
534
534
  say_parser.add_argument("-s", "--session", type=str, help="Session name (auto-detected from .agentwire.yml or tmux)")
535
535
  say_parser.add_argument("--exaggeration", type=float, help="Voice exaggeration (0-1, Chatterbox)")
536
536
  say_parser.add_argument("--cfg", type=float, help="CFG weight (0-1, Chatterbox)")
537
- say_parser.add_argument("--backend", type=str, help="TTS backend (chatterbox, qwen-base-1.7b, qwen-design, qwen-custom)")
537
+ say_parser.add_argument("--backend", type=str, help="TTS backend (chatterbox, zonos-hybrid, zonos-transformer, kokoro)")
538
538
  say_parser.add_argument("--instructions", type=str, help="Free-text style instructions passed to the TTS shim (e.g. 'speak warmly')")
539
539
  say_parser.add_argument("--language", type=str, default="English", help="Language (default: English)")
540
540
  say_parser.add_argument("--stream", action="store_true", help="Use streaming mode (if backend supports)")
@@ -220,13 +220,10 @@ def clear_task_context(session: str) -> None:
220
220
  session: tmux session name
221
221
  """
222
222
  context_file = TASKS_DIR / f"{session}.json"
223
- complete_file = TASKS_DIR / f"{session}.complete"
224
-
225
- for f in [context_file, complete_file]:
226
- try:
227
- f.unlink(missing_ok=True)
228
- except OSError:
229
- pass
223
+ try:
224
+ context_file.unlink(missing_ok=True)
225
+ except OSError:
226
+ pass
230
227
 
231
228
 
232
229
  def wait_for_completion_signal(
@@ -253,8 +250,6 @@ def wait_for_completion_signal(
253
250
  Raises:
254
251
  CompletionTimeout: If session dies before task completed
255
252
  """
256
- complete_file = TASKS_DIR / f"{session}.complete"
257
-
258
253
  # Build glob pattern for fuzzy summary detection (agents sometimes
259
254
  # invent their own timestamp instead of using the provided filename).
260
255
  summary_glob = None
@@ -305,14 +300,6 @@ def wait_for_completion_signal(
305
300
  except CompletionError:
306
301
  pass # File may be partially written, retry
307
302
 
308
- # Fallback: check for legacy .complete signal file
309
- if complete_file.exists():
310
- try:
311
- signal = json.loads(complete_file.read_text())
312
- return signal
313
- except (json.JSONDecodeError, OSError):
314
- pass # File may be partially written, retry
315
-
316
303
  # Usage-limit dialog: park deterministically (zero-LLM) and report a
317
304
  # distinct status — the watchdog resumes the session after reset.
318
305
  # Also honors a park the watchdog performed first.
@@ -607,9 +607,8 @@ def _dict_to_config(data: dict) -> Config:
607
607
  extra=projects_data.get("extra", []),
608
608
  )
609
609
 
610
- # Worktree-session orchestration (`worktree:` key). `quicktask:` is a
611
- # documented legacy alias the canonical key is `worktree:`.
612
- worktree_data = data.get("worktree", data.get("quicktask", {})) or {}
610
+ # Worktree-session orchestration (`worktree:` key).
611
+ worktree_data = data.get("worktree", {}) or {}
613
612
  worktree = WorktreeConfig(
614
613
  default_base=worktree_data.get("default_base"),
615
614
  default_project=worktree_data.get("default_project"),