agentwire-dev 1.57.0__tar.gz → 1.59.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 (490) hide show
  1. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.agentwire.yml.example +1 -1
  2. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.gitignore +2 -0
  3. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/PKG-INFO +6 -6
  4. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/README.md +5 -5
  5. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/__init__.py +1 -1
  6. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/__main__.py +4 -5
  7. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/config.py +3 -3
  8. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/config_cli.py +0 -1
  9. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/core.py +102 -187
  10. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/cli.py +9 -9
  11. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/state.py +3 -3
  12. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/doctor_cli.py +60 -24
  13. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/parser.py +1 -1
  14. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/schema.py +1 -1
  15. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff_cli.py +1 -1
  16. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/history_cli.py +19 -29
  17. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_core.py +2 -2
  18. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_pane.py +4 -4
  19. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_server.py +0 -1
  20. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_session.py +26 -13
  21. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_voice.py +1 -1
  22. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/onboarding.py +3 -3
  23. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/pane_cli.py +31 -33
  24. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/project_config.py +28 -123
  25. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/projects.py +4 -4
  26. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/agentwire.md +8 -4
  27. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/contributor.md +1 -1
  28. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/orchestrator.md +1 -1
  29. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles_cli.py +4 -4
  30. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/permission.py +12 -57
  31. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/projects.py +5 -8
  32. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/sessions_admin.py +12 -19
  33. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/dispatch.py +11 -11
  34. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/models.py +1 -1
  35. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/state.py +1 -1
  36. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/security.py +2 -2
  37. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/server.py +4 -40
  38. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/services.py +3 -3
  39. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/session_cli.py +72 -138
  40. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/css/desktop.css +1 -1
  41. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/command-palette.js +5 -16
  42. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/dead-key-suppressor.js +0 -5
  43. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/desktop.js +5 -17
  44. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/shortcuts.js +2 -2
  45. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/sessions-section.js +2 -2
  46. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar.js +17 -6
  47. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/system_cli.py +4 -7
  48. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tasks_cli.py +88 -0
  49. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts_cli.py +17 -72
  50. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/INDEX.md +2 -4
  51. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/architecture.md +5 -5
  52. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/concepts.md +2 -2
  53. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/council.md +1 -1
  54. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/glossary.md +2 -6
  55. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/damage-control.md +0 -1
  56. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/portal.md +3 -3
  57. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/troubleshooting.md +1 -1
  58. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/window-collage.md +1 -1
  59. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/quickstart.md +5 -5
  60. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/scheduling/scheduled-workloads.md +13 -11
  61. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/damage-control-hardening.md +1 -1
  62. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/secrets.md +0 -1
  63. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/services.md +1 -1
  64. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/claude-code-auto-mode.md +13 -13
  65. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/shim-contract.md +1 -1
  66. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/conftest.py +1 -1
  67. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/fixtures/sample_agentwire.yml +1 -1
  68. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_worktree_cmd.py +3 -3
  69. agentwire_dev-1.59.0/tests/unit/test_build_agent_command.py +163 -0
  70. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_cli_commands.py +12 -13
  71. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_config_cli.py +1 -1
  72. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_control_plane_protection.py +4 -4
  73. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_core_created_by_rooting.py +4 -1
  74. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_cli.py +2 -2
  75. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_state.py +1 -1
  76. agentwire_dev-1.59.0/tests/unit/test_doctor_task_migration.py +79 -0
  77. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_mcp_server.py +3 -3
  78. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_mcp_tools_args.py +31 -3
  79. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_portal_api.py +7 -7
  80. agentwire_dev-1.59.0/tests/unit/test_posture_default.py +57 -0
  81. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_project_config.py +70 -119
  82. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_scheduler.py +2 -2
  83. agentwire_dev-1.59.0/tests/unit/test_server_pure.py +50 -0
  84. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_services.py +1 -1
  85. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_task_cli.py +1 -1
  86. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tasks.py +1 -1
  87. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tasks_cli.py +81 -1
  88. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_usage_limit.py +1 -1
  89. agentwire_dev-1.57.0/agentwire/mcp_voiceclone.py +0 -81
  90. agentwire_dev-1.57.0/agentwire/voiceclone.py +0 -354
  91. agentwire_dev-1.57.0/docs/wiki/sessions/pi.md +0 -288
  92. agentwire_dev-1.57.0/tests/unit/test_build_agent_command.py +0 -392
  93. agentwire_dev-1.57.0/tests/unit/test_posture_default.py +0 -71
  94. agentwire_dev-1.57.0/tests/unit/test_server_pure.py +0 -115
  95. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.claude/commands/handoff.md +0 -0
  96. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.claude/skills/wiki/SKILL.md +0 -0
  97. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/FUNDING.yml +0 -0
  98. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  99. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  100. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  101. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  102. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/pytest.yml +0 -0
  103. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/ruff.yml +0 -0
  104. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/security.yml +0 -0
  105. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/.github/workflows/tts-smoke.yml +0 -0
  106. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/AGENTS.md +0 -0
  107. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/CODE_OF_CONDUCT.md +0 -0
  108. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/CONTRIBUTING.md +0 -0
  109. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/Dockerfile.local +0 -0
  110. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/LICENSE +0 -0
  111. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/RELEASING.md +0 -0
  112. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/SECURITY.md +0 -0
  113. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/SPONSORS.md +0 -0
  114. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/agents/__init__.py +0 -0
  115. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/agents/base.py +0 -0
  116. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/agents/tmux.py +0 -0
  117. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/cached_status.py +0 -0
  118. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/__init__.py +0 -0
  119. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/base.py +0 -0
  120. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/email.py +0 -0
  121. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/push.py +0 -0
  122. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels/quo.py +0 -0
  123. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/channels_cli.py +0 -0
  124. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/chrome_tabs.py +0 -0
  125. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/completion.py +0 -0
  126. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/__init__.py +0 -0
  127. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/inbox.py +0 -0
  128. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/minutes.py +0 -0
  129. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/council/view.py +0 -0
  130. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/devices.py +0 -0
  131. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/diff_cli.py +0 -0
  132. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/doctor_voice.py +0 -0
  133. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/ensure_cli.py +0 -0
  134. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/fetch.py +0 -0
  135. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/__init__.py +0 -0
  136. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/git_state.py +0 -0
  137. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/instructions.py +0 -0
  138. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/handoff/renderer.py +0 -0
  139. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/history.py +0 -0
  140. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/__init__.py +0 -0
  141. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/agentwire-permission.sh +0 -0
  142. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/__init__.py +0 -0
  143. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  144. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  145. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  146. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/mcp-tool-damage-control.py +0 -0
  147. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/read-tool-damage-control.py +0 -0
  148. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  149. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  150. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  151. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  152. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/control-plane.yaml +0 -0
  153. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  154. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  155. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  156. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  157. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  158. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  159. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  160. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/outbound.yaml +0 -0
  161. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/publish.yaml +0 -0
  162. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  163. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  164. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/idle-handler.sh +0 -0
  165. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks/queue-processor.sh +0 -0
  166. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/hooks_cli.py +0 -0
  167. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/inbox.py +0 -0
  168. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/limits_cli.py +0 -0
  169. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/listen.py +0 -0
  170. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/locking.py +0 -0
  171. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/machine_cli.py +0 -0
  172. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_channels.py +0 -0
  173. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_chrome.py +0 -0
  174. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_cli.py +0 -0
  175. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_council.py +0 -0
  176. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_desktop.py +0 -0
  177. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_handoff.py +0 -0
  178. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_history.py +0 -0
  179. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_listen.py +0 -0
  180. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_lock.py +0 -0
  181. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_machine.py +0 -0
  182. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_msg.py +0 -0
  183. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_notify.py +0 -0
  184. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_projects.py +0 -0
  185. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_scheduler.py +0 -0
  186. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_scratchpad.py +0 -0
  187. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_services.py +0 -0
  188. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_status.py +0 -0
  189. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_task.py +0 -0
  190. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_tunnels.py +0 -0
  191. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_wiki.py +0 -0
  192. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/mcp_worktree.py +0 -0
  193. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/msg_cli.py +0 -0
  194. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/network.py +0 -0
  195. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/notify_cli.py +0 -0
  196. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/palette_cli.py +0 -0
  197. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/pane_manager.py +0 -0
  198. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/portal_cli.py +0 -0
  199. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/prompt_router.py +0 -0
  200. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/prompts_cli.py +0 -0
  201. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/push_cli.py +0 -0
  202. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/push_store.py +0 -0
  203. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/repo_cli.py +0 -0
  204. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/research.py +0 -0
  205. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/__init__.py +0 -0
  206. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/anchor.md +0 -0
  207. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/chatbot.md +0 -0
  208. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/correspondent.md +0 -0
  209. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-brain.md +0 -0
  210. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-conscience.md +0 -0
  211. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-critic.md +0 -0
  212. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-devils-advocate.md +0 -0
  213. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-gut.md +0 -0
  214. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-historian.md +0 -0
  215. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-member.md +0 -0
  216. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/council-orchestrator.md +0 -0
  217. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/init.md +0 -0
  218. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/notifications.md +0 -0
  219. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/soul.md +0 -0
  220. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/task-runner.md +0 -0
  221. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/voice.md +0 -0
  222. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/worker-worktree.md +0 -0
  223. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/roles/worker.md +0 -0
  224. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/__init__.py +0 -0
  225. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/artifacts.py +0 -0
  226. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/config.py +0 -0
  227. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/council.py +0 -0
  228. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/desktop.py +0 -0
  229. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/history.py +0 -0
  230. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/machines.py +0 -0
  231. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/notify.py +0 -0
  232. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/palette.py +0 -0
  233. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/push.py +0 -0
  234. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/safety.py +0 -0
  235. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/scheduler.py +0 -0
  236. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/scratchpad.py +0 -0
  237. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/sessions.py +0 -0
  238. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/routes/voice.py +0 -0
  239. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety/__init__.py +0 -0
  240. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety/_core.py +0 -0
  241. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety_cli.py +0 -0
  242. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/safety_commands.py +0 -0
  243. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/__init__.py +0 -0
  244. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/gates.py +0 -0
  245. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/loop.py +0 -0
  246. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/report.py +0 -0
  247. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler/schedule.py +0 -0
  248. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scheduler_cli.py +0 -0
  249. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/scratchpad.py +0 -0
  250. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/send_cli.py +0 -0
  251. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/session_context.py +0 -0
  252. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/session_ready.py +0 -0
  253. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/ssh.py +0 -0
  254. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  255. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  256. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  257. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  258. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  259. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/announcements.json +0 -0
  260. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/apple-touch-icon.png +0 -0
  261. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/css/mobile.css +0 -0
  262. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/favicon-32.png +0 -0
  263. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/favicon-64.png +0 -0
  264. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/bear.webp +0 -0
  265. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/cat.webp +0 -0
  266. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/crown.webp +0 -0
  267. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
  268. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
  269. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
  270. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/deer.webp +0 -0
  271. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/drone.webp +0 -0
  272. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/eagle.webp +0 -0
  273. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/fox.webp +0 -0
  274. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/hawk.webp +0 -0
  275. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/horse.webp +0 -0
  276. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/lion.webp +0 -0
  277. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/rabbit.webp +0 -0
  278. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/robot.webp +0 -0
  279. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/tiger.webp +0 -0
  280. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/icons/sessions/wolf.webp +0 -0
  281. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/img/icon-192.png +0 -0
  282. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/img/icon-512.png +0 -0
  283. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/.gitkeep +0 -0
  284. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/announcement-modal.js +0 -0
  285. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/api.js +0 -0
  286. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/artifact-window.js +0 -0
  287. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/collage.js +0 -0
  288. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/council-window.js +0 -0
  289. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/desktop-manager.js +0 -0
  290. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/help-modal.js +0 -0
  291. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/icon-manager.js +0 -0
  292. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/mobile.js +0 -0
  293. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/notification-prefs.js +0 -0
  294. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/notifications-panel.js +0 -0
  295. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/ptt.js +0 -0
  296. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/push-client.js +0 -0
  297. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/review-window.js +0 -0
  298. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/safety-shared.js +0 -0
  299. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/safety-window.js +0 -0
  300. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/scratchpad.js +0 -0
  301. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/service-classification.js +0 -0
  302. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/session-id.js +0 -0
  303. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/session-window.js +0 -0
  304. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  305. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/config-section.js +0 -0
  306. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/council-section.js +0 -0
  307. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
  308. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
  309. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
  310. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  311. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/sidebar/services-section.js +0 -0
  312. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
  313. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/tile-manager.js +0 -0
  314. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/toast.js +0 -0
  315. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/token-modal.js +0 -0
  316. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/utils/ansi.js +0 -0
  317. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/utils/swipe.js +0 -0
  318. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/autosend-prefs.js +0 -0
  319. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/browser-stt.js +0 -0
  320. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/browser-tts.js +0 -0
  321. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/jargon.js +0 -0
  322. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/voice/prompt.js +0 -0
  323. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
  324. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/manifest.webmanifest +0 -0
  325. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/static/service-worker.js +0 -0
  326. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/__init__.py +0 -0
  327. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/base.py +0 -0
  328. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/cloud.py +0 -0
  329. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/engine.py +0 -0
  330. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/local.py +0 -0
  331. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/server_backend.py +0 -0
  332. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/stt/stt_server.py +0 -0
  333. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tabs_cli.py +0 -0
  334. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tasks.py +0 -0
  335. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/__init__.py +0 -0
  336. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/base.html +0 -0
  337. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/council/minutes.html.j2 +0 -0
  338. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/desktop.html +0 -0
  339. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/email_notification.html +0 -0
  340. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  341. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
  342. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/mobile.html +0 -0
  343. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/pair.html +0 -0
  344. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templates/tmux.conf +0 -0
  345. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/templating.py +0 -0
  346. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/aws.yaml +0 -0
  347. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/docker.yaml +0 -0
  348. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/gcp.yaml +0 -0
  349. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/gh.yaml +0 -0
  350. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/git.yaml +0 -0
  351. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/gws.yaml +0 -0
  352. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/kubectl.yaml +0 -0
  353. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/npm.yaml +0 -0
  354. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/terraform.yaml +0 -0
  355. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tooldefs/uv.yaml +0 -0
  356. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/__init__.py +0 -0
  357. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/audio.py +0 -0
  358. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/base.py +0 -0
  359. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/__init__.py +0 -0
  360. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/chatterbox.py +0 -0
  361. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/kokoro.py +0 -0
  362. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/engines/zonos.py +0 -0
  363. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/kokoro_server.py +0 -0
  364. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/local.py +0 -0
  365. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts/registry.py +0 -0
  366. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tts_server.py +0 -0
  367. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tunnels.py +0 -0
  368. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/tunnels_cli.py +0 -0
  369. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/usage_limit.py +0 -0
  370. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/__init__.py +0 -0
  371. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/chunker.py +0 -0
  372. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/event_log.py +0 -0
  373. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/file_io.py +0 -0
  374. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/paths.py +0 -0
  375. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/speech.py +0 -0
  376. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/utils/subprocess.py +0 -0
  377. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/validation.py +0 -0
  378. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/voice_status.py +0 -0
  379. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/wiki.py +0 -0
  380. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/wiki_audit.py +0 -0
  381. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/wiki_cli.py +0 -0
  382. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/worktree.py +0 -0
  383. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/agentwire/worktree_registry.py +0 -0
  384. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/decisions/obsidian-second-brain.md +0 -0
  385. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/logo.png +0 -0
  386. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/briefing-mode.md +0 -0
  387. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/communication/channels.md +0 -0
  388. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/communication/hammerspoon.md +0 -0
  389. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/communication/handoff.md +0 -0
  390. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/deployment/remote-access.md +0 -0
  391. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/deployment/remote-machines.md +0 -0
  392. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  393. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/parallel-refactor.md +0 -0
  394. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/internals/shell-escaping.md +0 -0
  395. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
  396. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
  397. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/pip-audit.md +0 -0
  398. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/security/remote-access-hardening.md +0 -0
  399. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/messaging.md +0 -0
  400. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/prompt-routing.md +0 -0
  401. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/window-sizing.md +0 -0
  402. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/sessions/worktree-sessions.md +0 -0
  403. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/usage-limit-recovery.md +0 -0
  404. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/stt-cloud.md +0 -0
  405. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
  406. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/docs/wiki/voice/tts-self-hosted.md +0 -0
  407. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/pyproject.toml +0 -0
  408. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/e2e/test_portal_ui.py +0 -0
  409. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/fixtures/sample_config.yaml +0 -0
  410. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/fixtures/sample_scheduler.yaml +0 -0
  411. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_council_portal.py +0 -0
  412. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_scheduler_board.py +0 -0
  413. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_send_verified_tmux.py +0 -0
  414. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/integration/test_server_websockets.py +0 -0
  415. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_announcements.py +0 -0
  416. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_channels.py +0 -0
  417. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_chrome_tabs.py +0 -0
  418. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_cli_output.py +0 -0
  419. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_cli_smoke.py +0 -0
  420. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_config.py +0 -0
  421. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_inbox.py +0 -0
  422. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_minutes.py +0 -0
  423. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_council_view.py +0 -0
  424. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_damage_control_bypass.py +0 -0
  425. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_damage_control_hooks.py +0 -0
  426. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_damage_control_sync.py +0 -0
  427. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_dangling_worktrees.py +0 -0
  428. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_devices.py +0 -0
  429. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_diff_cli.py +0 -0
  430. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_doctor_voice.py +0 -0
  431. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_event_log.py +0 -0
  432. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_file_io.py +0 -0
  433. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_git_state.py +0 -0
  434. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_instructions.py +0 -0
  435. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_parser.py +0 -0
  436. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_handoff_renderer.py +0 -0
  437. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_history.py +0 -0
  438. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_hooks_install.py +0 -0
  439. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_idle_handler.py +0 -0
  440. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_idle_nag.py +0 -0
  441. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_inbox.py +0 -0
  442. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_init_command.py +0 -0
  443. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_install_parity.py +0 -0
  444. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_limits_tick_isolation.py +0 -0
  445. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_locking.py +0 -0
  446. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_msg_cli.py +0 -0
  447. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_notify_cli.py +0 -0
  448. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_onboarding_reinit.py +0 -0
  449. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_palette_cli.py +0 -0
  450. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_pip_environment.py +0 -0
  451. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_prompt_router.py +0 -0
  452. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_push.py +0 -0
  453. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_rebuild_guard.py +0 -0
  454. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_repo_cli.py +0 -0
  455. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_roles.py +0 -0
  456. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_routes_snapshot.py +0 -0
  457. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_commands.py +0 -0
  458. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_disabled_rules.py +0 -0
  459. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_escape_hatch.py +0 -0
  460. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_heal.py +0 -0
  461. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_safety_kill_switch.py +0 -0
  462. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_scheduler_parsing.py +0 -0
  463. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_scratchpad.py +0 -0
  464. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_security.py +0 -0
  465. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_server_async.py +0 -0
  466. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_session_context.py +0 -0
  467. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_session_ready.py +0 -0
  468. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_shared_dir_guard.py +0 -0
  469. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_skill_install.py +0 -0
  470. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_speech_tags.py +0 -0
  471. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_ssh.py +0 -0
  472. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_stt_backend.py +0 -0
  473. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_stt_cloud.py +0 -0
  474. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_stt_engine.py +0 -0
  475. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_templating.py +0 -0
  476. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_terminal_resize.py +0 -0
  477. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tmux_template.py +0 -0
  478. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tts_engine_resolution.py +0 -0
  479. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tts_local.py +0 -0
  480. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_tunnels_probe.py +0 -0
  481. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_unattended_env_isolation.py +0 -0
  482. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_validation.py +0 -0
  483. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_voice_status.py +0 -0
  484. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_wiki.py +0 -0
  485. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_wiki_audit.py +0 -0
  486. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_window_cycling_binding.py +0 -0
  487. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree.py +0 -0
  488. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree_branch_cleanup.py +0 -0
  489. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree_layout.py +0 -0
  490. {agentwire_dev-1.57.0 → agentwire_dev-1.59.0}/tests/unit/test_worktree_registry.py +0 -0
@@ -9,6 +9,6 @@
9
9
  # template (a live `.agentwire.yml` is resolved before the `.example` fallback).
10
10
  # The repo owner uses this to layer an untracked owner-override role:
11
11
  # roles: [contributor, owner-override]
12
- type: claude-bypass
12
+ posture: bypass
13
13
  roles:
14
14
  - contributor
@@ -45,6 +45,8 @@ Thumbs.db
45
45
  /voices/
46
46
 
47
47
  .agentwire.yml
48
+ .agentwire.tasks.yml
49
+ .agentwire.tasks.proposed.yml
48
50
 
49
51
 
50
52
  # Test outputs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentwire-dev
3
- Version: 1.57.0
3
+ Version: 1.59.0
4
4
  Summary: Multi-session voice web interface for AI coding agents
5
5
  Project-URL: Homepage, https://agentwire.dev
6
6
  Project-URL: Repository, https://github.com/dotdevdotdev/agentwire-dev
@@ -356,7 +356,7 @@ agentwire new -s hello -p ~/projects/hello
356
356
 
357
357
  > **Optional:** clone this repo (`git clone https://github.com/dotdevdotdev/agentwire-dev ~/projects/agentwire-dev`) and `agentwire dev` opens a guided helper session inside it — setup walkthrough, project wiring, issue filing, forking. It requires the source checkout; everything above works without one.
358
358
 
359
- **Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture and voice cloning — browser voice input works without it).
359
+ **Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture — browser voice input works without it).
360
360
 
361
361
  **Honest setup time:** under a minute to a working voice portal with a genuinely good voice — Kokoro-82M runs on CPU out of the box (one-time ~200 MB model download in the background; the browser voice covers the wait). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
362
362
 
@@ -382,7 +382,7 @@ Origin checks reject cross-site browser requests on every bind. Keep the portal
382
382
 
383
383
  **macOS:**
384
384
  ```bash
385
- brew install tmux uv # ffmpeg optional: only for host-mic PTT + voice cloning
385
+ brew install tmux uv # ffmpeg optional: only for host-mic PTT
386
386
  uv tool install agentwire-dev
387
387
  ```
388
388
 
@@ -390,7 +390,7 @@ uv tool install agentwire-dev
390
390
 
391
391
  **Ubuntu/Debian:**
392
392
  ```bash
393
- sudo apt install tmux # ffmpeg optional: only for host-mic PTT + voice cloning
393
+ sudo apt install tmux # ffmpeg optional: only for host-mic PTT
394
394
  curl -LsSf https://astral.sh/uv/install.sh | sh
395
395
  uv tool install agentwire-dev
396
396
  ```
@@ -451,7 +451,7 @@ AgentWire supports orchestrator/worker patterns for complex tasks:
451
451
  ```yaml
452
452
  # .agentwire.yml in your project (keep it gitignored — it's personal config,
453
453
  # and tracked copies break worktree dispatch; agentwire adds it to .gitignore for you)
454
- type: claude-bypass
454
+ posture: bypass
455
455
  roles:
456
456
  - agentwire
457
457
  - voice
@@ -556,7 +556,7 @@ agentwire kill --pane 1 # Kill worker
556
556
  agentwire say "Hello" # TTS (auto-routes to browser)
557
557
  agentwire send -s NAME "Done" # Inject text into a session
558
558
  agentwire listen start/stop # Voice recording
559
- agentwire voiceclone list # Custom voices
559
+ agentwire tts voices # List available voices
560
560
  ```
561
561
 
562
562
  </details>
@@ -89,7 +89,7 @@ agentwire new -s hello -p ~/projects/hello
89
89
 
90
90
  > **Optional:** clone this repo (`git clone https://github.com/dotdevdotdev/agentwire-dev ~/projects/agentwire-dev`) and `agentwire dev` opens a guided helper session inside it — setup walkthrough, project wiring, issue filing, forking. It requires the source checkout; everything above works without one.
91
91
 
92
- **Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture and voice cloning — browser voice input works without it).
92
+ **Requirements:** Python 3.10+, tmux, Claude Code. Optional: ffmpeg (only for host-mic push-to-talk capture — browser voice input works without it).
93
93
 
94
94
  **Honest setup time:** under a minute to a working voice portal with a genuinely good voice — Kokoro-82M runs on CPU out of the box (one-time ~200 MB model download in the background; the browser voice covers the wait). ~15 minutes for the full experience: cloned voices via a self-hosted TTS shim, Whisper-grade transcription, phone-from-anywhere (certs + token).
95
95
 
@@ -115,7 +115,7 @@ Origin checks reject cross-site browser requests on every bind. Keep the portal
115
115
 
116
116
  **macOS:**
117
117
  ```bash
118
- brew install tmux uv # ffmpeg optional: only for host-mic PTT + voice cloning
118
+ brew install tmux uv # ffmpeg optional: only for host-mic PTT
119
119
  uv tool install agentwire-dev
120
120
  ```
121
121
 
@@ -123,7 +123,7 @@ uv tool install agentwire-dev
123
123
 
124
124
  **Ubuntu/Debian:**
125
125
  ```bash
126
- sudo apt install tmux # ffmpeg optional: only for host-mic PTT + voice cloning
126
+ sudo apt install tmux # ffmpeg optional: only for host-mic PTT
127
127
  curl -LsSf https://astral.sh/uv/install.sh | sh
128
128
  uv tool install agentwire-dev
129
129
  ```
@@ -184,7 +184,7 @@ AgentWire supports orchestrator/worker patterns for complex tasks:
184
184
  ```yaml
185
185
  # .agentwire.yml in your project (keep it gitignored — it's personal config,
186
186
  # and tracked copies break worktree dispatch; agentwire adds it to .gitignore for you)
187
- type: claude-bypass
187
+ posture: bypass
188
188
  roles:
189
189
  - agentwire
190
190
  - voice
@@ -289,7 +289,7 @@ agentwire kill --pane 1 # Kill worker
289
289
  agentwire say "Hello" # TTS (auto-routes to browser)
290
290
  agentwire send -s NAME "Done" # Inject text into a session
291
291
  agentwire listen start/stop # Voice recording
292
- agentwire voiceclone list # Custom voices
292
+ agentwire tts voices # List available voices
293
293
  ```
294
294
 
295
295
  </details>
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.57.0"
3
+ __version__ = "1.59.0"
@@ -17,7 +17,7 @@ from .core import ( # noqa: E402,F401 # E402: must follow load_dotenv(); F401:
17
17
  _UNATTENDED_ENV_KEYS,
18
18
  CONFIG_DIR,
19
19
  AgentCommand,
20
- _add_posture_harness_flags,
20
+ _add_posture_flag,
21
21
  _build_tmux_env_flags,
22
22
  _build_tmux_env_flags_shell,
23
23
  _check_portal_health,
@@ -38,7 +38,7 @@ from .core import ( # noqa: E402,F401 # E402: must follow load_dotenv(); F401:
38
38
  _portal_auth_headers,
39
39
  _post_desktop_notification,
40
40
  _record_session_creator,
41
- _resolve_session_type_from_args,
41
+ _resolve_posture_from_args,
42
42
  _run_remote,
43
43
  _set_session_name_env,
44
44
  _start_portal_local,
@@ -118,7 +118,6 @@ Command Categories:
118
118
 
119
119
  Voice:
120
120
  listen Voice input recording
121
- voiceclone Record and upload voice clones
122
121
  tts Manage TTS server
123
122
  stt Manage STT server
124
123
 
@@ -257,7 +256,7 @@ Command Categories:
257
256
  c_start.add_argument(
258
257
  "--roster", help="Comma-separated lens names (default: full bundled roster)"
259
258
  )
260
- c_start.add_argument("--type", help="Session type (default: claude-bypass)")
259
+ c_start.add_argument("--posture", help="Permission mode for council sessions (default: bypass)")
261
260
  c_start.add_argument("--model", help="Model override for all council sessions")
262
261
  c_start.add_argument(
263
262
  "--force", action="store_true", help="Tear down a live sitting first"
@@ -391,7 +390,7 @@ def _find_subparser(parser: argparse.ArgumentParser, *names: str):
391
390
  _GROUP_COMMANDS = [
392
391
  "portal", "tts", "stt", "tunnels", "machine", "history", "handoff",
393
392
  "wiki", "hooks", "projects", "safety", "network", "listen",
394
- "voiceclone", "roles", "task", "lock", "scheduler", "council", "limits",
393
+ "roles", "task", "lock", "scheduler", "council", "limits",
395
394
  "config",
396
395
  ]
397
396
 
@@ -357,7 +357,7 @@ class CustomServiceConfig:
357
357
  Custom services show up in the portal's Services column, are booted by
358
358
  `agentwire up` AND on portal launch, and are watched by the portal's
359
359
  service watchdog. A service is just an agentwire session created in a
360
- project directory; `roles`/`type` override the project's .agentwire.yml
360
+ project directory; `roles`/`posture` override the project's .agentwire.yml
361
361
  when set.
362
362
 
363
363
  restart: never | on-failure | always — what the watchdog does when the
@@ -369,7 +369,7 @@ class CustomServiceConfig:
369
369
  project: Optional[str] = None
370
370
  autostart: bool = True
371
371
  roles: Optional[str] = None # comma-separated; overrides project .agentwire.yml
372
- type: Optional[str] = None # session type override (e.g. claude-bypass)
372
+ posture: Optional[str] = None # posture override (e.g. bypass, auto)
373
373
  restart: str = "on-failure" # never | on-failure | always
374
374
  healthcheck: HealthcheckConfig = field(default_factory=HealthcheckConfig)
375
375
  # Context auto-management policy (issue #442): clear | compact | none.
@@ -739,7 +739,7 @@ def _dict_to_config(data: dict) -> Config:
739
739
  project=entry.get("project"),
740
740
  autostart=entry.get("autostart", True),
741
741
  roles=entry.get("roles"),
742
- type=entry.get("type"),
742
+ posture=entry.get("posture"),
743
743
  restart=entry.get("restart", "on-failure"),
744
744
  healthcheck=healthcheck,
745
745
  context_policy=context_policy,
@@ -25,7 +25,6 @@ EXECUTION_PLANE_PREFIXES = (
25
25
  "services.",
26
26
  "executables.",
27
27
  "agent.",
28
- "pi.",
29
28
  "hooks.",
30
29
  "dev.",
31
30
  "palette.", # user palette `run` templates feed the shell (#676)
@@ -20,12 +20,11 @@ from dataclasses import dataclass, field
20
20
  from pathlib import Path
21
21
 
22
22
  from .project_config import (
23
- DEFAULT_HARNESS,
23
+ BARE,
24
+ DEFAULT_POSTURE,
24
25
  POSTURES,
25
- compose_session_type,
26
- detect_default_agent_type,
27
26
  get_parent_from_config,
28
- normalize_session_type,
27
+ resolve_posture,
29
28
  )
30
29
  from .roles import RoleConfig, merge_roles
31
30
  from .worktree import git_common_dir, parse_session_name
@@ -204,147 +203,70 @@ def parse_env_args(env_args: list[str] | None) -> dict[str, str]:
204
203
  return result
205
204
 
206
205
 
207
- def build_agent_command(session_type: str, roles: list[RoleConfig] | None = None, model: str | None = None) -> AgentCommand:
208
- """Build the shell command + injected env for the given session type."""
209
- if session_type == "bare":
206
+ def build_agent_command(
207
+ posture: str,
208
+ roles: list[RoleConfig] | None = None,
209
+ model: str | None = None,
210
+ resume_session_id: str | None = None,
211
+ ) -> AgentCommand:
212
+ """Build the shell command + injected env for the given posture.
213
+
214
+ The ONE flag-builder (#729): fresh sessions AND history resume both route
215
+ through here, so a posture always launches with the same flags — no
216
+ create-vs-resume drift. Posture switches the permission-mode flags; ``bare``
217
+ is the no-agent sentinel (empty command); ``resume_session_id`` prepends the
218
+ ``--resume/--fork-session`` pair right after ``claude`` so the resumed
219
+ process still gets its posture's grants (incl. auto's tool-allows).
220
+ """
221
+ if posture == BARE:
210
222
  return AgentCommand(command="")
211
223
 
212
224
  merged = merge_roles(roles) if roles else None
213
225
 
214
- # === Pi coding agent (any provider) ===
215
- # Session type: pi-<provider>[-restricted|-readonly], e.g. pi-zai, pi-deepseek
216
- if session_type.startswith("pi-"):
217
- remainder = session_type[3:]
218
- if remainder.endswith("-restricted"):
219
- provider = remainder[:-11]
220
- variant = "restricted"
221
- elif remainder.endswith("-readonly"):
222
- provider = remainder[:-9]
223
- variant = "readonly"
224
- else:
225
- provider = remainder
226
- variant = None
227
-
228
- config = load_config()
229
- pi_config = config.get("pi", {})
230
- pi_binary = pi_config.get("binary", "pi")
231
-
232
- provider_cfg = pi_config.get("providers", {}).get(provider)
233
- if not provider_cfg:
234
- raise ValueError(
235
- f"No config for pi provider '{provider}'. "
236
- f"Add pi.providers.{provider} to ~/.agentwire/config.yaml "
237
- f"with at least env_var and default_model, and put the key "
238
- f"itself in ~/.agentwire/.env (docs/wiki/security/secrets.md)."
239
- )
240
- env_var = provider_cfg.get("env_var", f"{provider.upper().replace('-', '_')}_API_KEY")
241
- if provider_cfg.get("api_key"):
242
- print(
243
- f"Warning: pi.providers.{provider}.api_key in config.yaml is "
244
- f"ignored — put {env_var}=... in ~/.agentwire/.env instead "
245
- f"(docs/wiki/security/secrets.md)",
246
- file=sys.stderr,
247
- )
248
- # The key comes from the process environment — ~/.agentwire/.env is
249
- # loaded on every entry point, so one line there is all it takes.
250
- api_key = os.environ.get(env_var, "")
251
- default_model = provider_cfg.get("default_model", "")
252
-
253
- # Merge provider key + any global pi extra_env
254
- env: dict[str, str] = {}
255
- if api_key:
256
- env[env_var] = api_key
257
- env.update(pi_config.get("extra_env", {}))
258
-
259
- parts = [pi_binary, "--provider", provider]
260
- resolved_model = model or default_model
261
- if resolved_model:
262
- parts.extend(["--model", resolved_model])
263
-
264
- # Permission variants (pi has no permission system to bypass; variants
265
- # translate to pi's --tools whitelist instead)
266
- temp_file = None
267
- if variant == "restricted":
268
- parts.extend(["--tools", "read,grep,find,bash"])
269
- elif variant == "readonly":
270
- parts.extend(["--tools", "read,grep,find"])
271
- elif merged and merged.tools:
272
- # Translate Claude tool names to pi's lowercase tool names.
273
- # Pi only supports: read, bash, edit, write, grep, find, ls
274
- pi_valid = {"read", "bash", "edit", "write", "grep", "find", "ls"}
275
- pi_tools = [t.lower() for t in merged.tools if t.lower() in pi_valid]
276
- if pi_tools:
277
- parts.extend(["--tools", ",".join(pi_tools)])
278
-
279
- # System prompt: combine global pi.system_prompt + role instructions.
280
- # Skipped for restricted/readonly — those are curated contexts.
281
- if variant not in ("restricted", "readonly"):
282
- global_prompt = pi_config.get("system_prompt", "")
283
- role_prompt = merged.instructions if merged and merged.instructions else ""
284
- combined = "\n\n".join(filter(None, [global_prompt, role_prompt]))
285
- if combined:
286
- f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
287
- f.write(combined)
288
- f.close()
289
- temp_file = f.name
290
- parts.append(f'--append-system-prompt "$(<{temp_file})"')
291
-
292
- return AgentCommand(
293
- command=" ".join(parts),
294
- temp_file=temp_file,
295
- env=env,
296
- )
297
-
298
- # === Claude Code ===
299
- if session_type.startswith("claude"):
300
- parts = ["claude"]
301
-
302
- # Permission flags
303
- if session_type == "claude-bypass":
304
- parts.append("--dangerously-skip-permissions")
305
- elif session_type == "claude-auto":
306
- parts.extend(["--enable-auto-mode", "--permission-mode", "auto"])
307
- # Inject core allows that bypass the classifier entirely (zero token cost)
308
- core_allows = [
309
- "Bash(agentwire *)", "Bash(tmux *)", "Bash(git *)",
310
- "Bash(gh pr create*)", "Bash(gh pr view*)",
311
- "Read(*)", "Edit(*)", "Write(*)", "Glob(*)", "Grep(*)",
312
- ]
313
- parts.extend(["--allowedTools", shlex.quote(",".join(core_allows))])
314
- elif session_type == "claude-restricted":
315
- parts.append("--tools Bash")
316
- # claude-prompted has no special flags
317
-
318
- # Model override
319
- if model:
320
- parts.append(f"--model {model}")
321
-
322
- # Role-based flags (not for restricted mode)
323
- temp_file = None
324
- if merged and session_type != "claude-restricted":
325
- if merged.tools:
326
- parts.append(f"--tools {','.join(merged.tools)}")
327
-
328
- if merged.disallowed_tools:
329
- parts.append(f"--disallowedTools {','.join(merged.disallowed_tools)}")
330
-
331
- if merged.instructions:
332
- # Write to temp file to avoid shell escaping issues
333
- # See docs/wiki/internals/shell-escaping.md for details
334
- # MUST be last flag — multiline content can break subsequent args
335
- f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
336
- f.write(merged.instructions)
337
- f.close()
338
- temp_file = f.name
339
- parts.append(f'--append-system-prompt "$(<{temp_file})"')
340
-
341
- return AgentCommand(
342
- command=" ".join(parts),
343
- temp_file=temp_file,
344
- )
345
-
346
- # Unknown session type - return empty
347
- return AgentCommand(command="")
226
+ parts = ["claude"]
227
+ if resume_session_id:
228
+ parts.extend(["--resume", resume_session_id, "--fork-session"])
229
+
230
+ # Permission-mode flags (one per posture; prompted adds none — hooks gate it)
231
+ if posture == "bypass":
232
+ parts.append("--dangerously-skip-permissions")
233
+ elif posture == "auto":
234
+ parts.extend(["--enable-auto-mode", "--permission-mode", "auto"])
235
+ # Inject core allows that bypass the classifier entirely (zero token cost)
236
+ core_allows = [
237
+ "Bash(agentwire *)", "Bash(tmux *)", "Bash(git *)",
238
+ "Bash(gh pr create*)", "Bash(gh pr view*)",
239
+ "Read(*)", "Edit(*)", "Write(*)", "Glob(*)", "Grep(*)",
240
+ ]
241
+ parts.extend(["--allowedTools", shlex.quote(",".join(core_allows))])
242
+
243
+ # Model override
244
+ if model:
245
+ parts.append(f"--model {model}")
246
+
247
+ # Role-based flags (merged roles always apply — no tool-locking posture left)
248
+ temp_file = None
249
+ if merged:
250
+ if merged.tools:
251
+ parts.append(f"--tools {','.join(merged.tools)}")
252
+
253
+ if merged.disallowed_tools:
254
+ parts.append(f"--disallowedTools {','.join(merged.disallowed_tools)}")
255
+
256
+ if merged.instructions:
257
+ # Write to temp file to avoid shell escaping issues
258
+ # See docs/wiki/internals/shell-escaping.md for details
259
+ # MUST be last flag — multiline content can break subsequent args
260
+ f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
261
+ f.write(merged.instructions)
262
+ f.close()
263
+ temp_file = f.name
264
+ parts.append(f'--append-system-prompt "$(<{temp_file})"')
265
+
266
+ return AgentCommand(
267
+ command=" ".join(parts),
268
+ temp_file=temp_file,
269
+ )
348
270
 
349
271
 
350
272
  def check_python_version() -> bool:
@@ -1184,65 +1106,58 @@ def _post_desktop_notification(text: str, session: str | None = None, priority:
1184
1106
  return False
1185
1107
 
1186
1108
 
1187
- def _default_posture(kind: str | None, worktree_topology: bool = False) -> str:
1188
- """Default posture for a spawn: bypass, unless it's a worker that is NOT
1189
- isolated on its own worktree — a pane (agentwire spawn) or a worker on
1190
- plain main topology, both sharing a live checkout someone else may be
1191
- watching, stay restricted. Orchestrators (main or worktree topology) and
1192
- worktree-topology workers get full autonomous access — nothing to step
1193
- on but their own isolated branch.
1194
- """
1195
- if kind == "worker" and not worktree_topology:
1196
- return "restricted"
1197
- return "bypass"
1198
-
1109
+ def _resolve_posture_from_args(args) -> tuple[str | None, str | None]:
1110
+ """Resolve the session's posture from the shared spawn-flag core.
1199
1111
 
1200
- def _resolve_session_type_from_args(args, kind: str, worktree_topology: bool = False) -> tuple[str | None, str | None]:
1201
- """Resolve the internal fused session type from the shared flag core.
1112
+ Posture is the ONLY session axis (#729), and every spawn defaults to the
1113
+ same one bypass regardless of kind/topology: workers run bypass +
1114
+ damage-control just like orchestrators, no tool-locking. Precedence:
1115
+ explicit --posture first; else the internal --bare/--prompted booleans
1116
+ (set by cmd_worktree / cmd_recreate callers); else the default posture.
1202
1117
 
1203
- Posture × harness are the canonical axes; legacy --type (fused strings or
1204
- intent presets) and the internal --bare/--restricted/--prompted booleans
1205
- are accepted on input but never the primary surface.
1206
-
1207
- Precedence: explicit --posture/--harness compose first; else legacy
1208
- --type; else legacy booleans; else the kind's default posture × claude.
1209
-
1210
- Returns ``(session_type, error)`` — error is a message string when an
1211
- invalid posture was given, session_type is None in that case.
1118
+ Returns ``(posture, error)`` error is a message string when an invalid
1119
+ posture was given, posture is None in that case.
1212
1120
  """
1213
1121
  posture = getattr(args, 'posture', None)
1214
- harness = getattr(args, 'harness', None)
1215
- type_arg = getattr(args, 'type', None)
1216
- default_posture = _default_posture(kind, worktree_topology)
1217
-
1218
- if posture or harness:
1122
+ if posture:
1219
1123
  try:
1220
- return compose_session_type(harness or DEFAULT_HARNESS, posture or default_posture), None
1124
+ return resolve_posture(posture), None
1221
1125
  except ValueError as e:
1222
1126
  return None, str(e)
1223
- if type_arg:
1224
- return normalize_session_type(type_arg, detect_default_agent_type()), None
1225
- # Internal legacy booleans (set by cmd_worktree / cmd_recreate callers).
1226
1127
  if getattr(args, 'bare', False):
1227
- return "bare", None
1228
- if getattr(args, 'restricted', False):
1229
- return f"{detect_default_agent_type()}-restricted", None
1128
+ return BARE, None
1230
1129
  if getattr(args, 'prompted', False):
1231
- return f"{detect_default_agent_type()}-prompted", None
1232
- return compose_session_type(DEFAULT_HARNESS, default_posture), None
1130
+ return "prompted", None
1131
+ return DEFAULT_POSTURE, None
1132
+
1133
+
1134
+ def _resolve_posture_or_config(args, project_config, default: str = DEFAULT_POSTURE) -> tuple[str | None, str | None]:
1135
+ """Posture for recreate/fork: explicit --posture wins, else the source
1136
+ config's posture, else *default*. Returns ``(posture, error)``."""
1137
+ posture = getattr(args, 'posture', None)
1138
+ if posture:
1139
+ try:
1140
+ return resolve_posture(posture), None
1141
+ except ValueError as e:
1142
+ return None, str(e)
1143
+ cfg_posture = getattr(project_config, 'posture', None) if project_config else None
1144
+ if cfg_posture:
1145
+ try:
1146
+ return resolve_posture(cfg_posture), None
1147
+ except ValueError:
1148
+ return default, None
1149
+ return default, None
1233
1150
 
1234
1151
 
1235
- def _add_posture_harness_flags(parser) -> None:
1236
- """Register the shared posture × harness axes on a spawn-verb parser.
1152
+ def _add_posture_flag(parser) -> None:
1153
+ """Register the canonical posture axis on a spawn-verb parser (#729).
1237
1154
 
1238
- These are the canonical session-type surface across new/worktree/spawn;
1239
- legacy --type (fused strings, intent presets) stays accepted but secondary.
1155
+ Accepts ``bare`` too (the no-agent sentinel) so a bare session can be
1156
+ re-specified on recreate/fork through the one axis flag.
1240
1157
  """
1241
- parser.add_argument("--posture", choices=list(POSTURES),
1242
- help="How much the agent may do unprompted: bypass/prompted/restricted/readonly "
1243
- "(default depends on the verb: new/worktree → bypass, spawn → restricted)")
1244
- parser.add_argument("--harness",
1245
- help="Agent backend: claude (default), pi-<provider> (e.g. pi-zai, pi-deepseek), or bare")
1158
+ parser.add_argument("--posture", choices=[*POSTURES, BARE],
1159
+ help="Permission mode the agent runs under: bypass/prompted/auto "
1160
+ "(or bare for no agent). Default: bypass.")
1246
1161
 
1247
1162
 
1248
1163
  def _git_behind_origin(repo: Path, base: str = "main", do_fetch: bool = True):
@@ -96,7 +96,7 @@ def list_live_sessions() -> set[str]:
96
96
 
97
97
 
98
98
  def create_session(
99
- name: str, roles: list[str], session_type: str, model: str | None, cwd: str
99
+ name: str, roles: list[str], posture: str, model: str | None, cwd: str
100
100
  ) -> None:
101
101
  """Create one council session via ``agentwire new`` in the sitting's
102
102
  workspace. Raises ``RuntimeError`` on failure.
@@ -106,7 +106,7 @@ def create_session(
106
106
  "-s", name,
107
107
  "-p", cwd,
108
108
  "--roles", ",".join(roles),
109
- "--type", session_type,
109
+ "--posture", posture,
110
110
  "--allow-shared-dir",
111
111
  "--json",
112
112
  ]
@@ -237,7 +237,7 @@ def resolve_name(args) -> tuple[str | None, str | None]:
237
237
  # --- workspace ------------------------------------------------------------------
238
238
 
239
239
 
240
- def _write_workspace(name: str, session_type: str) -> None:
240
+ def _write_workspace(name: str, posture: str) -> None:
241
241
  """Workspace dir the sitting's sessions run in.
242
242
 
243
243
  ``parent: agentwire-council-<name>`` routes any ``agentwire notify-parent`` from a
@@ -246,7 +246,7 @@ def _write_workspace(name: str, session_type: str) -> None:
246
246
  ws = state.workspace_dir(name)
247
247
  ws.mkdir(parents=True, exist_ok=True)
248
248
  (ws / ".agentwire.yml").write_text(
249
- f"type: {session_type}\nparent: {state.orchestrator_for(name)}\n"
249
+ f"posture: {posture}\nparent: {state.orchestrator_for(name)}\n"
250
250
  )
251
251
 
252
252
 
@@ -288,9 +288,9 @@ def cmd_council_start(args) -> int:
288
288
  kill_session(s)
289
289
  state.clear_sitting(name)
290
290
 
291
- session_type = getattr(args, "type", None) or "claude-bypass"
291
+ posture = getattr(args, "posture", None) or "bypass"
292
292
  model = getattr(args, "model", None)
293
- _write_workspace(name, session_type)
293
+ _write_workspace(name, posture)
294
294
  workspace = str(state.workspace_dir(name))
295
295
 
296
296
  # Advisory: name the live sittings when seating beyond the first.
@@ -304,7 +304,7 @@ def cmd_council_start(args) -> int:
304
304
  failed: list[dict] = []
305
305
 
306
306
  try:
307
- create_session(orchestrator, ["council-orchestrator"], session_type, model, workspace)
307
+ create_session(orchestrator, ["council-orchestrator"], posture, model, workspace)
308
308
  except RuntimeError as e:
309
309
  return _emit_error(args, f"failed to start orchestrator: {e}")
310
310
 
@@ -312,7 +312,7 @@ def cmd_council_start(args) -> int:
312
312
  session = state.session_for(name, lens)
313
313
  try:
314
314
  create_session(
315
- session, ["council-member", f"council-{lens}"], session_type, model, workspace
315
+ session, ["council-member", f"council-{lens}"], posture, model, workspace
316
316
  )
317
317
  sessions[lens] = session
318
318
  except RuntimeError as e:
@@ -330,7 +330,7 @@ def cmd_council_start(args) -> int:
330
330
  sessions=sessions,
331
331
  started_at=state.now_iso(),
332
332
  cwd=workspace,
333
- session_type=session_type,
333
+ posture=posture,
334
334
  ),
335
335
  )
336
336
 
@@ -135,7 +135,7 @@ class Sitting:
135
135
  started_at: str
136
136
  cwd: str = "" # dir the sitting was started from (for `council list`)
137
137
  next_prompt_id: int = 1
138
- session_type: str = "claude-bypass"
138
+ posture: str = "bypass"
139
139
 
140
140
  def to_dict(self) -> dict:
141
141
  return {
@@ -145,7 +145,7 @@ class Sitting:
145
145
  "started_at": self.started_at,
146
146
  "cwd": self.cwd,
147
147
  "next_prompt_id": self.next_prompt_id,
148
- "session_type": self.session_type,
148
+ "posture": self.posture,
149
149
  }
150
150
 
151
151
  @classmethod
@@ -157,7 +157,7 @@ class Sitting:
157
157
  started_at=d.get("started_at", ""),
158
158
  cwd=d.get("cwd", ""),
159
159
  next_prompt_id=int(d.get("next_prompt_id", 1)),
160
- session_type=d.get("session_type", "claude-bypass"),
160
+ posture=d.get("posture", "bypass"),
161
161
  )
162
162
 
163
163