agentwire-dev 1.29.2__tar.gz → 1.29.3__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 (313) hide show
  1. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/PKG-INFO +1 -1
  2. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/__init__.py +1 -1
  3. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/css/desktop.css +0 -168
  4. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/windows/chat-window.js +0 -7
  5. agentwire_dev-1.29.2/agentwire/static/js/pinned-message.js +0 -232
  6. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/.github/FUNDING.yml +0 -0
  7. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  8. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  9. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/.github/ISSUE_TEMPLATE/question.md +0 -0
  10. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  11. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/.gitignore +0 -0
  12. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/CHANGELOG.md +0 -0
  13. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/CLA.md +0 -0
  14. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/CODE_OF_CONDUCT.md +0 -0
  15. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/CONTRIBUTING.md +0 -0
  16. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/Dockerfile.local +0 -0
  17. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/Dockerfile.runpod +0 -0
  18. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/LICENSE +0 -0
  19. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/README.md +0 -0
  20. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/RELEASING.md +0 -0
  21. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/SECURITY.md +0 -0
  22. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/SPONSORS.md +0 -0
  23. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/__main__.py +0 -0
  24. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/agents/__init__.py +0 -0
  25. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/agents/base.py +0 -0
  26. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/agents/tmux.py +0 -0
  27. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/cached_status.py +0 -0
  28. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/channels/__init__.py +0 -0
  29. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/channels/base.py +0 -0
  30. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/channels/email.py +0 -0
  31. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/channels/quo.py +0 -0
  32. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/cli_safety.py +0 -0
  33. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/completion.py +0 -0
  34. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/config.py +0 -0
  35. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/fetch.py +0 -0
  36. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/handoff/__init__.py +0 -0
  37. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/handoff/git_state.py +0 -0
  38. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/handoff/instructions.py +0 -0
  39. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/handoff/parser.py +0 -0
  40. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/handoff/renderer.py +0 -0
  41. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/handoff/schema.py +0 -0
  42. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/history.py +0 -0
  43. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/__init__.py +0 -0
  44. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/agentwire-permission.sh +0 -0
  45. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/__init__.py +0 -0
  46. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  47. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  48. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  49. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  50. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  51. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  52. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  53. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  54. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  55. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  56. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  57. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  58. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  59. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  60. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  61. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  62. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/hooks/idle-handler.sh +0 -0
  63. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/listen.py +0 -0
  64. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/locking.py +0 -0
  65. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/mcp_server.py +0 -0
  66. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/__init__.py +0 -0
  67. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/cli.py +0 -0
  68. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/config.py +0 -0
  69. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/dispatcher.py +0 -0
  70. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/eligibility.py +0 -0
  71. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/feedback_router.py +0 -0
  72. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/gc.py +0 -0
  73. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/github.py +0 -0
  74. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/naming.py +0 -0
  75. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/missions/state.py +0 -0
  76. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/network.py +0 -0
  77. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/onboarding.py +0 -0
  78. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/overnight.py +0 -0
  79. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/pane_manager.py +0 -0
  80. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/project_config.py +0 -0
  81. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/projects.py +0 -0
  82. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/prompts/__init__.py +0 -0
  83. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/prompts/init.md +0 -0
  84. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/__init__.py +0 -0
  85. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/agentwire.md +0 -0
  86. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/chatbot.md +0 -0
  87. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/init.md +0 -0
  88. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/notifications.md +0 -0
  89. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/orchestrator.md +0 -0
  90. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/task-runner.md +0 -0
  91. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/voice.md +0 -0
  92. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/roles/worker.md +0 -0
  93. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/safety/__init__.py +0 -0
  94. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/safety/_core.py +0 -0
  95. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/scheduler.py +0 -0
  96. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/search.py +0 -0
  97. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/server.py +0 -0
  98. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-Echo--black.png +0 -0
  99. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-Echo--transparent.png +0 -0
  100. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-Echo.png +0 -0
  101. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-email-banner.png +0 -0
  102. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  103. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  104. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  105. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
  106. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
  107. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
  108. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  109. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
  110. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
  111. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  112. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
  113. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/favicon.png +0 -0
  114. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/android.jpeg +0 -0
  115. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/automaton.jpeg +0 -0
  116. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/bot.jpeg +0 -0
  117. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
  118. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/droid.jpeg +0 -0
  119. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/drone.jpeg +0 -0
  120. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/guardian.jpeg +0 -0
  121. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/mech.jpeg +0 -0
  122. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/probe.jpeg +0 -0
  123. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/robot.jpeg +0 -0
  124. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
  125. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/machines/unit.jpeg +0 -0
  126. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/blob.jpeg +0 -0
  127. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/cloud.jpeg +0 -0
  128. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/crystal.jpeg +0 -0
  129. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
  130. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/flame.jpeg +0 -0
  131. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
  132. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/horned.jpeg +0 -0
  133. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/moon.jpeg +0 -0
  134. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/slime.jpeg +0 -0
  135. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/star.jpeg +0 -0
  136. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
  137. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/projects/winged.jpeg +0 -0
  138. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/bear.jpeg +0 -0
  139. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/cat.jpeg +0 -0
  140. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/crown.jpeg +0 -0
  141. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
  142. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
  143. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
  144. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/deer.jpeg +0 -0
  145. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/drone.jpeg +0 -0
  146. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
  147. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/fox.jpeg +0 -0
  148. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
  149. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/horse.jpeg +0 -0
  150. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/lion.jpeg +0 -0
  151. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
  152. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/robot.jpeg +0 -0
  153. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
  154. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
  155. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/.gitkeep +0 -0
  156. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/artifact-window.js +0 -0
  157. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/command-palette.js +0 -0
  158. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/components/icon-picker.js +0 -0
  159. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/components/list-card.js +0 -0
  160. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/components/type-tag.js +0 -0
  161. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/desktop-manager.js +0 -0
  162. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/desktop.js +0 -0
  163. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/icon-manager.js +0 -0
  164. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/new-project-modal.js +0 -0
  165. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/notifications-panel.js +0 -0
  166. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/safety-shared.js +0 -0
  167. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/safety-window.js +0 -0
  168. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/session-id.js +0 -0
  169. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/session-window.js +0 -0
  170. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  171. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/config-section.js +0 -0
  172. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/machines-section.js +0 -0
  173. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/missions-section.js +0 -0
  174. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/projects-section.js +0 -0
  175. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/safety-section.js +0 -0
  176. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  177. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/services-section.js +0 -0
  178. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  179. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/sidebar.js +0 -0
  180. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/terminal-font-prefs.js +0 -0
  181. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/tile-manager.js +0 -0
  182. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/utils/auto-refresh.js +0 -0
  183. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/static/js/winbox.bundle.min.js +0 -0
  184. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/stt/__init__.py +0 -0
  185. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/stt/base.py +0 -0
  186. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/stt/server_backend.py +0 -0
  187. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/stt/stt_server.py +0 -0
  188. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/stt/whisperkit.py +0 -0
  189. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tasks.py +0 -0
  190. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templates/__init__.py +0 -0
  191. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templates/base.html +0 -0
  192. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templates/desktop.html +0 -0
  193. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templates/email_notification.html +0 -0
  194. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  195. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templates/handoff/theme.css.j2 +0 -0
  196. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templates/tmux.conf +0 -0
  197. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/templating.py +0 -0
  198. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/aws.yaml +0 -0
  199. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/docker.yaml +0 -0
  200. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/gcp.yaml +0 -0
  201. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/gh.yaml +0 -0
  202. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/git.yaml +0 -0
  203. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/gws.yaml +0 -0
  204. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/kubectl.yaml +0 -0
  205. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/npm.yaml +0 -0
  206. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/terraform.yaml +0 -0
  207. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tooldefs/uv.yaml +0 -0
  208. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/__init__.py +0 -0
  209. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/base.py +0 -0
  210. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/engines/__init__.py +0 -0
  211. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/engines/chatterbox.py +0 -0
  212. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/engines/kokoro.py +0 -0
  213. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/engines/qwen_base.py +0 -0
  214. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/engines/qwen_custom.py +0 -0
  215. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/engines/qwen_design.py +0 -0
  216. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/engines/zonos.py +0 -0
  217. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/registry.py +0 -0
  218. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts/runpod_handler.py +0 -0
  219. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tts_server.py +0 -0
  220. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/tunnels.py +0 -0
  221. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/utils/__init__.py +0 -0
  222. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/utils/chunker.py +0 -0
  223. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/utils/file_io.py +0 -0
  224. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/utils/paths.py +0 -0
  225. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/utils/subprocess.py +0 -0
  226. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/validation.py +0 -0
  227. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/voiceclone.py +0 -0
  228. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/voices/darren.wav +0 -0
  229. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/voices/default.wav +0 -0
  230. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/voices/jessica.wav +0 -0
  231. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/voices/lisa.wav +0 -0
  232. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/voices/may.wav +0 -0
  233. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/agentwire/worktree.py +0 -0
  234. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/decisions/obsidian-second-brain.md +0 -0
  235. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/logo.png +0 -0
  236. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/INDEX.md +0 -0
  237. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/architecture.md +0 -0
  238. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/communication/channels.md +0 -0
  239. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/communication/hammerspoon.md +0 -0
  240. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/communication/handoff.md +0 -0
  241. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/concepts.md +0 -0
  242. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/deployment/remote-access.md +0 -0
  243. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/deployment/remote-machines.md +0 -0
  244. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/glossary.md +0 -0
  245. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  246. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/internals/damage-control.md +0 -0
  247. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/internals/portal.md +0 -0
  248. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/internals/shell-escaping.md +0 -0
  249. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/internals/troubleshooting.md +0 -0
  250. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/missions.md +0 -0
  251. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/quickstart.md +0 -0
  252. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  253. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  254. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/sessions/pi.md +0 -0
  255. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/tts/runpod-tts.md +0 -0
  256. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/tts/stt-self-hosted.md +0 -0
  257. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/docs/wiki/tts/tts-self-hosted.md +0 -0
  258. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/pyproject.toml +0 -0
  259. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/requirements-tts.txt +0 -0
  260. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/templates/launchd/dev.agentwire.mission-dispatcher.plist +0 -0
  261. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/templates/launchd/dev.agentwire.mission-feedback-router.plist +0 -0
  262. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/templates/launchd/dev.agentwire.mission-janitor.plist +0 -0
  263. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/conftest.py +0 -0
  264. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/e2e/test_portal_ui.py +0 -0
  265. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/fixtures/sample_agentwire.yml +0 -0
  266. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/fixtures/sample_config.yaml +0 -0
  267. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/fixtures/sample_scheduler.yaml +0 -0
  268. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/integration/test_missions_concurrency.py +0 -0
  269. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/integration/test_missions_lifecycle.py +0 -0
  270. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/integration/test_scheduler_board.py +0 -0
  271. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/integration/test_server_websockets.py +0 -0
  272. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_build_agent_command.py +0 -0
  273. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_channels.py +0 -0
  274. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_cli_commands.py +0 -0
  275. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_cli_output.py +0 -0
  276. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_cli_safety.py +0 -0
  277. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_config.py +0 -0
  278. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_damage_control_hooks.py +0 -0
  279. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_damage_control_sync.py +0 -0
  280. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_file_io.py +0 -0
  281. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_handoff_git_state.py +0 -0
  282. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_handoff_instructions.py +0 -0
  283. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_handoff_parser.py +0 -0
  284. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_handoff_renderer.py +0 -0
  285. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_history.py +0 -0
  286. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_locking.py +0 -0
  287. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_mcp_server.py +0 -0
  288. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_mcp_tools_args.py +0 -0
  289. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_cli.py +0 -0
  290. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_config.py +0 -0
  291. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_dispatcher.py +0 -0
  292. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_eligibility.py +0 -0
  293. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_feedback_router.py +0 -0
  294. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_gc.py +0 -0
  295. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_github.py +0 -0
  296. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_naming.py +0 -0
  297. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_missions_state.py +0 -0
  298. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_overnight_resume_flags.py +0 -0
  299. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_portal_api.py +0 -0
  300. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_project_config.py +0 -0
  301. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_roles.py +0 -0
  302. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_safety_disabled_rules.py +0 -0
  303. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_safety_escape_hatch.py +0 -0
  304. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_safety_kill_switch.py +0 -0
  305. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_safety_mission_worker.py +0 -0
  306. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_scheduler.py +0 -0
  307. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_scheduler_parsing.py +0 -0
  308. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_search.py +0 -0
  309. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_server_async.py +0 -0
  310. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_server_pure.py +0 -0
  311. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_tasks.py +0 -0
  312. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/tests/unit/test_templating.py +0 -0
  313. {agentwire_dev-1.29.2 → agentwire_dev-1.29.3}/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.2
3
+ Version: 1.29.3
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.29.2"
3
+ __version__ = "1.29.3"
@@ -4706,171 +4706,3 @@ body.sidebar-pinned .sidebar-tab {
4706
4706
  }
4707
4707
 
4708
4708
 
4709
- /* =========================================================================
4710
- Pinned Message Panel — floating, draggable, resizable
4711
- ========================================================================= */
4712
-
4713
- /* Pin affordance on chat messages — visible on hover, top-right corner. */
4714
- .chat-message {
4715
- position: relative;
4716
- padding-right: 32px;
4717
- }
4718
-
4719
- .chat-message-pin-btn {
4720
- position: absolute;
4721
- top: 4px;
4722
- right: 4px;
4723
- width: 22px;
4724
- height: 22px;
4725
- padding: 0;
4726
- border: 1px solid var(--chrome-border);
4727
- border-radius: 4px;
4728
- background: var(--chrome);
4729
- color: var(--text-muted);
4730
- font-size: 12px;
4731
- line-height: 1;
4732
- cursor: pointer;
4733
- opacity: 0;
4734
- transition: opacity 120ms ease, color 120ms ease, background 120ms ease;
4735
- }
4736
-
4737
- .chat-message:hover .chat-message-pin-btn,
4738
- .chat-message:focus-within .chat-message-pin-btn,
4739
- .chat-message-pin-btn:focus-visible {
4740
- opacity: 0.9;
4741
- }
4742
-
4743
- .chat-message-pin-btn:hover {
4744
- background: var(--hover);
4745
- color: var(--accent);
4746
- opacity: 1;
4747
- }
4748
-
4749
- .chat-message-pin-btn[data-pinned="true"] {
4750
- opacity: 1;
4751
- color: var(--accent);
4752
- border-color: var(--accent);
4753
- }
4754
-
4755
- /* The floating panel itself. position: fixed keeps it above all winboxes
4756
- regardless of scroll, typing, or which session window is active. */
4757
- .pinned-message-panel {
4758
- position: fixed;
4759
- display: flex;
4760
- flex-direction: column;
4761
- background: var(--chrome);
4762
- color: var(--text);
4763
- border: 1px solid var(--chrome-border);
4764
- border-radius: 8px;
4765
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.55), 0 0 0 1px var(--primary-subtle);
4766
- z-index: 99998;
4767
- min-width: 200px;
4768
- min-height: 140px;
4769
- overflow: hidden;
4770
- user-select: text;
4771
- }
4772
-
4773
- .pinned-message-panel.dragging,
4774
- .pinned-message-panel.resizing {
4775
- user-select: none;
4776
- }
4777
-
4778
- .pinned-message-header {
4779
- display: flex;
4780
- align-items: center;
4781
- gap: 8px;
4782
- padding: 6px 10px;
4783
- background: var(--background);
4784
- border-bottom: 1px solid var(--chrome-border);
4785
- cursor: grab;
4786
- flex-shrink: 0;
4787
- }
4788
-
4789
- .pinned-message-panel.dragging .pinned-message-header {
4790
- cursor: grabbing;
4791
- }
4792
-
4793
- .pinned-message-role {
4794
- font-size: 11px;
4795
- text-transform: uppercase;
4796
- letter-spacing: 0.06em;
4797
- padding: 2px 6px;
4798
- border-radius: 4px;
4799
- background: var(--chrome);
4800
- color: var(--text-muted);
4801
- border: 1px solid var(--chrome-border);
4802
- flex-shrink: 0;
4803
- }
4804
-
4805
- .pinned-message-role[data-role="user"] {
4806
- color: var(--accent);
4807
- border-color: var(--primary-subtle);
4808
- }
4809
-
4810
- .pinned-message-title {
4811
- flex: 1;
4812
- font-size: 12px;
4813
- color: var(--text-muted);
4814
- text-transform: uppercase;
4815
- letter-spacing: 0.08em;
4816
- overflow: hidden;
4817
- white-space: nowrap;
4818
- text-overflow: ellipsis;
4819
- }
4820
-
4821
- .pinned-message-unpin {
4822
- width: 22px;
4823
- height: 22px;
4824
- padding: 0;
4825
- border: 1px solid var(--chrome-border);
4826
- border-radius: 4px;
4827
- background: transparent;
4828
- color: var(--text-muted);
4829
- font-size: 14px;
4830
- line-height: 1;
4831
- cursor: pointer;
4832
- transition: color 120ms ease, background 120ms ease, border-color 120ms ease;
4833
- flex-shrink: 0;
4834
- }
4835
-
4836
- .pinned-message-unpin:hover {
4837
- color: var(--error);
4838
- border-color: var(--error);
4839
- background: var(--hover);
4840
- }
4841
-
4842
- .pinned-message-body {
4843
- flex: 1;
4844
- overflow: auto;
4845
- padding: 10px 12px;
4846
- font-size: 14px;
4847
- line-height: 1.45;
4848
- color: var(--text);
4849
- white-space: pre-wrap;
4850
- word-break: break-word;
4851
- }
4852
-
4853
- /* Corner resize handle — visible on hover. */
4854
- .pinned-message-resize-handle {
4855
- position: absolute;
4856
- right: 0;
4857
- bottom: 0;
4858
- width: 16px;
4859
- height: 16px;
4860
- cursor: nwse-resize;
4861
- opacity: 0;
4862
- transition: opacity 120ms ease;
4863
- /* Diagonal grip lines drawn with two thin gradients. */
4864
- background:
4865
- linear-gradient(135deg, transparent 0 45%, var(--text-muted) 45% 55%, transparent 55% 100%) no-repeat,
4866
- linear-gradient(135deg, transparent 0 70%, var(--text-muted) 70% 80%, transparent 80% 100%) no-repeat;
4867
- background-size: 10px 10px, 6px 6px;
4868
- background-position: bottom 3px right 3px, bottom 3px right 3px;
4869
- }
4870
-
4871
- .pinned-message-panel:hover .pinned-message-resize-handle,
4872
- .pinned-message-panel.resizing .pinned-message-resize-handle {
4873
- opacity: 0.85;
4874
- }
4875
-
4876
-
@@ -11,7 +11,6 @@
11
11
 
12
12
  import { desktop } from '../desktop-manager.js';
13
13
  import { sessionIcons } from '../icon-manager.js';
14
- import { pinnedMessage } from '../pinned-message.js';
15
14
 
16
15
  /** @type {ChatWindow|null} */
17
16
  let chatWindowInstance = null;
@@ -446,15 +445,9 @@ class ChatWindow {
446
445
  const msgEl = document.createElement('div');
447
446
  msgEl.className = `chat-message ${role}`;
448
447
  msgEl.innerHTML = `
449
- <button class="chat-message-pin-btn" title="Pin this message" aria-label="Pin message">📌</button>
450
448
  <div class="message-text">${this._escapeHtml(text)}</div>
451
449
  <div class="timestamp">${message.timestamp.toLocaleTimeString()}</div>
452
450
  `;
453
- const pinBtn = msgEl.querySelector('.chat-message-pin-btn');
454
- pinBtn.addEventListener('click', (e) => {
455
- e.stopPropagation();
456
- pinnedMessage.pin({ role, text });
457
- });
458
451
  this.messagesEl.appendChild(msgEl);
459
452
  this.messagesEl.scrollTop = this.messagesEl.scrollHeight;
460
453
  }
@@ -1,232 +0,0 @@
1
- /**
2
- * Pinned Message Panel — floating, draggable, resizable panel that displays a
3
- * pinned message body. Anchored to document.body so it survives switching
4
- * between conversation windows / sessions.
5
- *
6
- * v1 scope: one pinned panel at a time. Pinning a new message replaces the
7
- * existing one. State is in-memory only (per portal session).
8
- */
9
-
10
- const MIN_WIDTH = 200;
11
- const MIN_HEIGHT = 140;
12
- const DEFAULT_WIDTH = 320;
13
- const DEFAULT_HEIGHT = 220;
14
- const EDGE_PADDING = 8;
15
-
16
- class PinnedMessagePanel {
17
- constructor() {
18
- this.panel = null;
19
- this.headerEl = null;
20
- this.bodyEl = null;
21
- this.resizeHandleEl = null;
22
- this.roleLabelEl = null;
23
- this.unpinBtnEl = null;
24
-
25
- // Current pinned message ({ role, text, html })
26
- this.current = null;
27
-
28
- // Geometry (px). Initial null -> placed near top-right on first pin.
29
- this.x = null;
30
- this.y = null;
31
- this.width = DEFAULT_WIDTH;
32
- this.height = DEFAULT_HEIGHT;
33
-
34
- // Drag state
35
- this._dragging = false;
36
- this._dragOffsetX = 0;
37
- this._dragOffsetY = 0;
38
- // Resize state
39
- this._resizing = false;
40
- this._resizeStartX = 0;
41
- this._resizeStartY = 0;
42
- this._resizeStartWidth = 0;
43
- this._resizeStartHeight = 0;
44
-
45
- this._onPointerMove = this._onPointerMove.bind(this);
46
- this._onPointerUp = this._onPointerUp.bind(this);
47
- this._onViewportResize = this._onViewportResize.bind(this);
48
- }
49
-
50
- /**
51
- * Pin a message. If a panel is already shown, replaces its content
52
- * while keeping position/size.
53
- * @param {{ role?: string, text?: string, html?: string }} message
54
- */
55
- pin(message) {
56
- if (!message) return;
57
- this.current = {
58
- role: message.role || 'message',
59
- text: message.text || '',
60
- html: message.html || null,
61
- };
62
-
63
- if (!this.panel) {
64
- this._createPanel();
65
- this._placeInitial();
66
- }
67
-
68
- this._renderContent();
69
- this.panel.style.display = 'flex';
70
- this._applyGeometry();
71
- }
72
-
73
- /**
74
- * Unpin and remove the panel from the DOM.
75
- */
76
- unpin() {
77
- if (!this.panel) return;
78
- this.panel.remove();
79
- this.panel = null;
80
- this.headerEl = null;
81
- this.bodyEl = null;
82
- this.resizeHandleEl = null;
83
- this.roleLabelEl = null;
84
- this.unpinBtnEl = null;
85
- this.current = null;
86
- window.removeEventListener('resize', this._onViewportResize);
87
- }
88
-
89
- /**
90
- * True if a message is currently pinned.
91
- */
92
- isPinned() {
93
- return this.current !== null;
94
- }
95
-
96
- _createPanel() {
97
- const panel = document.createElement('div');
98
- panel.className = 'pinned-message-panel';
99
- panel.setAttribute('role', 'dialog');
100
- panel.setAttribute('aria-label', 'Pinned message');
101
- panel.innerHTML = `
102
- <div class="pinned-message-header" data-drag-handle>
103
- <span class="pinned-message-role"></span>
104
- <span class="pinned-message-title">Pinned</span>
105
- <button class="pinned-message-unpin" title="Unpin (remove)" aria-label="Unpin">×</button>
106
- </div>
107
- <div class="pinned-message-body"></div>
108
- <div class="pinned-message-resize-handle" title="Drag to resize" aria-hidden="true"></div>
109
- `;
110
-
111
- this.panel = panel;
112
- this.headerEl = panel.querySelector('.pinned-message-header');
113
- this.bodyEl = panel.querySelector('.pinned-message-body');
114
- this.resizeHandleEl = panel.querySelector('.pinned-message-resize-handle');
115
- this.roleLabelEl = panel.querySelector('.pinned-message-role');
116
- this.unpinBtnEl = panel.querySelector('.pinned-message-unpin');
117
-
118
- this.unpinBtnEl.addEventListener('click', (e) => {
119
- e.stopPropagation();
120
- this.unpin();
121
- });
122
-
123
- this.headerEl.addEventListener('pointerdown', (e) => this._onDragStart(e));
124
- this.resizeHandleEl.addEventListener('pointerdown', (e) => this._onResizeStart(e));
125
-
126
- window.addEventListener('resize', this._onViewportResize);
127
-
128
- document.body.appendChild(panel);
129
- }
130
-
131
- _renderContent() {
132
- if (!this.current) return;
133
- this.roleLabelEl.textContent = this.current.role || 'message';
134
- this.roleLabelEl.dataset.role = this.current.role || 'message';
135
-
136
- if (this.current.html) {
137
- this.bodyEl.innerHTML = this.current.html;
138
- } else {
139
- this.bodyEl.textContent = this.current.text || '';
140
- }
141
- }
142
-
143
- _placeInitial() {
144
- if (this.x !== null && this.y !== null) return;
145
- const viewportW = window.innerWidth;
146
- const viewportH = window.innerHeight;
147
- // Default position: upper-right inside the viewport.
148
- this.x = Math.max(EDGE_PADDING, viewportW - this.width - 24);
149
- this.y = 24;
150
- this._clampGeometry(viewportW, viewportH);
151
- }
152
-
153
- _applyGeometry() {
154
- if (!this.panel) return;
155
- this.panel.style.left = `${this.x}px`;
156
- this.panel.style.top = `${this.y}px`;
157
- this.panel.style.width = `${this.width}px`;
158
- this.panel.style.height = `${this.height}px`;
159
- }
160
-
161
- _clampGeometry(viewportW, viewportH) {
162
- const w = viewportW ?? window.innerWidth;
163
- const h = viewportH ?? window.innerHeight;
164
- this.width = Math.max(MIN_WIDTH, Math.min(this.width, w - EDGE_PADDING * 2));
165
- this.height = Math.max(MIN_HEIGHT, Math.min(this.height, h - EDGE_PADDING * 2));
166
- this.x = Math.max(EDGE_PADDING, Math.min(this.x, w - this.width - EDGE_PADDING));
167
- this.y = Math.max(EDGE_PADDING, Math.min(this.y, h - this.height - EDGE_PADDING));
168
- }
169
-
170
- _onDragStart(e) {
171
- // Ignore drags that start on the unpin button or other interactive children
172
- if (e.target.closest('.pinned-message-unpin')) return;
173
- if (!this.panel) return;
174
- this._dragging = true;
175
- this._dragOffsetX = e.clientX - this.x;
176
- this._dragOffsetY = e.clientY - this.y;
177
- this.panel.classList.add('dragging');
178
- this.headerEl.setPointerCapture?.(e.pointerId);
179
- document.addEventListener('pointermove', this._onPointerMove);
180
- document.addEventListener('pointerup', this._onPointerUp);
181
- e.preventDefault();
182
- }
183
-
184
- _onResizeStart(e) {
185
- if (!this.panel) return;
186
- this._resizing = true;
187
- this._resizeStartX = e.clientX;
188
- this._resizeStartY = e.clientY;
189
- this._resizeStartWidth = this.width;
190
- this._resizeStartHeight = this.height;
191
- this.panel.classList.add('resizing');
192
- this.resizeHandleEl.setPointerCapture?.(e.pointerId);
193
- document.addEventListener('pointermove', this._onPointerMove);
194
- document.addEventListener('pointerup', this._onPointerUp);
195
- e.preventDefault();
196
- e.stopPropagation();
197
- }
198
-
199
- _onPointerMove(e) {
200
- if (this._dragging) {
201
- this.x = e.clientX - this._dragOffsetX;
202
- this.y = e.clientY - this._dragOffsetY;
203
- this._clampGeometry();
204
- this._applyGeometry();
205
- } else if (this._resizing) {
206
- const dx = e.clientX - this._resizeStartX;
207
- const dy = e.clientY - this._resizeStartY;
208
- this.width = this._resizeStartWidth + dx;
209
- this.height = this._resizeStartHeight + dy;
210
- this._clampGeometry();
211
- this._applyGeometry();
212
- }
213
- }
214
-
215
- _onPointerUp() {
216
- if (this._dragging || this._resizing) {
217
- this._dragging = false;
218
- this._resizing = false;
219
- this.panel?.classList.remove('dragging', 'resizing');
220
- document.removeEventListener('pointermove', this._onPointerMove);
221
- document.removeEventListener('pointerup', this._onPointerUp);
222
- }
223
- }
224
-
225
- _onViewportResize() {
226
- if (!this.panel) return;
227
- this._clampGeometry();
228
- this._applyGeometry();
229
- }
230
- }
231
-
232
- export const pinnedMessage = new PinnedMessagePanel();
File without changes
File without changes
File without changes