agentwire-dev 1.30.0__tar.gz → 1.30.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 (315) hide show
  1. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/PKG-INFO +1 -1
  2. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/__init__.py +1 -1
  3. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/collage.js +5 -0
  4. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/desktop.js +42 -5
  5. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/internals/portal.md +1 -1
  6. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/internals/window-collage.md +2 -1
  7. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/.github/FUNDING.yml +0 -0
  8. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  10. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/.github/ISSUE_TEMPLATE/question.md +0 -0
  11. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  12. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/.gitignore +0 -0
  13. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/CHANGELOG.md +0 -0
  14. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/CLA.md +0 -0
  15. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/CODE_OF_CONDUCT.md +0 -0
  16. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/CONTRIBUTING.md +0 -0
  17. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/Dockerfile.local +0 -0
  18. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/Dockerfile.runpod +0 -0
  19. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/LICENSE +0 -0
  20. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/README.md +0 -0
  21. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/RELEASING.md +0 -0
  22. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/SECURITY.md +0 -0
  23. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/SPONSORS.md +0 -0
  24. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/__main__.py +0 -0
  25. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/agents/__init__.py +0 -0
  26. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/agents/base.py +0 -0
  27. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/agents/tmux.py +0 -0
  28. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/cached_status.py +0 -0
  29. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/channels/__init__.py +0 -0
  30. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/channels/base.py +0 -0
  31. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/channels/email.py +0 -0
  32. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/channels/quo.py +0 -0
  33. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/cli_safety.py +0 -0
  34. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/completion.py +0 -0
  35. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/config.py +0 -0
  36. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/fetch.py +0 -0
  37. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/handoff/__init__.py +0 -0
  38. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/handoff/git_state.py +0 -0
  39. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/handoff/instructions.py +0 -0
  40. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/handoff/parser.py +0 -0
  41. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/handoff/renderer.py +0 -0
  42. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/handoff/schema.py +0 -0
  43. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/history.py +0 -0
  44. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/__init__.py +0 -0
  45. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/agentwire-permission.sh +0 -0
  46. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/__init__.py +0 -0
  47. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  48. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  49. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  50. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  51. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  52. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  53. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  54. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  55. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  56. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  57. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  58. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  59. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  60. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  61. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  62. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  63. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/hooks/idle-handler.sh +0 -0
  64. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/listen.py +0 -0
  65. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/locking.py +0 -0
  66. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/mcp_server.py +0 -0
  67. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/__init__.py +0 -0
  68. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/cli.py +0 -0
  69. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/config.py +0 -0
  70. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/dispatcher.py +0 -0
  71. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/eligibility.py +0 -0
  72. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/feedback_router.py +0 -0
  73. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/gc.py +0 -0
  74. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/github.py +0 -0
  75. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/naming.py +0 -0
  76. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/missions/state.py +0 -0
  77. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/network.py +0 -0
  78. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/onboarding.py +0 -0
  79. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/overnight.py +0 -0
  80. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/pane_manager.py +0 -0
  81. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/project_config.py +0 -0
  82. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/projects.py +0 -0
  83. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/prompts/__init__.py +0 -0
  84. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/prompts/init.md +0 -0
  85. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/__init__.py +0 -0
  86. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/agentwire.md +0 -0
  87. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/chatbot.md +0 -0
  88. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/init.md +0 -0
  89. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/notifications.md +0 -0
  90. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/orchestrator.md +0 -0
  91. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/task-runner.md +0 -0
  92. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/voice.md +0 -0
  93. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/roles/worker.md +0 -0
  94. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/safety/__init__.py +0 -0
  95. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/safety/_core.py +0 -0
  96. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/scheduler.py +0 -0
  97. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/search.py +0 -0
  98. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/server.py +0 -0
  99. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-Echo--black.png +0 -0
  100. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-Echo--transparent.png +0 -0
  101. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-Echo.png +0 -0
  102. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-email-banner.png +0 -0
  103. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  104. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  105. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  106. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
  107. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
  108. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
  109. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  110. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
  111. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
  112. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  113. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
  114. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/css/desktop.css +0 -0
  115. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/favicon.png +0 -0
  116. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/android.jpeg +0 -0
  117. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/automaton.jpeg +0 -0
  118. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/bot.jpeg +0 -0
  119. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
  120. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/droid.jpeg +0 -0
  121. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/drone.jpeg +0 -0
  122. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/guardian.jpeg +0 -0
  123. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/mech.jpeg +0 -0
  124. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/probe.jpeg +0 -0
  125. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/robot.jpeg +0 -0
  126. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
  127. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/machines/unit.jpeg +0 -0
  128. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/blob.jpeg +0 -0
  129. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/cloud.jpeg +0 -0
  130. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/crystal.jpeg +0 -0
  131. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
  132. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/flame.jpeg +0 -0
  133. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
  134. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/horned.jpeg +0 -0
  135. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/moon.jpeg +0 -0
  136. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/slime.jpeg +0 -0
  137. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/star.jpeg +0 -0
  138. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
  139. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/projects/winged.jpeg +0 -0
  140. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/bear.jpeg +0 -0
  141. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/cat.jpeg +0 -0
  142. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/crown.jpeg +0 -0
  143. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
  144. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
  145. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
  146. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/deer.jpeg +0 -0
  147. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/drone.jpeg +0 -0
  148. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
  149. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/fox.jpeg +0 -0
  150. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
  151. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/horse.jpeg +0 -0
  152. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/lion.jpeg +0 -0
  153. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
  154. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/robot.jpeg +0 -0
  155. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
  156. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
  157. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/.gitkeep +0 -0
  158. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/artifact-window.js +0 -0
  159. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/command-palette.js +0 -0
  160. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/components/icon-picker.js +0 -0
  161. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/components/list-card.js +0 -0
  162. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/components/type-tag.js +0 -0
  163. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/desktop-manager.js +0 -0
  164. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/icon-manager.js +0 -0
  165. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/new-project-modal.js +0 -0
  166. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/notifications-panel.js +0 -0
  167. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/safety-shared.js +0 -0
  168. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/safety-window.js +0 -0
  169. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/session-id.js +0 -0
  170. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/session-window.js +0 -0
  171. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  172. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/config-section.js +0 -0
  173. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/machines-section.js +0 -0
  174. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/missions-section.js +0 -0
  175. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/projects-section.js +0 -0
  176. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/safety-section.js +0 -0
  177. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  178. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/services-section.js +0 -0
  179. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  180. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/sidebar.js +0 -0
  181. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/terminal-font-prefs.js +0 -0
  182. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/tile-manager.js +0 -0
  183. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/utils/ansi.js +0 -0
  184. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/utils/auto-refresh.js +0 -0
  185. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/winbox.bundle.min.js +0 -0
  186. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/static/js/windows/chat-window.js +0 -0
  187. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/stt/__init__.py +0 -0
  188. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/stt/base.py +0 -0
  189. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/stt/server_backend.py +0 -0
  190. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/stt/stt_server.py +0 -0
  191. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/stt/whisperkit.py +0 -0
  192. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tasks.py +0 -0
  193. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templates/__init__.py +0 -0
  194. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templates/base.html +0 -0
  195. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templates/desktop.html +0 -0
  196. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templates/email_notification.html +0 -0
  197. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  198. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templates/handoff/theme.css.j2 +0 -0
  199. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templates/tmux.conf +0 -0
  200. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/templating.py +0 -0
  201. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/aws.yaml +0 -0
  202. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/docker.yaml +0 -0
  203. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/gcp.yaml +0 -0
  204. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/gh.yaml +0 -0
  205. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/git.yaml +0 -0
  206. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/gws.yaml +0 -0
  207. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/kubectl.yaml +0 -0
  208. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/npm.yaml +0 -0
  209. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/terraform.yaml +0 -0
  210. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tooldefs/uv.yaml +0 -0
  211. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/__init__.py +0 -0
  212. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/base.py +0 -0
  213. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/engines/__init__.py +0 -0
  214. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/engines/chatterbox.py +0 -0
  215. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/engines/kokoro.py +0 -0
  216. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/engines/qwen_base.py +0 -0
  217. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/engines/qwen_custom.py +0 -0
  218. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/engines/qwen_design.py +0 -0
  219. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/engines/zonos.py +0 -0
  220. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/registry.py +0 -0
  221. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts/runpod_handler.py +0 -0
  222. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tts_server.py +0 -0
  223. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/tunnels.py +0 -0
  224. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/utils/__init__.py +0 -0
  225. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/utils/chunker.py +0 -0
  226. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/utils/file_io.py +0 -0
  227. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/utils/paths.py +0 -0
  228. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/utils/subprocess.py +0 -0
  229. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/validation.py +0 -0
  230. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/voiceclone.py +0 -0
  231. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/voices/darren.wav +0 -0
  232. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/voices/default.wav +0 -0
  233. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/voices/jessica.wav +0 -0
  234. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/voices/lisa.wav +0 -0
  235. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/voices/may.wav +0 -0
  236. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/agentwire/worktree.py +0 -0
  237. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/decisions/obsidian-second-brain.md +0 -0
  238. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/logo.png +0 -0
  239. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/INDEX.md +0 -0
  240. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/architecture.md +0 -0
  241. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/communication/channels.md +0 -0
  242. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/communication/hammerspoon.md +0 -0
  243. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/communication/handoff.md +0 -0
  244. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/concepts.md +0 -0
  245. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/deployment/remote-access.md +0 -0
  246. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/deployment/remote-machines.md +0 -0
  247. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/glossary.md +0 -0
  248. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  249. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/internals/damage-control.md +0 -0
  250. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/internals/shell-escaping.md +0 -0
  251. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/internals/troubleshooting.md +0 -0
  252. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/missions.md +0 -0
  253. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/quickstart.md +0 -0
  254. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  255. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  256. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/sessions/pi.md +0 -0
  257. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/tts/runpod-tts.md +0 -0
  258. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/tts/stt-self-hosted.md +0 -0
  259. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/docs/wiki/tts/tts-self-hosted.md +0 -0
  260. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/pyproject.toml +0 -0
  261. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/requirements-tts.txt +0 -0
  262. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/templates/launchd/dev.agentwire.mission-dispatcher.plist +0 -0
  263. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/templates/launchd/dev.agentwire.mission-feedback-router.plist +0 -0
  264. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/templates/launchd/dev.agentwire.mission-janitor.plist +0 -0
  265. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/conftest.py +0 -0
  266. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/e2e/test_portal_ui.py +0 -0
  267. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/fixtures/sample_agentwire.yml +0 -0
  268. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/fixtures/sample_config.yaml +0 -0
  269. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/fixtures/sample_scheduler.yaml +0 -0
  270. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/integration/test_missions_concurrency.py +0 -0
  271. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/integration/test_missions_lifecycle.py +0 -0
  272. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/integration/test_scheduler_board.py +0 -0
  273. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/integration/test_server_websockets.py +0 -0
  274. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_build_agent_command.py +0 -0
  275. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_channels.py +0 -0
  276. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_cli_commands.py +0 -0
  277. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_cli_output.py +0 -0
  278. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_cli_safety.py +0 -0
  279. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_config.py +0 -0
  280. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_damage_control_hooks.py +0 -0
  281. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_damage_control_sync.py +0 -0
  282. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_file_io.py +0 -0
  283. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_handoff_git_state.py +0 -0
  284. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_handoff_instructions.py +0 -0
  285. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_handoff_parser.py +0 -0
  286. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_handoff_renderer.py +0 -0
  287. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_history.py +0 -0
  288. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_locking.py +0 -0
  289. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_mcp_server.py +0 -0
  290. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_mcp_tools_args.py +0 -0
  291. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_cli.py +0 -0
  292. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_config.py +0 -0
  293. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_dispatcher.py +0 -0
  294. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_eligibility.py +0 -0
  295. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_feedback_router.py +0 -0
  296. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_gc.py +0 -0
  297. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_github.py +0 -0
  298. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_naming.py +0 -0
  299. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_missions_state.py +0 -0
  300. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_overnight_resume_flags.py +0 -0
  301. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_portal_api.py +0 -0
  302. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_project_config.py +0 -0
  303. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_roles.py +0 -0
  304. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_safety_disabled_rules.py +0 -0
  305. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_safety_escape_hatch.py +0 -0
  306. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_safety_kill_switch.py +0 -0
  307. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_safety_mission_worker.py +0 -0
  308. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_scheduler.py +0 -0
  309. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_scheduler_parsing.py +0 -0
  310. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_search.py +0 -0
  311. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_server_async.py +0 -0
  312. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_server_pure.py +0 -0
  313. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_tasks.py +0 -0
  314. {agentwire_dev-1.30.0 → agentwire_dev-1.30.1}/tests/unit/test_templating.py +0 -0
  315. {agentwire_dev-1.30.0 → agentwire_dev-1.30.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.30.0
3
+ Version: 1.30.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
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.30.0"
3
+ __version__ = "1.30.1"
@@ -85,6 +85,11 @@ class Collage {
85
85
  area.appendChild(this._overlay);
86
86
  }
87
87
 
88
+ /** @returns {boolean} Whether the overlay is currently up. */
89
+ get active() {
90
+ return this._active;
91
+ }
92
+
88
93
  /**
89
94
  * Toggle the overlay.
90
95
  */
@@ -327,20 +327,57 @@ function setupWindowCycling() {
327
327
  }, true); // capture phase — runs before xterm's handlers
328
328
  }
329
329
 
330
- // Collage — tap F3 (like macOS Mission Control) to grid all open windows; tap
331
- // again, press Esc, or click a window to restore.
330
+ // Collage — tap F3 (like macOS Mission Control) or Alt/Option+` to grid all
331
+ // open windows; tap again, press Esc, or click a window to restore.
332
332
  function setupCollage() {
333
333
  collage.init(_lookupWindowInstance);
334
334
 
335
- // Capture phase on window + stopPropagation so xterm's <textarea> never sees
336
- // F3 (and the browser's default Find-next is suppressed).
335
+ // macOS quirk: Option+` is a dead key pressing it starts a grave-accent
336
+ // composition against the focused element (an xterm <textarea>) before our
337
+ // keydown handler even runs, and the composed '`' is delivered through the
338
+ // composition/input path, which preventDefault on keydown cannot cancel.
339
+ // Fix: swallow composition events in the CAPTURE phase on window for a
340
+ // short window after the hotkey fires. xterm's composition listeners live
341
+ // on the textarea (target phase), so stopping propagation here means the
342
+ // accent never reaches the PTY.
343
+ let suppressCompositionUntil = 0;
344
+ for (const type of ['compositionstart', 'compositionupdate', 'compositionend']) {
345
+ window.addEventListener(type, (e) => {
346
+ if (performance.now() > suppressCompositionUntil) return;
347
+ e.preventDefault();
348
+ e.stopImmediatePropagation();
349
+ // The browser still commits the composed char into the target's
350
+ // value natively; xterm never saw the composition, so the residue
351
+ // would linger (xterm only rewrites the value through its own
352
+ // composition handling) and skew its position bookkeeping for the
353
+ // next real IME composition. Wipe it.
354
+ if (e.type === 'compositionend' && e.target?.classList?.contains('xterm-helper-textarea')) {
355
+ e.target.value = '';
356
+ }
357
+ }, true);
358
+ }
359
+
360
+ // Capture phase on window + stopPropagation so xterm's <textarea> never
361
+ // sees the keystroke (and the browser default — F3 find-next — is
362
+ // suppressed). Alt+` is detected via e.code: on macOS the dead key makes
363
+ // e.key 'Dead', never a backtick. Cmd/Ctrl+` stays the sidebar toggle.
337
364
  window.addEventListener('keydown', (e) => {
338
- if (e.code !== 'F3') return;
365
+ const isF3 = e.code === 'F3';
366
+ const isAltBacktick = e.altKey && !e.metaKey && !e.ctrlKey && e.code === 'Backquote';
367
+ if (!isF3 && !isAltBacktick) return;
339
368
  if (isCommandPaletteOpen()) return;
340
369
  e.preventDefault();
341
370
  e.stopPropagation();
342
371
  if (e.repeat) return; // ignore auto-repeat while the key is held
372
+ // Arm BEFORE toggling: collage.enter() blurs the focused terminal,
373
+ // which makes Chrome finalize the pending dead-key composition
374
+ // immediately — the suppressor must already be active for it.
375
+ if (isAltBacktick) suppressCompositionUntil = performance.now() + 700;
376
+ const wasActive = collage.active;
343
377
  collage.toggle();
378
+ // No-op toggle (under 2 windows): disarm so the dead key composes
379
+ // normally — with no collage there's nothing to protect.
380
+ if (isAltBacktick && collage.active === wasActive) suppressCompositionUntil = 0;
344
381
  }, true);
345
382
  }
346
383
 
@@ -118,7 +118,7 @@ Sessions can be opened from the Sessions dropdown in two modes:
118
118
 
119
119
  ### Window Collage
120
120
 
121
- F3 (or the `desktop_collage` MCP tool / command palette) shows a Mission Control-style grid of live previews of every open window — click a tile to focus, Esc to dismiss. The tiles are overlay-local live views (monitor WebSockets / cloned iframes); the real windows are never moved or resized. Architecture and the hard-won "never mutate real WinBox windows" lessons: **[Window collage](window-collage.md)**.
121
+ F3 or Alt/Option+` (or the `desktop_collage` MCP tool / command palette) shows a Mission Control-style grid of live previews of every open window — click a tile to focus, Esc to dismiss. The tiles are overlay-local live views (monitor WebSockets / cloned iframes); the real windows are never moved or resized. Architecture and the hard-won "never mutate real WinBox windows" lessons: **[Window collage](window-collage.md)**.
122
122
 
123
123
  ### Simultaneous Operation
124
124
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Living wiki. Update this page, don't create new versions.
4
4
 
5
- F3 (or the `desktop_collage` MCP tool, or the command palette → "Window collage") lays a live preview of every open window into a grid so the whole desktop can be scanned at once. Click a tile to focus that window; Esc, F3, or clicking the backdrop exits.
5
+ F3 or Alt/Option+` (or the `desktop_collage` MCP tool, or the command palette → "Window collage") lays a live preview of every open window into a grid so the whole desktop can be scanned at once. Click a tile to focus that window; Esc, the hotkey again, or clicking the backdrop exits.
6
6
 
7
7
  Module: `agentwire/static/js/collage.js`. Styles: the `.collage-*` block in `agentwire/static/css/desktop.css`. Hotkey wiring: `setupCollage()` in `agentwire/static/js/desktop.js`.
8
8
 
@@ -27,6 +27,7 @@ Any future feature that wants to show multiple windows at once — exposé varia
27
27
  | **Click-to-focus** | Tile click → tear down overlay → `desktop.setActiveWindow(id)` — the same battle-tested path as a sidebar tab click. Nothing collage-specific touches window state. |
28
28
  | **Mid-overlay churn** | `window_registered` / `window_unregistered` → rebuild the grid. `active_window_changed` (Tab cycle, sidebar click, a freshly-opened window's focus) → tear down and get out of the way. `viewport_resize` → rebuild. |
29
29
  | **Keyboard** | Entering blurs the focused element so keystrokes can't leak into the xterm `<textarea>` behind the backdrop; exit refocuses the active window. Esc is capture-phase and defers to the command palette when it's open. |
30
+ | **Alt/Option+` dead key** | On macOS, Option+` starts a grave-accent composition against the focused xterm textarea *before* keydown fires, and the composed `` ` `` arrives via `composition*` events that `preventDefault()` cannot cancel — the reason this hotkey leaked backticks historically. `setupCollage()` swallows composition events at the **window capture phase** for ~700ms after the hotkey (xterm's composition listeners are target-phase on the textarea, so nothing reaches the PTY) and clears the textarea's value on the suppressed `compositionend` (the browser commits the char natively; residue would skew xterm's composition position bookkeeping). The suppressor is disarmed if the toggle was a no-op (<2 windows), so the dead key composes normally when the collage isn't in play. |
30
31
 
31
32
  Tile sockets are closed on every teardown/rebuild — verified by watching the server's `Client connected (total: N)` logs stay flat across many cycles.
32
33
 
File without changes
File without changes
File without changes