agentwire-dev 1.29.0__tar.gz → 1.29.1__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 (311) hide show
  1. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/PKG-INFO +1 -1
  2. agentwire_dev-1.29.1/SECURITY.md +59 -0
  3. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/__init__.py +1 -1
  4. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/server.py +25 -15
  5. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/deployment/remote-machines.md +3 -3
  6. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/conftest.py +1 -1
  7. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_cli_safety.py +6 -2
  8. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_history.py +2 -2
  9. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_config.py +5 -5
  10. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_project_config.py +4 -4
  11. agentwire_dev-1.29.0/SECURITY.md +0 -46
  12. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/.github/FUNDING.yml +0 -0
  13. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  14. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  15. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/.github/ISSUE_TEMPLATE/question.md +0 -0
  16. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  17. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/.gitignore +0 -0
  18. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/CHANGELOG.md +0 -0
  19. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/CLA.md +0 -0
  20. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/CODE_OF_CONDUCT.md +0 -0
  21. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/CONTRIBUTING.md +0 -0
  22. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/Dockerfile.local +0 -0
  23. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/Dockerfile.runpod +0 -0
  24. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/LICENSE +0 -0
  25. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/README.md +0 -0
  26. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/RELEASING.md +0 -0
  27. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/SPONSORS.md +0 -0
  28. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/__main__.py +0 -0
  29. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/agents/__init__.py +0 -0
  30. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/agents/base.py +0 -0
  31. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/agents/tmux.py +0 -0
  32. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/cached_status.py +0 -0
  33. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/channels/__init__.py +0 -0
  34. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/channels/base.py +0 -0
  35. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/channels/email.py +0 -0
  36. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/channels/quo.py +0 -0
  37. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/cli_safety.py +0 -0
  38. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/completion.py +0 -0
  39. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/config.py +0 -0
  40. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/fetch.py +0 -0
  41. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/handoff/__init__.py +0 -0
  42. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/handoff/git_state.py +0 -0
  43. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/handoff/instructions.py +0 -0
  44. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/handoff/parser.py +0 -0
  45. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/handoff/renderer.py +0 -0
  46. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/handoff/schema.py +0 -0
  47. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/history.py +0 -0
  48. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/__init__.py +0 -0
  49. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/agentwire-permission.sh +0 -0
  50. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/__init__.py +0 -0
  51. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  52. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  53. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  54. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  55. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  56. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  57. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  58. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  59. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  60. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  61. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  62. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  63. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  64. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  65. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  66. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  67. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/hooks/idle-handler.sh +0 -0
  68. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/listen.py +0 -0
  69. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/locking.py +0 -0
  70. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/mcp_server.py +0 -0
  71. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/__init__.py +0 -0
  72. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/cli.py +0 -0
  73. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/config.py +0 -0
  74. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/dispatcher.py +0 -0
  75. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/eligibility.py +0 -0
  76. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/feedback_router.py +0 -0
  77. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/gc.py +0 -0
  78. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/github.py +0 -0
  79. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/naming.py +0 -0
  80. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/missions/state.py +0 -0
  81. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/network.py +0 -0
  82. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/onboarding.py +0 -0
  83. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/overnight.py +0 -0
  84. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/pane_manager.py +0 -0
  85. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/project_config.py +0 -0
  86. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/projects.py +0 -0
  87. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/prompts/__init__.py +0 -0
  88. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/prompts/init.md +0 -0
  89. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/__init__.py +0 -0
  90. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/agentwire.md +0 -0
  91. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/chatbot.md +0 -0
  92. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/init.md +0 -0
  93. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/notifications.md +0 -0
  94. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/orchestrator.md +0 -0
  95. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/task-runner.md +0 -0
  96. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/voice.md +0 -0
  97. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/roles/worker.md +0 -0
  98. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/safety/__init__.py +0 -0
  99. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/safety/_core.py +0 -0
  100. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/scheduler.py +0 -0
  101. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/search.py +0 -0
  102. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-Echo--black.png +0 -0
  103. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-Echo--transparent.png +0 -0
  104. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-Echo.png +0 -0
  105. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-email-banner.png +0 -0
  106. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  107. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  108. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  109. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
  110. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
  111. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
  112. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  113. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
  114. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
  115. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  116. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
  117. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/css/desktop.css +0 -0
  118. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/favicon.png +0 -0
  119. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/android.jpeg +0 -0
  120. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/automaton.jpeg +0 -0
  121. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/bot.jpeg +0 -0
  122. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
  123. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/droid.jpeg +0 -0
  124. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/drone.jpeg +0 -0
  125. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/guardian.jpeg +0 -0
  126. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/mech.jpeg +0 -0
  127. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/probe.jpeg +0 -0
  128. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/robot.jpeg +0 -0
  129. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
  130. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/machines/unit.jpeg +0 -0
  131. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/blob.jpeg +0 -0
  132. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/cloud.jpeg +0 -0
  133. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/crystal.jpeg +0 -0
  134. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
  135. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/flame.jpeg +0 -0
  136. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
  137. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/horned.jpeg +0 -0
  138. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/moon.jpeg +0 -0
  139. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/slime.jpeg +0 -0
  140. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/star.jpeg +0 -0
  141. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
  142. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/projects/winged.jpeg +0 -0
  143. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/bear.jpeg +0 -0
  144. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/cat.jpeg +0 -0
  145. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/crown.jpeg +0 -0
  146. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
  147. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
  148. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
  149. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/deer.jpeg +0 -0
  150. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/drone.jpeg +0 -0
  151. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
  152. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/fox.jpeg +0 -0
  153. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
  154. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/horse.jpeg +0 -0
  155. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/lion.jpeg +0 -0
  156. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
  157. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/robot.jpeg +0 -0
  158. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
  159. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
  160. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/.gitkeep +0 -0
  161. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/artifact-window.js +0 -0
  162. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/components/icon-picker.js +0 -0
  163. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/components/list-card.js +0 -0
  164. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/components/type-tag.js +0 -0
  165. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/desktop-manager.js +0 -0
  166. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/desktop.js +0 -0
  167. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/icon-manager.js +0 -0
  168. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/new-project-modal.js +0 -0
  169. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/notifications-panel.js +0 -0
  170. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/quicktask-modal.js +0 -0
  171. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/safety-shared.js +0 -0
  172. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/safety-window.js +0 -0
  173. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/session-id.js +0 -0
  174. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/session-window.js +0 -0
  175. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  176. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/config-section.js +0 -0
  177. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/machines-section.js +0 -0
  178. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/missions-section.js +0 -0
  179. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/projects-section.js +0 -0
  180. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/safety-section.js +0 -0
  181. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  182. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/services-section.js +0 -0
  183. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  184. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/sidebar.js +0 -0
  185. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/terminal-font-prefs.js +0 -0
  186. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/tile-manager.js +0 -0
  187. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/utils/auto-refresh.js +0 -0
  188. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/winbox.bundle.min.js +0 -0
  189. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/static/js/windows/chat-window.js +0 -0
  190. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/stt/__init__.py +0 -0
  191. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/stt/base.py +0 -0
  192. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/stt/server_backend.py +0 -0
  193. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/stt/stt_server.py +0 -0
  194. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/stt/whisperkit.py +0 -0
  195. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tasks.py +0 -0
  196. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templates/__init__.py +0 -0
  197. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templates/base.html +0 -0
  198. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templates/desktop.html +0 -0
  199. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templates/email_notification.html +0 -0
  200. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  201. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templates/handoff/theme.css.j2 +0 -0
  202. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templates/tmux.conf +0 -0
  203. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/templating.py +0 -0
  204. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/aws.yaml +0 -0
  205. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/docker.yaml +0 -0
  206. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/gcp.yaml +0 -0
  207. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/gh.yaml +0 -0
  208. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/git.yaml +0 -0
  209. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/gws.yaml +0 -0
  210. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/kubectl.yaml +0 -0
  211. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/npm.yaml +0 -0
  212. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/terraform.yaml +0 -0
  213. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tooldefs/uv.yaml +0 -0
  214. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/__init__.py +0 -0
  215. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/base.py +0 -0
  216. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/engines/__init__.py +0 -0
  217. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/engines/chatterbox.py +0 -0
  218. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/engines/kokoro.py +0 -0
  219. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/engines/qwen_base.py +0 -0
  220. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/engines/qwen_custom.py +0 -0
  221. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/engines/qwen_design.py +0 -0
  222. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/engines/zonos.py +0 -0
  223. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/registry.py +0 -0
  224. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts/runpod_handler.py +0 -0
  225. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tts_server.py +0 -0
  226. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/tunnels.py +0 -0
  227. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/utils/__init__.py +0 -0
  228. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/utils/chunker.py +0 -0
  229. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/utils/file_io.py +0 -0
  230. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/utils/paths.py +0 -0
  231. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/utils/subprocess.py +0 -0
  232. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/validation.py +0 -0
  233. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/voiceclone.py +0 -0
  234. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/voices/darren.wav +0 -0
  235. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/voices/default.wav +0 -0
  236. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/voices/jessica.wav +0 -0
  237. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/voices/lisa.wav +0 -0
  238. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/voices/may.wav +0 -0
  239. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/agentwire/worktree.py +0 -0
  240. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/logo.png +0 -0
  241. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/INDEX.md +0 -0
  242. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/architecture.md +0 -0
  243. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/communication/channels.md +0 -0
  244. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/communication/hammerspoon.md +0 -0
  245. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/communication/handoff.md +0 -0
  246. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/concepts.md +0 -0
  247. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/deployment/remote-access.md +0 -0
  248. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/glossary.md +0 -0
  249. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  250. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/internals/damage-control.md +0 -0
  251. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/internals/portal.md +0 -0
  252. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/internals/shell-escaping.md +0 -0
  253. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/internals/troubleshooting.md +0 -0
  254. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/missions.md +0 -0
  255. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/quickstart.md +0 -0
  256. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  257. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  258. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/sessions/pi.md +0 -0
  259. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/tts/runpod-tts.md +0 -0
  260. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/docs/wiki/tts/tts-self-hosted.md +0 -0
  261. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/pyproject.toml +0 -0
  262. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/requirements-tts.txt +0 -0
  263. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/templates/launchd/dev.agentwire.mission-dispatcher.plist +0 -0
  264. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/templates/launchd/dev.agentwire.mission-feedback-router.plist +0 -0
  265. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/templates/launchd/dev.agentwire.mission-janitor.plist +0 -0
  266. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/e2e/test_portal_ui.py +0 -0
  267. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/fixtures/sample_agentwire.yml +0 -0
  268. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/fixtures/sample_config.yaml +0 -0
  269. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/fixtures/sample_scheduler.yaml +0 -0
  270. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/integration/test_missions_concurrency.py +0 -0
  271. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/integration/test_missions_lifecycle.py +0 -0
  272. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/integration/test_scheduler_board.py +0 -0
  273. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/integration/test_server_websockets.py +0 -0
  274. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_build_agent_command.py +0 -0
  275. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_channels.py +0 -0
  276. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_cli_commands.py +0 -0
  277. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_cli_output.py +0 -0
  278. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_config.py +0 -0
  279. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_damage_control_hooks.py +0 -0
  280. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_damage_control_sync.py +0 -0
  281. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_file_io.py +0 -0
  282. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_handoff_git_state.py +0 -0
  283. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_handoff_instructions.py +0 -0
  284. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_handoff_parser.py +0 -0
  285. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_handoff_renderer.py +0 -0
  286. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_locking.py +0 -0
  287. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_mcp_server.py +0 -0
  288. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_mcp_tools_args.py +0 -0
  289. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_cli.py +0 -0
  290. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_dispatcher.py +0 -0
  291. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_eligibility.py +0 -0
  292. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_feedback_router.py +0 -0
  293. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_gc.py +0 -0
  294. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_github.py +0 -0
  295. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_naming.py +0 -0
  296. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_missions_state.py +0 -0
  297. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_overnight_resume_flags.py +0 -0
  298. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_portal_api.py +0 -0
  299. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_roles.py +0 -0
  300. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_safety_disabled_rules.py +0 -0
  301. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_safety_escape_hatch.py +0 -0
  302. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_safety_kill_switch.py +0 -0
  303. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_safety_mission_worker.py +0 -0
  304. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_scheduler.py +0 -0
  305. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_scheduler_parsing.py +0 -0
  306. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_search.py +0 -0
  307. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_server_async.py +0 -0
  308. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_server_pure.py +0 -0
  309. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_tasks.py +0 -0
  310. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_templating.py +0 -0
  311. {agentwire_dev-1.29.0 → agentwire_dev-1.29.1}/tests/unit/test_worktree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentwire-dev
3
- Version: 1.29.0
3
+ Version: 1.29.1
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
@@ -0,0 +1,59 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a Vulnerability
4
+
5
+ If you discover a security vulnerability in AgentWire, please report it privately.
6
+
7
+ **Do NOT open a public GitHub issue for security vulnerabilities.**
8
+
9
+ ### How to Report
10
+
11
+ Email: security@agentwire.dev
12
+
13
+ Include:
14
+ - Description of the vulnerability
15
+ - Steps to reproduce
16
+ - Potential impact
17
+ - Any suggested fixes (optional)
18
+
19
+ ### What to Expect
20
+
21
+ - **Acknowledgment:** Within 48 hours
22
+ - **Initial Assessment:** Within 1 week
23
+ - **Resolution Timeline:** Depends on severity, typically 30-90 days
24
+
25
+ ### Scope
26
+
27
+ This security policy applies to:
28
+ - The AgentWire CLI (`agentwire` command)
29
+ - The AgentWire portal (web interface)
30
+ - Official AgentWire packages on PyPI
31
+
32
+ ### Out of Scope
33
+
34
+ - Third-party dependencies (report to their maintainers)
35
+ - Self-hosted TTS/STT servers
36
+ - User misconfiguration
37
+
38
+ ## Security Features
39
+
40
+ AgentWire includes built-in security features:
41
+
42
+ - **Damage Control Hooks:** Block 300+ dangerous command patterns
43
+ - **Path Protection:** Prevent access to sensitive files (.env, SSH keys, credentials)
44
+ - **Audit Logging:** All blocked operations are logged
45
+
46
+ See `docs/wiki/internals/damage-control.md` for details.
47
+
48
+ ## Trust Model
49
+
50
+ The portal (HTTPS server bound to `0.0.0.0:8765` by default) **has no built-in authentication or authorization on its API endpoints**. This is by design — agentwire is built for a local-network trust perimeter, typically running on the same machine as the operator's browser or behind a Cloudflare Tunnel + Zero Trust gate (see `docs/wiki/deployment/remote-access.md`).
51
+
52
+ What this means in practice:
53
+
54
+ - **Anyone who can reach the portal port can drive it.** All `/api/*` endpoints (scheduler control, missions dispatch, project deletion, artifact upload, desktop window control) execute without auth.
55
+ - **Do not expose the portal directly to the public internet.** Use either firewall rules limiting access to trusted IPs, or front it with an auth gateway. Cloudflare Tunnel + Zero Trust is the recommended pattern; details in the deployment docs.
56
+ - **Project deletion via `/api/projects/delete`** validates the path is absolute, contains no `..`, contains no shell metacharacters, and is not in a protected list. Local execution uses argv form (no shell); SSH execution uses `shlex.quote` per argument. These mitigations don't substitute for perimeter security — they reduce blast radius if the perimeter fails.
57
+ - **CSRF / Origin checks are not enforced** on state-changing POSTs. A browser inside the trust perimeter that loads attacker-controlled content could be coerced into making requests to the portal. If your portal is reachable from a browser on a less-trusted network, add an origin check or fence it behind an auth proxy.
58
+
59
+ If you need authentication, the recommended path is **Cloudflare Tunnel + Zero Trust** rather than adding auth in-process: identity, MFA, audit, and revocation are all handled upstream and survive process restarts.
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.29.0"
3
+ __version__ = "1.29.1"
@@ -2343,39 +2343,49 @@ class AgentWireServer:
2343
2343
  machine = data.get("machine")
2344
2344
  delete_type = data.get("deleteType")
2345
2345
 
2346
- if not path:
2346
+ if not path or not isinstance(path, str):
2347
2347
  return web.json_response({"success": False, "error": "Missing path"})
2348
2348
  if delete_type not in ("config", "folder"):
2349
2349
  return web.json_response({"success": False, "error": "Invalid deleteType"})
2350
2350
 
2351
- # Build the delete command
2351
+ # Path validation: absolute, no traversal, no shell metacharacters.
2352
+ # The endpoint has no auth (local-trust model — see SECURITY.md), so
2353
+ # treat the input as untrusted regardless and reject anything that
2354
+ # could escape argv quoting on either local or remote (SSH) execution.
2355
+ if not path.startswith("/"):
2356
+ return web.json_response({"success": False, "error": "path must be absolute"})
2357
+ if ".." in Path(path).parts:
2358
+ return web.json_response({"success": False, "error": "path may not contain '..'"})
2359
+ if re.search(r"[\s;&|`$<>(){}\[\]\\\"'*?#]", path):
2360
+ return web.json_response({"success": False, "error": "path contains disallowed characters"})
2361
+ if path.rstrip("/") in ("", "/root", "/home", "/Users", "/tmp", "/etc") or path.rstrip("/") in ("~", "$HOME"):
2362
+ return web.json_response({"success": False, "error": "Cannot delete protected paths"})
2363
+
2364
+ # Build argv. For SSH we still need to cross a remote shell, so
2365
+ # quote with shlex; locally we use array form with shell=False.
2352
2366
  if delete_type == "config":
2353
- cmd = f"rm -f '{path}/.agentwire.yml'"
2367
+ target = f"{path.rstrip('/')}/.agentwire.yml"
2368
+ local_argv = ["rm", "-f", target]
2354
2369
  else:
2355
- # Safety check: don't allow deleting root or home
2356
- if path in ("/", "/root", "/home") or path.rstrip("/") in ("~", "$HOME"):
2357
- return web.json_response({"success": False, "error": "Cannot delete protected paths"})
2358
- cmd = f"rm -rf '{path}'"
2370
+ local_argv = ["rm", "-rf", path]
2359
2371
 
2360
- # Execute locally or remotely
2361
2372
  if machine and machine != "local":
2362
- # Remote machine
2373
+ # Remote shell — quote each argv element through shlex.
2374
+ remote_cmd = " ".join(shlex.quote(a) for a in local_argv)
2363
2375
  result = await asyncio.to_thread(
2364
2376
  subprocess.run,
2365
- ["ssh", machine, cmd],
2377
+ ["ssh", machine, remote_cmd],
2366
2378
  capture_output=True,
2367
2379
  text=True,
2368
- timeout=30
2380
+ timeout=30,
2369
2381
  )
2370
2382
  else:
2371
- # Local
2372
2383
  result = await asyncio.to_thread(
2373
2384
  subprocess.run,
2374
- cmd,
2375
- shell=True,
2385
+ local_argv,
2376
2386
  capture_output=True,
2377
2387
  text=True,
2378
- timeout=30
2388
+ timeout=30,
2379
2389
  )
2380
2390
 
2381
2391
  if result.returncode != 0:
@@ -186,13 +186,13 @@ Each machine should have a `~/.agentwire/machine/CLAUDE.md` — a living documen
186
186
  When an AI agent needs to do ops work on a remote machine (manage services, install packages, debug the box itself), spawn a Claude Code session in `~/.agentwire/machine/` rather than SSHing and running ad-hoc commands. The agent picks up both `~/.claude/CLAUDE.md` (user preferences) and `~/.agentwire/machine/CLAUDE.md` (machine context) automatically, giving it full situational awareness without needing to rediscover everything.
187
187
 
188
188
  ```bash
189
- # Spawn an ops session on a remote machine
190
- ssh dotdev-pc
189
+ # Spawn an ops session on a remote machine (replace `my-server` with your hostname)
190
+ ssh my-server
191
191
  cd ~/.agentwire/machine
192
192
  claude # gets both global prefs and machine context
193
193
 
194
194
  # Or spawn via agentwire from the Mac
195
- agentwire new -s dotdev-pc-ops --machine dotdev-pc -p ~/.agentwire/machine
195
+ agentwire new -s my-server-ops --machine my-server -p ~/.agentwire/machine
196
196
  ```
197
197
 
198
198
  ### What to Put in `~/.agentwire/machine/CLAUDE.md`
@@ -54,7 +54,7 @@ def project_config_file(project_dir):
54
54
  data = {
55
55
  "type": "claude-bypass",
56
56
  "roles": ["agentwire", "voice"],
57
- "voice": "dotdev",
57
+ "voice": "default",
58
58
  "parent": "main",
59
59
  }
60
60
  with open(config_path, "w") as f:
@@ -105,12 +105,16 @@ class TestIsPathAllowedForOp:
105
105
  assert is_path_allowed_for_op("/home/user/project/dist/file.whl", allowed, "delete") is True
106
106
 
107
107
  def test_limited_permissions_allow(self):
108
+ import os
109
+ env_path = os.path.expanduser("~/.env")
108
110
  allowed = [{"path": "~/.env", "allow": {"read", "write"}}]
109
- assert is_path_allowed_for_op("/Users/dotdev/.env", allowed, "write") is True
111
+ assert is_path_allowed_for_op(env_path, allowed, "write") is True
110
112
 
111
113
  def test_limited_permissions_deny(self):
114
+ import os
115
+ env_path = os.path.expanduser("~/.env")
112
116
  allowed = [{"path": "~/.env", "allow": {"read", "write"}}]
113
- assert is_path_allowed_for_op("/Users/dotdev/.env", allowed, "delete") is False
117
+ assert is_path_allowed_for_op(env_path, allowed, "delete") is False
114
118
 
115
119
 
116
120
  # --- check_command_safety ---
@@ -19,9 +19,9 @@ class TestPathEncoding:
19
19
 
20
20
  def test_round_trip_lossy_with_hyphens(self):
21
21
  """Paths with hyphens lose information (known Claude Code limitation)."""
22
- original = "/Users/dotdev/projects/agentwire-dev"
22
+ original = "/home/user/projects/my-app"
23
23
  encoded = encode_project_path(original)
24
- assert encoded == "-Users-dotdev-projects-agentwire-dev"
24
+ assert encoded == "-home-user-projects-my-app"
25
25
  # decode converts ALL dashes to slashes — can't distinguish original hyphens
26
26
  decoded = decode_project_path(encoded)
27
27
  assert decoded != original # Lossy
@@ -21,8 +21,8 @@ def missions_yaml(tmp_path):
21
21
  "default_max_iterations": 3,
22
22
  "repos": {
23
23
  "agentwire-dev": {
24
- "name": "dotdevdotdev/agentwire-dev",
25
- "projects_dir": "/Users/dotdev/projects",
24
+ "name": "acme/example-repo",
25
+ "projects_dir": "/home/user/projects",
26
26
  "per_repo_concurrency": 1,
27
27
  },
28
28
  },
@@ -47,8 +47,8 @@ class TestLoadConfig:
47
47
  assert cfg.global_concurrency == 3
48
48
  assert "agentwire-dev" in cfg.repos
49
49
  repo = cfg.repos["agentwire-dev"]
50
- assert repo.name == "dotdevdotdev/agentwire-dev"
51
- assert repo.projects_dir == Path("/Users/dotdev/projects")
50
+ assert repo.name == "acme/example-repo"
51
+ assert repo.projects_dir == Path("/home/user/projects")
52
52
  assert repo.per_repo_concurrency == 1
53
53
 
54
54
  def test_project_override_per_repo_concurrency(self, missions_yaml, tmp_path):
@@ -79,7 +79,7 @@ class TestLoadConfig:
79
79
  cfg = load_config(global_path=missions_yaml)
80
80
  repo = cfg.get_repo("agentwire-dev")
81
81
  assert repo is not None
82
- assert repo.name == "dotdevdotdev/agentwire-dev"
82
+ assert repo.name == "acme/example-repo"
83
83
  assert cfg.get_repo("nope") is None
84
84
 
85
85
  def test_tilde_in_projects_dir_expanded(self, tmp_path):
@@ -94,7 +94,7 @@ class TestProjectConfig:
94
94
  data = {
95
95
  "type": "claude-bypass",
96
96
  "roles": ["agentwire", "voice"],
97
- "voice": "dotdev",
97
+ "voice": "default",
98
98
  "parent": "main",
99
99
  "shell": "/bin/bash",
100
100
  "tasks": {"t1": {"prompt": "hello"}},
@@ -102,7 +102,7 @@ class TestProjectConfig:
102
102
  config = ProjectConfig.from_dict(data)
103
103
  assert config.type == SessionType.CLAUDE_BYPASS
104
104
  assert config.roles == ["agentwire", "voice"]
105
- assert config.voice == "dotdev"
105
+ assert config.voice == "default"
106
106
  assert config.parent == "main"
107
107
  assert config.shell == "/bin/bash"
108
108
  assert "t1" in config.tasks
@@ -133,11 +133,11 @@ class TestProjectConfig:
133
133
  full = ProjectConfig(
134
134
  type=SessionType.WORKER,
135
135
  roles=["agentwire"],
136
- voice="dotdev",
136
+ voice="default",
137
137
  ).to_dict()
138
138
  assert full["type"] == "worker"
139
139
  assert full["roles"] == ["agentwire"]
140
- assert full["voice"] == "dotdev"
140
+ assert full["voice"] == "default"
141
141
 
142
142
  def test_round_trip(self):
143
143
  original = ProjectConfig(
@@ -1,46 +0,0 @@
1
- # Security Policy
2
-
3
- ## Reporting a Vulnerability
4
-
5
- If you discover a security vulnerability in AgentWire, please report it privately.
6
-
7
- **Do NOT open a public GitHub issue for security vulnerabilities.**
8
-
9
- ### How to Report
10
-
11
- Email: security@agentwire.dev
12
-
13
- Include:
14
- - Description of the vulnerability
15
- - Steps to reproduce
16
- - Potential impact
17
- - Any suggested fixes (optional)
18
-
19
- ### What to Expect
20
-
21
- - **Acknowledgment:** Within 48 hours
22
- - **Initial Assessment:** Within 1 week
23
- - **Resolution Timeline:** Depends on severity, typically 30-90 days
24
-
25
- ### Scope
26
-
27
- This security policy applies to:
28
- - The AgentWire CLI (`agentwire` command)
29
- - The AgentWire portal (web interface)
30
- - Official AgentWire packages on PyPI
31
-
32
- ### Out of Scope
33
-
34
- - Third-party dependencies (report to their maintainers)
35
- - Self-hosted TTS/STT servers
36
- - User misconfiguration
37
-
38
- ## Security Features
39
-
40
- AgentWire includes built-in security features:
41
-
42
- - **Damage Control Hooks:** Block 300+ dangerous command patterns
43
- - **Path Protection:** Prevent access to sensitive files (.env, SSH keys, credentials)
44
- - **Audit Logging:** All blocked operations are logged
45
-
46
- See `docs/wiki/internals/damage-control.md` for details.
File without changes
File without changes
File without changes