agentwire-dev 1.32.0__tar.gz → 1.33.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 (356) hide show
  1. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/PKG-INFO +1 -1
  2. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/__init__.py +1 -1
  3. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/css/desktop.css +19 -0
  4. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/desktop.js +11 -13
  5. agentwire_dev-1.33.0/agentwire/static/js/notification-prefs.js +56 -0
  6. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/config-section.js +56 -2
  7. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/.github/FUNDING.yml +0 -0
  8. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  10. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  11. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  12. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/.gitignore +0 -0
  13. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/CHANGELOG.md +0 -0
  14. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/CLA.md +0 -0
  15. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/CODE_OF_CONDUCT.md +0 -0
  16. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/CONTRIBUTING.md +0 -0
  17. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/Dockerfile.local +0 -0
  18. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/Dockerfile.runpod +0 -0
  19. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/LICENSE +0 -0
  20. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/README.md +0 -0
  21. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/RELEASING.md +0 -0
  22. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/SECURITY.md +0 -0
  23. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/SPONSORS.md +0 -0
  24. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/__main__.py +0 -0
  25. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/agents/__init__.py +0 -0
  26. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/agents/base.py +0 -0
  27. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/agents/tmux.py +0 -0
  28. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/cached_status.py +0 -0
  29. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/channels/__init__.py +0 -0
  30. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/channels/base.py +0 -0
  31. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/channels/email.py +0 -0
  32. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/channels/quo.py +0 -0
  33. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/cli_safety.py +0 -0
  34. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/completion.py +0 -0
  35. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/config.py +0 -0
  36. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/council/__init__.py +0 -0
  37. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/council/cli.py +0 -0
  38. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/council/inbox.py +0 -0
  39. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/council/state.py +0 -0
  40. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/fetch.py +0 -0
  41. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/handoff/__init__.py +0 -0
  42. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/handoff/git_state.py +0 -0
  43. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/handoff/instructions.py +0 -0
  44. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/handoff/parser.py +0 -0
  45. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/handoff/renderer.py +0 -0
  46. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/handoff/schema.py +0 -0
  47. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/history.py +0 -0
  48. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/__init__.py +0 -0
  49. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/agentwire-permission.sh +0 -0
  50. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/__init__.py +0 -0
  51. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  52. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  53. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  54. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  55. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  56. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  57. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  58. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  59. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  60. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  61. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  62. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  63. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  64. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  65. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  66. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  67. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/idle-handler.sh +0 -0
  68. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/hooks/queue-processor.sh +0 -0
  69. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/listen.py +0 -0
  70. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/locking.py +0 -0
  71. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/mcp_server.py +0 -0
  72. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/__init__.py +0 -0
  73. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/cli.py +0 -0
  74. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/config.py +0 -0
  75. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/dispatcher.py +0 -0
  76. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/eligibility.py +0 -0
  77. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/feedback_router.py +0 -0
  78. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/gc.py +0 -0
  79. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/github.py +0 -0
  80. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/naming.py +0 -0
  81. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/missions/state.py +0 -0
  82. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/network.py +0 -0
  83. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/onboarding.py +0 -0
  84. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/overnight.py +0 -0
  85. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/pane_manager.py +0 -0
  86. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/project_config.py +0 -0
  87. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/projects.py +0 -0
  88. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/prompts/__init__.py +0 -0
  89. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/prompts/init.md +0 -0
  90. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/__init__.py +0 -0
  91. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/agentwire.md +0 -0
  92. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/chatbot.md +0 -0
  93. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-brain.md +0 -0
  94. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-conscience.md +0 -0
  95. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-critic.md +0 -0
  96. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-devils-advocate.md +0 -0
  97. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-gut.md +0 -0
  98. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-historian.md +0 -0
  99. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-member.md +0 -0
  100. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/council-orchestrator.md +0 -0
  101. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/init.md +0 -0
  102. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/notifications.md +0 -0
  103. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/orchestrator.md +0 -0
  104. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/soul.md +0 -0
  105. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/task-runner.md +0 -0
  106. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/voice.md +0 -0
  107. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/roles/worker.md +0 -0
  108. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/safety/__init__.py +0 -0
  109. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/safety/_core.py +0 -0
  110. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/scheduler.py +0 -0
  111. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/scratchpad.py +0 -0
  112. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/search.py +0 -0
  113. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/security.py +0 -0
  114. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/server.py +0 -0
  115. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/services.py +0 -0
  116. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/session_ready.py +0 -0
  117. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-Echo--black.png +0 -0
  118. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-Echo--transparent.png +0 -0
  119. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-Echo.png +0 -0
  120. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-email-banner.png +0 -0
  121. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  122. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  123. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  124. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
  125. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
  126. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
  127. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  128. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
  129. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
  130. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  131. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
  132. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/announcements.json +0 -0
  133. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/favicon.png +0 -0
  134. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/android.jpeg +0 -0
  135. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/automaton.jpeg +0 -0
  136. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/bot.jpeg +0 -0
  137. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
  138. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/droid.jpeg +0 -0
  139. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/drone.jpeg +0 -0
  140. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/guardian.jpeg +0 -0
  141. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/mech.jpeg +0 -0
  142. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/probe.jpeg +0 -0
  143. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/robot.jpeg +0 -0
  144. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
  145. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/machines/unit.jpeg +0 -0
  146. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/blob.jpeg +0 -0
  147. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/cloud.jpeg +0 -0
  148. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/crystal.jpeg +0 -0
  149. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
  150. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/flame.jpeg +0 -0
  151. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
  152. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/horned.jpeg +0 -0
  153. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/moon.jpeg +0 -0
  154. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/slime.jpeg +0 -0
  155. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/star.jpeg +0 -0
  156. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
  157. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/projects/winged.jpeg +0 -0
  158. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/bear.jpeg +0 -0
  159. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/cat.jpeg +0 -0
  160. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/crown.jpeg +0 -0
  161. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
  162. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
  163. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
  164. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/deer.jpeg +0 -0
  165. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/drone.jpeg +0 -0
  166. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
  167. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/fox.jpeg +0 -0
  168. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
  169. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/horse.jpeg +0 -0
  170. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/lion.jpeg +0 -0
  171. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
  172. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/robot.jpeg +0 -0
  173. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
  174. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
  175. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/.gitkeep +0 -0
  176. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/announcement-modal.js +0 -0
  177. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/api.js +0 -0
  178. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/artifact-window.js +0 -0
  179. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/collage.js +0 -0
  180. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/command-palette.js +0 -0
  181. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/components/icon-picker.js +0 -0
  182. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/components/list-card.js +0 -0
  183. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/components/type-tag.js +0 -0
  184. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/dead-key-suppressor.js +0 -0
  185. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/desktop-manager.js +0 -0
  186. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/icon-manager.js +0 -0
  187. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/notifications-panel.js +0 -0
  188. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/safety-shared.js +0 -0
  189. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/safety-window.js +0 -0
  190. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/scratchpad.js +0 -0
  191. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/session-id.js +0 -0
  192. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/session-window.js +0 -0
  193. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  194. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
  195. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/missions-section.js +0 -0
  196. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
  197. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
  198. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  199. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/services-section.js +0 -0
  200. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  201. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/sidebar.js +0 -0
  202. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
  203. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/tile-manager.js +0 -0
  204. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/token-modal.js +0 -0
  205. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/utils/ansi.js +0 -0
  206. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/utils/auto-refresh.js +0 -0
  207. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/voice/browser-stt.js +0 -0
  208. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/voice/browser-tts.js +0 -0
  209. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/voice/jargon.js +0 -0
  210. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/voice/prompt.js +0 -0
  211. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
  212. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/stt/__init__.py +0 -0
  213. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/stt/base.py +0 -0
  214. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/stt/server_backend.py +0 -0
  215. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/stt/stt_server.py +0 -0
  216. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tasks.py +0 -0
  217. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templates/__init__.py +0 -0
  218. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templates/base.html +0 -0
  219. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templates/desktop.html +0 -0
  220. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templates/email_notification.html +0 -0
  221. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  222. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
  223. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templates/tmux.conf +0 -0
  224. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/templating.py +0 -0
  225. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/aws.yaml +0 -0
  226. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/docker.yaml +0 -0
  227. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/gcp.yaml +0 -0
  228. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/gh.yaml +0 -0
  229. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/git.yaml +0 -0
  230. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/gws.yaml +0 -0
  231. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/kubectl.yaml +0 -0
  232. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/npm.yaml +0 -0
  233. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/terraform.yaml +0 -0
  234. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tooldefs/uv.yaml +0 -0
  235. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/__init__.py +0 -0
  236. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/base.py +0 -0
  237. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/engines/__init__.py +0 -0
  238. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/engines/chatterbox.py +0 -0
  239. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/engines/kokoro.py +0 -0
  240. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/engines/qwen_base.py +0 -0
  241. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/engines/qwen_custom.py +0 -0
  242. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/engines/qwen_design.py +0 -0
  243. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/engines/zonos.py +0 -0
  244. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts/registry.py +0 -0
  245. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tts_server.py +0 -0
  246. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/tunnels.py +0 -0
  247. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/utils/__init__.py +0 -0
  248. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/utils/chunker.py +0 -0
  249. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/utils/file_io.py +0 -0
  250. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/utils/paths.py +0 -0
  251. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/utils/speech.py +0 -0
  252. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/utils/subprocess.py +0 -0
  253. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/validation.py +0 -0
  254. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/voiceclone.py +0 -0
  255. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/voices/darren.wav +0 -0
  256. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/voices/default.wav +0 -0
  257. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/voices/jessica.wav +0 -0
  258. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/voices/lisa.wav +0 -0
  259. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/voices/may.wav +0 -0
  260. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/agentwire/worktree.py +0 -0
  261. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/decisions/obsidian-second-brain.md +0 -0
  262. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/logo.png +0 -0
  263. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/INDEX.md +0 -0
  264. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/architecture.md +0 -0
  265. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/communication/channels.md +0 -0
  266. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/communication/hammerspoon.md +0 -0
  267. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/communication/handoff.md +0 -0
  268. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/concepts.md +0 -0
  269. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/council.md +0 -0
  270. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/deployment/remote-access.md +0 -0
  271. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/deployment/remote-machines.md +0 -0
  272. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/glossary.md +0 -0
  273. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  274. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/internals/damage-control.md +0 -0
  275. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/internals/portal.md +0 -0
  276. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/internals/shell-escaping.md +0 -0
  277. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/internals/troubleshooting.md +0 -0
  278. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/internals/window-collage.md +0 -0
  279. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/missions.md +0 -0
  280. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/quickstart.md +0 -0
  281. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  282. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/services.md +0 -0
  283. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  284. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/sessions/pi.md +0 -0
  285. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/voice/shim-contract.md +0 -0
  286. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
  287. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/docs/wiki/voice/tts-self-hosted.md +0 -0
  288. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/pyproject.toml +0 -0
  289. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/requirements-tts.txt +0 -0
  290. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/templates/launchd/dev.agentwire.mission-dispatcher.plist +0 -0
  291. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/templates/launchd/dev.agentwire.mission-feedback-router.plist +0 -0
  292. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/templates/launchd/dev.agentwire.mission-janitor.plist +0 -0
  293. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/conftest.py +0 -0
  294. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/e2e/test_portal_ui.py +0 -0
  295. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/fixtures/sample_agentwire.yml +0 -0
  296. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/fixtures/sample_config.yaml +0 -0
  297. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/fixtures/sample_scheduler.yaml +0 -0
  298. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/integration/test_missions_concurrency.py +0 -0
  299. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/integration/test_missions_lifecycle.py +0 -0
  300. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/integration/test_scheduler_board.py +0 -0
  301. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/integration/test_server_websockets.py +0 -0
  302. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_announcements.py +0 -0
  303. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_build_agent_command.py +0 -0
  304. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_channels.py +0 -0
  305. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_cli_commands.py +0 -0
  306. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_cli_output.py +0 -0
  307. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_cli_safety.py +0 -0
  308. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_config.py +0 -0
  309. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_council_cli.py +0 -0
  310. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_council_inbox.py +0 -0
  311. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_council_state.py +0 -0
  312. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_damage_control_hooks.py +0 -0
  313. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_damage_control_sync.py +0 -0
  314. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_file_io.py +0 -0
  315. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_handoff_git_state.py +0 -0
  316. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_handoff_instructions.py +0 -0
  317. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_handoff_parser.py +0 -0
  318. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_handoff_renderer.py +0 -0
  319. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_history.py +0 -0
  320. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_hooks_install.py +0 -0
  321. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_idle_handler.py +0 -0
  322. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_locking.py +0 -0
  323. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_mcp_server.py +0 -0
  324. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_mcp_tools_args.py +0 -0
  325. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_cli.py +0 -0
  326. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_config.py +0 -0
  327. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_dispatcher.py +0 -0
  328. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_eligibility.py +0 -0
  329. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_feedback_router.py +0 -0
  330. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_gc.py +0 -0
  331. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_github.py +0 -0
  332. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_naming.py +0 -0
  333. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_missions_state.py +0 -0
  334. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_overnight_resume_flags.py +0 -0
  335. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_portal_api.py +0 -0
  336. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_project_config.py +0 -0
  337. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_roles.py +0 -0
  338. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_safety_disabled_rules.py +0 -0
  339. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_safety_escape_hatch.py +0 -0
  340. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_safety_kill_switch.py +0 -0
  341. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_safety_mission_worker.py +0 -0
  342. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_scheduler.py +0 -0
  343. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_scheduler_parsing.py +0 -0
  344. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_scratchpad.py +0 -0
  345. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_search.py +0 -0
  346. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_security.py +0 -0
  347. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_server_async.py +0 -0
  348. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_server_pure.py +0 -0
  349. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_services.py +0 -0
  350. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_session_ready.py +0 -0
  351. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_speech_tags.py +0 -0
  352. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_stt_backend.py +0 -0
  353. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_tasks.py +0 -0
  354. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_templating.py +0 -0
  355. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/tests/unit/test_tmux_template.py +0 -0
  356. {agentwire_dev-1.32.0 → agentwire_dev-1.33.0}/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.32.0
3
+ Version: 1.33.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
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.32.0"
3
+ __version__ = "1.33.0"
@@ -770,6 +770,25 @@ body {
770
770
  border-color: var(--accent);
771
771
  }
772
772
 
773
+ .sidebar-notif-mute {
774
+ display: flex;
775
+ align-items: center;
776
+ gap: 6px;
777
+ color: var(--text-muted);
778
+ font-size: 13px;
779
+ cursor: pointer;
780
+ }
781
+
782
+ .sidebar-notif-mute input[type="checkbox"] {
783
+ accent-color: var(--accent);
784
+ cursor: pointer;
785
+ }
786
+
787
+ .sidebar-display-hint {
788
+ color: var(--text-muted);
789
+ font-size: 12px;
790
+ }
791
+
773
792
  /* Voice Indicator States */
774
793
  #sidebarVoiceIndicator {
775
794
  display: flex;
@@ -15,6 +15,7 @@ import { SessionWindow } from './session-window.js';
15
15
  import { ArtifactWindow } from './artifact-window.js';
16
16
  import { sidebar } from './sidebar.js';
17
17
  import { buildSessionId, normalizeMachine, isLocalMachine } from './session-id.js';
18
+ import { notificationsActive } from './notification-prefs.js';
18
19
  import { configSection } from './sidebar/config-section.js';
19
20
  import { safetySection } from './sidebar/safety-section.js';
20
21
  import { artifactsSection } from './sidebar/artifacts-section.js';
@@ -315,19 +316,16 @@ function handleSessionRenamed({ old_name, new_name }) {
315
316
  * Shows desktop notification for background session activity.
316
317
  */
317
318
  function handleWindowActivity({ session }) {
318
- // Only notify if session window is not focused
319
- if (desktop.getActiveWindow() !== session) {
320
- // Request notification permission if needed
321
- if (Notification.permission === 'granted') {
322
- new Notification(`Activity in ${session}`, {
323
- body: 'Session has new output',
324
- icon: '/static/img/icon-192.png',
325
- tag: `activity-${session}`, // Prevent duplicate notifications
326
- });
327
- } else if (Notification.permission !== 'denied') {
328
- Notification.requestPermission();
329
- }
330
- }
319
+ // Only notify if the session window isn't the one you're looking at.
320
+ if (desktop.getActiveWindow() === session) return;
321
+ // Respects browser permission + the Config sidebar mute toggle.
322
+ // Enabling is done explicitly from Config → Desktop notifications, not here.
323
+ if (!notificationsActive()) return;
324
+ new Notification(`Activity in ${session}`, {
325
+ body: 'Session has new output',
326
+ icon: '/static/img/icon-192.png',
327
+ tag: `activity-${session}`, // Prevent duplicate notifications
328
+ });
331
329
  }
332
330
 
333
331
  // Tab / Shift+Tab to cycle open windows
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Desktop notification preferences — frontend-only, per-browser.
3
+ *
4
+ * Two independent layers:
5
+ * - Browser permission ('default' | 'granted' | 'denied') — owned by the
6
+ * browser, requested via enableNotifications(). The portal can ask but
7
+ * cannot grant it; that's a per-origin browser decision.
8
+ * - A local "muted" toggle — lets the user silence bubbles without revoking
9
+ * the OS permission. Persisted in localStorage.
10
+ *
11
+ * Changing either dispatches `notification-pref-change` on window so the
12
+ * Config sidebar (and anything else) can repaint.
13
+ */
14
+
15
+ const MUTE_KEY = 'notificationsMuted';
16
+ export const NOTIFICATION_PREF_EVENT = 'notification-pref-change';
17
+
18
+ export function notificationsSupported() {
19
+ return typeof window !== 'undefined' && 'Notification' in window;
20
+ }
21
+
22
+ /** 'unsupported' | 'default' | 'granted' | 'denied' */
23
+ export function getPermission() {
24
+ return notificationsSupported() ? Notification.permission : 'unsupported';
25
+ }
26
+
27
+ export function isMuted() {
28
+ return localStorage.getItem(MUTE_KEY) === '1';
29
+ }
30
+
31
+ export function setMuted(muted) {
32
+ if (muted) localStorage.setItem(MUTE_KEY, '1');
33
+ else localStorage.removeItem(MUTE_KEY);
34
+ window.dispatchEvent(new CustomEvent(NOTIFICATION_PREF_EVENT));
35
+ }
36
+
37
+ /** True only when a bubble should actually be shown right now. */
38
+ export function notificationsActive() {
39
+ return getPermission() === 'granted' && !isMuted();
40
+ }
41
+
42
+ /**
43
+ * Ask the browser for permission if it hasn't been decided yet.
44
+ * Returns the resulting permission string. No-op (returns current state) if
45
+ * already granted/denied or unsupported.
46
+ */
47
+ export async function enableNotifications() {
48
+ if (!notificationsSupported()) return 'unsupported';
49
+ let perm = Notification.permission;
50
+ if (perm === 'default') {
51
+ try { perm = await Notification.requestPermission(); }
52
+ catch { perm = Notification.permission; }
53
+ }
54
+ window.dispatchEvent(new CustomEvent(NOTIFICATION_PREF_EVENT));
55
+ return perm;
56
+ }
@@ -4,6 +4,9 @@ import {
4
4
  setTerminalFontSize, clearTerminalFontSize,
5
5
  FONT_SIZE_MIN, FONT_SIZE_MAX, FONT_SIZE_EVENT,
6
6
  } from '../terminal-font-prefs.js';
7
+ import {
8
+ getPermission, isMuted, setMuted, enableNotifications,
9
+ } from '../notification-prefs.js';
7
10
 
8
11
  function renderDisplayPrefs() {
9
12
  const current = getTerminalFontSize();
@@ -20,6 +23,55 @@ function renderDisplayPrefs() {
20
23
  </div>`;
21
24
  }
22
25
 
26
+ function renderNotificationPrefs() {
27
+ const perm = getPermission();
28
+ const muted = isMuted();
29
+
30
+ let status, control = '';
31
+ if (perm === 'unsupported') {
32
+ status = '<em>not supported</em>';
33
+ } else if (perm === 'denied') {
34
+ status = '<em>blocked</em>';
35
+ control = '<span class="sidebar-display-hint">Allow in browser site settings</span>';
36
+ } else if (perm === 'default') {
37
+ status = '<em>off</em>';
38
+ control = '<button class="sidebar-display-reset" data-action="enable-notifs">Enable</button>';
39
+ } else { // granted
40
+ status = muted ? 'muted' : 'on';
41
+ control = `<label class="sidebar-notif-mute"><input type="checkbox" data-action="mute-notifs"${muted ? ' checked' : ''}/> Mute</label>`;
42
+ }
43
+
44
+ return `<div class="sidebar-display-prefs" data-notif-block>
45
+ <div class="sidebar-display-row">
46
+ <label class="sidebar-config-key">Desktop notifications</label>
47
+ <span class="sidebar-display-value" data-notif="status">${status}</span>
48
+ </div>
49
+ ${control ? `<div class="sidebar-display-row">${control}</div>` : ''}
50
+ </div>`;
51
+ }
52
+
53
+ function bindNotificationPrefs(body) {
54
+ const repaint = () => {
55
+ const block = body.querySelector('[data-notif-block]');
56
+ if (!block) return;
57
+ const tmp = document.createElement('div');
58
+ tmp.innerHTML = renderNotificationPrefs();
59
+ block.replaceWith(tmp.firstElementChild);
60
+ wire();
61
+ };
62
+ function wire() {
63
+ body.querySelector('[data-action="enable-notifs"]')?.addEventListener('click', async () => {
64
+ await enableNotifications();
65
+ repaint();
66
+ });
67
+ body.querySelector('[data-action="mute-notifs"]')?.addEventListener('change', (e) => {
68
+ setMuted(e.target.checked);
69
+ repaint();
70
+ });
71
+ }
72
+ wire();
73
+ }
74
+
23
75
  function bindDisplayPrefs(body) {
24
76
  const slider = body.querySelector('#termFontSize');
25
77
  const valueEl = body.querySelector('[data-display="size"]');
@@ -54,11 +106,13 @@ export const configSection = {
54
106
  else if (typeof value === 'object') display = `<code>${JSON.stringify(value)}</code>`;
55
107
  return `<div class="sidebar-config-item"><span class="sidebar-config-key">${key}</span><span class="sidebar-config-val">${display}</span></div>`;
56
108
  }).join('');
57
- body.innerHTML = renderDisplayPrefs() + itemHtml;
109
+ body.innerHTML = renderDisplayPrefs() + renderNotificationPrefs() + itemHtml;
58
110
  bindDisplayPrefs(body);
111
+ bindNotificationPrefs(body);
59
112
  } catch (e) {
60
- body.innerHTML = renderDisplayPrefs() + '<div class="sidebar-empty">Failed to load config</div>';
113
+ body.innerHTML = renderDisplayPrefs() + renderNotificationPrefs() + '<div class="sidebar-empty">Failed to load config</div>';
61
114
  bindDisplayPrefs(body);
115
+ bindNotificationPrefs(body);
62
116
  }
63
117
  },
64
118
  };
File without changes
File without changes
File without changes