agentwire-dev 1.77.2__tar.gz → 1.77.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 (716) hide show
  1. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/workflows/pytest.yml +2 -2
  2. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/workflows/security.yml +3 -5
  3. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/workflows/tts-smoke.yml +2 -2
  4. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/PKG-INFO +2 -2
  5. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/RELEASING.md +9 -12
  6. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/__init__.py +1 -1
  7. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/core.py +91 -2
  8. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/inbox.py +31 -0
  9. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/msg_cli.py +7 -0
  10. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/notify_cli.py +7 -1
  11. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/pane_cli.py +3 -0
  12. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/reviewer-worktree.md +2 -0
  13. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/reviewer.md +2 -0
  14. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/worker-worktree.md +2 -0
  15. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/worker.md +2 -0
  16. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/provenance.py +15 -20
  17. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/session_cli.py +35 -1
  18. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/system_cli.py +6 -7
  19. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/internals/damage-control.md +28 -39
  20. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/voice/tts-self-hosted.md +1 -1
  21. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/pyproject.toml +6 -12
  22. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_agentwire_rules_layer.py +2 -2
  23. agentwire_dev-1.77.3/tests/unit/test_damage_control_pin.py +50 -0
  24. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_hook_fail_closed_matrix.py +3 -2
  25. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_hook_python_floor.py +8 -6
  26. agentwire_dev-1.77.3/tests/unit/test_live_target_1261.py +148 -0
  27. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_msg_cli.py +9 -1
  28. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_notify_cli.py +1 -0
  29. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_rebuild_guard.py +18 -29
  30. agentwire_dev-1.77.3/tests/unit/test_report_back_path_1259.py +104 -0
  31. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_rules_json_in_sync.py +5 -5
  32. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safety_deployment.py +7 -6
  33. agentwire_dev-1.77.2/packages/damage-control-dev/README.md +0 -19
  34. agentwire_dev-1.77.2/packages/damage-control-dev/docs/coverage.md +0 -21
  35. agentwire_dev-1.77.2/packages/damage-control-dev/docs/extending.md +0 -75
  36. agentwire_dev-1.77.2/packages/damage-control-dev/docs/rule-authoring.md +0 -428
  37. agentwire_dev-1.77.2/packages/damage-control-dev/docs/threat-model.md +0 -372
  38. agentwire_dev-1.77.2/packages/damage-control-dev/pyproject.toml +0 -40
  39. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/__init__.py +0 -9
  40. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/__main__.py +0 -7
  41. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/adapter.py +0 -179
  42. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/audit.py +0 -432
  43. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/breakglass.py +0 -155
  44. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/claude_code.py +0 -148
  45. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/cli.py +0 -173
  46. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/engine.py +0 -10749
  47. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/groups.py +0 -114
  48. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/harness_config.py +0 -205
  49. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/hook.py +0 -54
  50. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/install.py +0 -618
  51. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/packs.py +0 -219
  52. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/policy.py +0 -323
  53. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/profile.py +0 -177
  54. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/aws.json +0 -85
  55. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/aws.yaml +0 -76
  56. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/cloud-hosting.json +0 -162
  57. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/cloud-hosting.yaml +0 -163
  58. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/containers.json +0 -67
  59. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/containers.yaml +0 -69
  60. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/control-plane.json +0 -7
  61. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/control-plane.yaml +0 -21
  62. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/core.json +0 -347
  63. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/core.yaml +0 -461
  64. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/databases.json +0 -117
  65. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/databases.yaml +0 -123
  66. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/firebase.json +0 -34
  67. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/firebase.yaml +0 -30
  68. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/gcp.json +0 -60
  69. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/gcp.yaml +0 -57
  70. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/git.json +0 -119
  71. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/git.yaml +0 -120
  72. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/infrastructure.json +0 -69
  73. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/infrastructure.yaml +0 -66
  74. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/mcp-tools.json +0 -11
  75. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/mcp-tools.yaml +0 -47
  76. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/outbound.json +0 -40
  77. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/outbound.yaml +0 -58
  78. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/payloads.json +0 -120
  79. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/payloads.yaml +0 -155
  80. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/publish.json +0 -46
  81. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/publish.yaml +0 -46
  82. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/registry.json +0 -10
  83. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/registry.yaml +0 -11
  84. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/remote.json +0 -31
  85. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/remote.yaml +0 -53
  86. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/tmux.json +0 -17
  87. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/rules/tmux.yaml +0 -16
  88. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/ruleset.py +0 -94
  89. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/aws.json +0 -140
  90. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/aws.yaml +0 -119
  91. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/docker.json +0 -146
  92. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/docker.yaml +0 -123
  93. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/gcp.json +0 -186
  94. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/gcp.yaml +0 -158
  95. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/gh.json +0 -172
  96. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/gh.yaml +0 -145
  97. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/git.json +0 -166
  98. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/git.yaml +0 -143
  99. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/kubectl.json +0 -101
  100. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/kubectl.yaml +0 -85
  101. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/npm.json +0 -77
  102. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/npm.yaml +0 -65
  103. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/terraform.json +0 -68
  104. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/terraform.yaml +0 -57
  105. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/uv.json +0 -112
  106. agentwire_dev-1.77.2/packages/damage-control-dev/src/damage_control/tooldefs/uv.yaml +0 -97
  107. agentwire_dev-1.77.2/packages/damage-control-dev/tools/build_rules_json.py +0 -72
  108. agentwire_dev-1.77.2/packages/damage-control-dev/tools/coverage_matrix.py +0 -74
  109. agentwire_dev-1.77.2/tests/unit/test_coverage_matrix.py +0 -25
  110. agentwire_dev-1.77.2/tests/unit/test_damage_control_pin.py +0 -33
  111. agentwire_dev-1.77.2/tests/unit/test_engine_standalone.py +0 -140
  112. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.agentwire.yml.example +0 -0
  113. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.claude/commands/handoff.md +0 -0
  114. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.claude/skills/wiki/SKILL.md +0 -0
  115. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/FUNDING.yml +0 -0
  116. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  117. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  118. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/ISSUE_TEMPLATE/question.md +0 -0
  119. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  120. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.github/workflows/ruff.yml +0 -0
  121. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/.gitignore +0 -0
  122. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/AGENTS.md +0 -0
  123. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/CODE_OF_CONDUCT.md +0 -0
  124. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/CONTRIBUTING.md +0 -0
  125. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/Dockerfile.local +0 -0
  126. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/LICENSE +0 -0
  127. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/README.md +0 -0
  128. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/SECURITY.md +0 -0
  129. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/SPONSORS.md +0 -0
  130. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/__main__.py +0 -0
  131. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/agents/__init__.py +0 -0
  132. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/agents/base.py +0 -0
  133. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/agents/tmux.py +0 -0
  134. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/auth_expired.py +0 -0
  135. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/background_tasks.py +0 -0
  136. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/beta.py +0 -0
  137. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/cached_status.py +0 -0
  138. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/channels/__init__.py +0 -0
  139. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/channels/base.py +0 -0
  140. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/channels/email.py +0 -0
  141. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/channels/push.py +0 -0
  142. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/channels/quo.py +0 -0
  143. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/channels_cli.py +0 -0
  144. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/chrome_tabs.py +0 -0
  145. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/claude_settings.py +0 -0
  146. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/cohort.py +0 -0
  147. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/completion.py +0 -0
  148. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/config.py +0 -0
  149. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/config_cli.py +0 -0
  150. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/council/__init__.py +0 -0
  151. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/council/cli.py +0 -0
  152. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/council/inbox.py +0 -0
  153. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/council/minutes.py +0 -0
  154. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/council/state.py +0 -0
  155. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/council/view.py +0 -0
  156. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/devices.py +0 -0
  157. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/diff_cli.py +0 -0
  158. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/doctor_cli.py +0 -0
  159. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/doctor_voice.py +0 -0
  160. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/ensure_cli.py +0 -0
  161. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/env_loader.py +0 -0
  162. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/fetch.py +0 -0
  163. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/handoff/__init__.py +0 -0
  164. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/handoff/git_state.py +0 -0
  165. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/handoff/instructions.py +0 -0
  166. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/handoff/parser.py +0 -0
  167. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/handoff/renderer.py +0 -0
  168. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/handoff/schema.py +0 -0
  169. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/handoff_cli.py +0 -0
  170. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/history.py +0 -0
  171. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/history_cli.py +0 -0
  172. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/history_migrate.py +0 -0
  173. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/hooks/__init__.py +0 -0
  174. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/hooks/agentwire-permission.sh +0 -0
  175. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/hooks/idle-handler.sh +0 -0
  176. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/hooks/outcome_logger.py +0 -0
  177. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/hooks/queue-processor.sh +0 -0
  178. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/hooks_cli.py +0 -0
  179. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/limits_cli.py +0 -0
  180. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/listen.py +0 -0
  181. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/locking.py +0 -0
  182. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/machine_cli.py +0 -0
  183. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_channels.py +0 -0
  184. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_chrome.py +0 -0
  185. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_cli.py +0 -0
  186. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_core.py +0 -0
  187. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_council.py +0 -0
  188. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_desktop.py +0 -0
  189. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_handoff.py +0 -0
  190. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_history.py +0 -0
  191. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_listen.py +0 -0
  192. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_lock.py +0 -0
  193. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_machine.py +0 -0
  194. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_msg.py +0 -0
  195. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_notify.py +0 -0
  196. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_pane.py +0 -0
  197. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_projects.py +0 -0
  198. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_scheduler.py +0 -0
  199. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_scratchpad.py +0 -0
  200. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_server.py +0 -0
  201. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_services.py +0 -0
  202. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_session.py +0 -0
  203. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_status.py +0 -0
  204. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_task.py +0 -0
  205. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_tunnels.py +0 -0
  206. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_voice.py +0 -0
  207. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_wiki.py +0 -0
  208. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/mcp_worktree.py +0 -0
  209. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/network.py +0 -0
  210. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/onboarding.py +0 -0
  211. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/palette_cli.py +0 -0
  212. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/pane_manager.py +0 -0
  213. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/playback_lane.py +0 -0
  214. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/portal_cli.py +0 -0
  215. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/project_config.py +0 -0
  216. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/projects.py +0 -0
  217. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/prompt_router.py +0 -0
  218. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/prompts_cli.py +0 -0
  219. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/push_cli.py +0 -0
  220. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/push_store.py +0 -0
  221. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/repo_cli.py +0 -0
  222. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/research.py +0 -0
  223. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/restart_cli.py +0 -0
  224. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/role_prompts.py +0 -0
  225. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/__init__.py +0 -0
  226. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/agentwire.md +0 -0
  227. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/anchor.md +0 -0
  228. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/chatbot.md +0 -0
  229. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/contributor.md +0 -0
  230. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/correspondent.md +0 -0
  231. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-brain.md +0 -0
  232. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-conscience.md +0 -0
  233. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-critic.md +0 -0
  234. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-devils-advocate.md +0 -0
  235. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-gut.md +0 -0
  236. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-historian.md +0 -0
  237. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-member.md +0 -0
  238. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/council-orchestrator.md +0 -0
  239. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/init.md +0 -0
  240. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/notifications.md +0 -0
  241. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/orchestrator.md +0 -0
  242. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/shared-checkout.md +0 -0
  243. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/soul.md +0 -0
  244. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/task-runner.md +0 -0
  245. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles/voice.md +0 -0
  246. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/roles_cli.py +0 -0
  247. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/__init__.py +0 -0
  248. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/artifacts.py +0 -0
  249. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/config.py +0 -0
  250. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/council.py +0 -0
  251. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/desktop.py +0 -0
  252. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/history.py +0 -0
  253. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/machines.py +0 -0
  254. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/notify.py +0 -0
  255. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/palette.py +0 -0
  256. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/permission.py +0 -0
  257. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/projects.py +0 -0
  258. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/push.py +0 -0
  259. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/safety.py +0 -0
  260. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/scheduler.py +0 -0
  261. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/scratchpad.py +0 -0
  262. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/sessions.py +0 -0
  263. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/sessions_admin.py +0 -0
  264. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/routes/voice.py +0 -0
  265. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/__init__.py +0 -0
  266. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/audit.py +0 -0
  267. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/lint.py +0 -0
  268. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/residuals.py +0 -0
  269. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rule_baselines.json +0 -0
  270. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-control-plane.json +0 -0
  271. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-control-plane.yaml +0 -0
  272. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-core.json +0 -0
  273. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-core.yaml +0 -0
  274. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-mcp-tools.json +0 -0
  275. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-mcp-tools.yaml +0 -0
  276. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-outbound.json +0 -0
  277. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire-outbound.yaml +0 -0
  278. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire.json +0 -0
  279. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/rules/agentwire.yaml +0 -0
  280. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety/suggest.py +0 -0
  281. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety_cli.py +0 -0
  282. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety_commands.py +0 -0
  283. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety_ext.py +0 -0
  284. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety_migrate.py +0 -0
  285. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety_notify.py +0 -0
  286. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/safety_packs_cli.py +0 -0
  287. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/__init__.py +0 -0
  288. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/dispatch.py +0 -0
  289. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/gates.py +0 -0
  290. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/loop.py +0 -0
  291. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/models.py +0 -0
  292. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/report.py +0 -0
  293. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/schedule.py +0 -0
  294. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/state.py +0 -0
  295. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler/zombie.py +0 -0
  296. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scheduler_cli.py +0 -0
  297. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/scratchpad.py +0 -0
  298. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/security.py +0 -0
  299. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/send_cli.py +0 -0
  300. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/sent_ledger.py +0 -0
  301. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/server.py +0 -0
  302. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/services.py +0 -0
  303. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/session_context.py +0 -0
  304. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/session_ready.py +0 -0
  305. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/session_state.py +0 -0
  306. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/ssh.py +0 -0
  307. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  308. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  309. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  310. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  311. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  312. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/announcements.json +0 -0
  313. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/apple-touch-icon.png +0 -0
  314. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/css/desktop.css +0 -0
  315. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/css/mobile.css +0 -0
  316. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/favicon-32.png +0 -0
  317. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/favicon-64.png +0 -0
  318. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/bear.webp +0 -0
  319. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/cat.webp +0 -0
  320. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/crown.webp +0 -0
  321. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
  322. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
  323. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
  324. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/deer.webp +0 -0
  325. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/drone.webp +0 -0
  326. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/eagle.webp +0 -0
  327. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/fox.webp +0 -0
  328. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/hawk.webp +0 -0
  329. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/horse.webp +0 -0
  330. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/lion.webp +0 -0
  331. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/rabbit.webp +0 -0
  332. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/robot.webp +0 -0
  333. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/tiger.webp +0 -0
  334. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/icons/sessions/wolf.webp +0 -0
  335. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/img/icon-192.png +0 -0
  336. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/img/icon-512.png +0 -0
  337. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/.gitkeep +0 -0
  338. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/announcement-modal.js +0 -0
  339. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/api.js +0 -0
  340. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/artifact-window.js +0 -0
  341. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/card-terminal.js +0 -0
  342. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/collage.js +0 -0
  343. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/command-palette.js +0 -0
  344. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/council-window.js +0 -0
  345. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/dead-key-residue.js +0 -0
  346. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/desktop-manager.js +0 -0
  347. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/desktop.js +0 -0
  348. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/help-modal.js +0 -0
  349. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/hotkeys.js +0 -0
  350. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/icon-manager.js +0 -0
  351. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/lineage.js +0 -0
  352. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/mobile.js +0 -0
  353. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/notification-prefs.js +0 -0
  354. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/notifications-panel.js +0 -0
  355. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/ptt.js +0 -0
  356. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/push-client.js +0 -0
  357. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/review-window.js +0 -0
  358. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/safety-shared.js +0 -0
  359. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/safety-window.js +0 -0
  360. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/scratchpad.js +0 -0
  361. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/service-classification.js +0 -0
  362. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/session-hud-controller.js +0 -0
  363. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/session-hud-notices.js +0 -0
  364. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/session-hud-spawn.js +0 -0
  365. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/session-hud.js +0 -0
  366. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/session-id.js +0 -0
  367. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/session-window.js +0 -0
  368. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/shortcuts.js +0 -0
  369. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  370. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/config-section.js +0 -0
  371. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/council-section.js +0 -0
  372. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/machines-section.js +0 -0
  373. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/projects-section.js +0 -0
  374. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/safety-section.js +0 -0
  375. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  376. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/services-section.js +0 -0
  377. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  378. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/sidebar.js +0 -0
  379. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/spawn-ghost.js +0 -0
  380. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/taskbar-persist.js +0 -0
  381. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/terminal-font-prefs.js +0 -0
  382. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/terminal-pane.js +0 -0
  383. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/tile-manager.js +0 -0
  384. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/toast.js +0 -0
  385. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/token-modal.js +0 -0
  386. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/topology-render.js +0 -0
  387. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/utils/ansi.js +0 -0
  388. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/utils/rich-text.js +0 -0
  389. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/utils/swipe.js +0 -0
  390. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/voice/audio-unlock.js +0 -0
  391. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/voice/autosend-prefs.js +0 -0
  392. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/voice/browser-stt.js +0 -0
  393. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/voice/browser-tts.js +0 -0
  394. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/voice/jargon.js +0 -0
  395. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/voice/prompt.js +0 -0
  396. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/winbox.bundle.min.js +0 -0
  397. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/js/workspace-window.js +0 -0
  398. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/manifest.webmanifest +0 -0
  399. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/service-worker.js +0 -0
  400. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/static/topology-harness.html +0 -0
  401. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/stt/__init__.py +0 -0
  402. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/stt/base.py +0 -0
  403. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/stt/cloud.py +0 -0
  404. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/stt/engine.py +0 -0
  405. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/stt/local.py +0 -0
  406. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/stt/server_backend.py +0 -0
  407. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/stt/stt_server.py +0 -0
  408. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tabs_cli.py +0 -0
  409. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tasks.py +0 -0
  410. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tasks_cli.py +0 -0
  411. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/__init__.py +0 -0
  412. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/base.html +0 -0
  413. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/council/minutes.html.j2 +0 -0
  414. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/desktop.html +0 -0
  415. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/email_notification.html +0 -0
  416. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  417. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/handoff/theme.css.j2 +0 -0
  418. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/mobile.html +0 -0
  419. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/pair.html +0 -0
  420. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/statusline.sh +0 -0
  421. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templates/tmux.conf +0 -0
  422. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/templating.py +0 -0
  423. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/__init__.py +0 -0
  424. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/audio.py +0 -0
  425. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/base.py +0 -0
  426. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/engines/__init__.py +0 -0
  427. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/engines/chatterbox.py +0 -0
  428. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/engines/kokoro.py +0 -0
  429. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/engines/zonos.py +0 -0
  430. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/kokoro_server.py +0 -0
  431. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/local.py +0 -0
  432. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts/registry.py +0 -0
  433. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts_cli.py +0 -0
  434. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tts_server.py +0 -0
  435. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tunnels.py +0 -0
  436. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/tunnels_cli.py +0 -0
  437. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/usage_limit.py +0 -0
  438. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/utils/__init__.py +0 -0
  439. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/utils/chunker.py +0 -0
  440. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/utils/event_log.py +0 -0
  441. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/utils/file_io.py +0 -0
  442. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/utils/paths.py +0 -0
  443. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/utils/speech.py +0 -0
  444. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/utils/subprocess.py +0 -0
  445. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/validation.py +0 -0
  446. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/voice_status.py +0 -0
  447. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/wait_cli.py +0 -0
  448. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/wiki.py +0 -0
  449. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/wiki_audit.py +0 -0
  450. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/wiki_cli.py +0 -0
  451. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/worktree.py +0 -0
  452. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/worktree_cli.py +0 -0
  453. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/agentwire/worktree_registry.py +0 -0
  454. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/cases/bypass.yaml +0 -0
  455. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/cases/control_plane.yaml +0 -0
  456. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/cases/path_spelling.yaml +0 -0
  457. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/cases/relative_paths.yaml +0 -0
  458. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/golden/effective_rules.json +0 -0
  459. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/golden/harvested.json +0 -0
  460. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/golden/rule_ids.json +0 -0
  461. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/golden/snapshot.json +0 -0
  462. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/corpus/schema.json +0 -0
  463. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/decisions/obsidian-second-brain.md +0 -0
  464. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/design/session-card-fields.md +0 -0
  465. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/design/session-card-recommendation.md +0 -0
  466. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/logo.png +0 -0
  467. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/INDEX.md +0 -0
  468. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/architecture.md +0 -0
  469. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/auth-expired.md +0 -0
  470. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/briefing-mode.md +0 -0
  471. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/communication/channels.md +0 -0
  472. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/communication/hammerspoon.md +0 -0
  473. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/communication/handoff.md +0 -0
  474. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/concepts.md +0 -0
  475. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/council.md +0 -0
  476. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/deployment/remote-access.md +0 -0
  477. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/deployment/remote-machines.md +0 -0
  478. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/glossary.md +0 -0
  479. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  480. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/internals/parallel-refactor.md +0 -0
  481. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/internals/portal.md +0 -0
  482. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/internals/session-topology.md +0 -0
  483. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/internals/shell-escaping.md +0 -0
  484. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/internals/troubleshooting.md +0 -0
  485. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/internals/window-collage.md +0 -0
  486. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/quickstart.md +0 -0
  487. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
  488. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
  489. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  490. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/security/damage-control-hardening.md +0 -0
  491. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/security/pip-audit.md +0 -0
  492. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/security/remote-access-hardening.md +0 -0
  493. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/security/secrets.md +0 -0
  494. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/services.md +0 -0
  495. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  496. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/conversation-identity.md +0 -0
  497. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/fan-out-cohorts.md +0 -0
  498. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/heal-line-count-cliff.md +0 -0
  499. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/helper-sessions.md +0 -0
  500. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/messaging.md +0 -0
  501. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/prompt-routing.md +0 -0
  502. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/window-sizing.md +0 -0
  503. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/sessions/worktree-sessions.md +0 -0
  504. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/usage-limit-recovery.md +0 -0
  505. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/voice/shim-contract.md +0 -0
  506. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/voice/stt-cloud.md +0 -0
  507. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/docs/wiki/voice/stt-self-hosted.md +0 -0
  508. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/conftest.py +0 -0
  509. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/corpus_runner.py +0 -0
  510. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/e2e/test_portal_ui.py +0 -0
  511. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/audio_unlock_harness.mjs +0 -0
  512. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_30_shell.txt +0 -0
  513. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_agent.txt +0 -0
  514. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_done.txt +0 -0
  515. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_interrupted.txt +0 -0
  516. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_monitor.txt +0 -0
  517. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_quoted_footer.txt +0 -0
  518. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_second_notice.txt +0 -0
  519. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_shell.txt +0 -0
  520. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/pane_80_shell_and_monitor.txt +0 -0
  521. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/transcript_bash_done.jsonl +0 -0
  522. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/transcript_bash_pending.jsonl +0 -0
  523. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/transcript_monitor_done.jsonl +0 -0
  524. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/background_tasks/transcript_monitor_events.jsonl +0 -0
  525. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/dc_msg_body_quoting_carriers.txt +0 -0
  526. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/hotkeys_harness.mjs +0 -0
  527. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/sample_agentwire.yml +0 -0
  528. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/sample_config.yaml +0 -0
  529. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/sample_scheduler.yaml +0 -0
  530. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/session_hud_detent_harness.mjs +0 -0
  531. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/taskbar_persist_harness.mjs +0 -0
  532. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/fixtures/topology_expand_harness.mjs +0 -0
  533. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/home_guard.py +0 -0
  534. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/integration/test_council_portal.py +0 -0
  535. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/integration/test_scheduler_board.py +0 -0
  536. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/integration/test_send_verified_tmux.py +0 -0
  537. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/integration/test_server_websockets.py +0 -0
  538. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/integration/test_tmux_name_rewrite.py +0 -0
  539. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/integration/test_worktree_cmd.py +0 -0
  540. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_announcements.py +0 -0
  541. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_audio_unlock_js.py +0 -0
  542. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_audit_attribution.py +0 -0
  543. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_audit_outcomes.py +0 -0
  544. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_auth_expired.py +0 -0
  545. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_auth_expired_dispatch.py +0 -0
  546. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_background_tasks.py +0 -0
  547. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_background_tasks_review.py +0 -0
  548. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_beta_flag.py +0 -0
  549. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_block_rows_carry_an_id.py +0 -0
  550. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_brace_expansion_zero_access.py +0 -0
  551. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_breakglass.py +0 -0
  552. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_buddy_removal_keeps.py +0 -0
  553. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_build_agent_command.py +0 -0
  554. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_channels.py +0 -0
  555. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_chrome_tabs.py +0 -0
  556. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_claude_settings.py +0 -0
  557. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_cli_commands.py +0 -0
  558. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_cli_output.py +0 -0
  559. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_cli_smoke.py +0 -0
  560. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_cli_stderr_clean.py +0 -0
  561. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_cohort.py +0 -0
  562. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_config.py +0 -0
  563. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_config_cli.py +0 -0
  564. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_control_plane_protection.py +0 -0
  565. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_corpus.py +0 -0
  566. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_council_cli.py +0 -0
  567. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_council_inbox.py +0 -0
  568. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_council_minutes.py +0 -0
  569. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_council_state.py +0 -0
  570. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_council_view.py +0 -0
  571. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_damage_control_bypass.py +0 -0
  572. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_damage_control_delete_recursive.py +0 -0
  573. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_damage_control_hooks.py +0 -0
  574. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_dangling_worktrees.py +0 -0
  575. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_dc_install.py +0 -0
  576. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_dc_policy_packs.py +0 -0
  577. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_dc_profile_isolation.py +0 -0
  578. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_devices.py +0 -0
  579. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_diff_cli.py +0 -0
  580. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_doctor_orphaned_history.py +0 -0
  581. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_doctor_scheduler_staleness.py +0 -0
  582. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_doctor_secrets_perms.py +0 -0
  583. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_doctor_task_migration.py +0 -0
  584. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_doctor_voice.py +0 -0
  585. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_ensure_shared_dir.py +0 -0
  586. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_ensure_verified_prompt.py +0 -0
  587. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_env_loader.py +0 -0
  588. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_event_log.py +0 -0
  589. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_extension_points.py +0 -0
  590. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_golden_snapshot.py +0 -0
  591. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_guarded_launch_command.py +0 -0
  592. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_handoff_git_state.py +0 -0
  593. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_handoff_instructions.py +0 -0
  594. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_handoff_parser.py +0 -0
  595. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_handoff_renderer.py +0 -0
  596. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_helper_session.py +0 -0
  597. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_heredoc_marker_liveness.py +0 -0
  598. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_history.py +0 -0
  599. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_history_migrate.py +0 -0
  600. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_history_migrate_cli.py +0 -0
  601. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_history_resume_name.py +0 -0
  602. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_hook_fail_closed.py +0 -0
  603. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_hook_link_guard.py +0 -0
  604. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_hook_subprocess.py +0 -0
  605. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_hooks_install.py +0 -0
  606. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_hotkeys_js.py +0 -0
  607. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_idle_handler.py +0 -0
  608. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_idle_nag.py +0 -0
  609. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_inbox.py +0 -0
  610. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_init_command.py +0 -0
  611. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_install_parity.py +0 -0
  612. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_launch_line_reentry.py +0 -0
  613. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_launch_via_env.py +0 -0
  614. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_limits_tick_isolation.py +0 -0
  615. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_locking.py +0 -0
  616. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_mcp_nonblocking.py +0 -0
  617. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_mcp_server.py +0 -0
  618. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_mcp_tool_policy.py +0 -0
  619. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_mcp_tools_args.py +0 -0
  620. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_onboarding_reinit.py +0 -0
  621. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_owner_only_writes.py +0 -0
  622. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_palette_cli.py +0 -0
  623. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_path_case_folding.py +0 -0
  624. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_path_spelling.py +0 -0
  625. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_payload_position.py +0 -0
  626. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_pending_message_visibility.py +0 -0
  627. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_playback_lane.py +0 -0
  628. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_policy_ladder.py +0 -0
  629. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_portal_api.py +0 -0
  630. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_portal_pair_url.py +0 -0
  631. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_posture_default.py +0 -0
  632. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_powershell_matcher.py +0 -0
  633. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_project_config.py +0 -0
  634. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_projects_registry.py +0 -0
  635. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_prompt_router.py +0 -0
  636. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_prompt_router_dedup.py +0 -0
  637. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_prompt_router_resume.py +0 -0
  638. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_prose_operands.py +0 -0
  639. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_push.py +0 -0
  640. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_rebuild_uv_lock.py +0 -0
  641. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_relative_path_operands.py +0 -0
  642. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_remote_session_record.py +0 -0
  643. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_repo_cli.py +0 -0
  644. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_restart_cli.py +0 -0
  645. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_rich_text_js.py +0 -0
  646. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_rm_recoverable.py +0 -0
  647. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_role_prompt_retention.py +0 -0
  648. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_role_prompt_sweep_wiring.py +0 -0
  649. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_roles.py +0 -0
  650. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_routes_snapshot.py +0 -0
  651. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_rule_files_load.py +0 -0
  652. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_rule_ids_pinned.py +0 -0
  653. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safe_cwd.py +0 -0
  654. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safety_ext.py +0 -0
  655. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safety_groups.py +0 -0
  656. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safety_install.py +0 -0
  657. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safety_migrate.py +0 -0
  658. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safety_notify.py +0 -0
  659. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_safety_packs.py +0 -0
  660. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_say_lane.py +0 -0
  661. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_scan_budget.py +0 -0
  662. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_scheduler.py +0 -0
  663. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_scheduler_liveness.py +0 -0
  664. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_scheduler_zombie.py +0 -0
  665. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_scratchpad.py +0 -0
  666. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_security.py +0 -0
  667. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_sed_script_is_data.py +0 -0
  668. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_sent_ledger.py +0 -0
  669. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_server_async.py +0 -0
  670. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_services.py +0 -0
  671. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_services_command.py +0 -0
  672. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_session_context.py +0 -0
  673. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_session_created_by_env.py +0 -0
  674. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_session_hud_detent_js.py +0 -0
  675. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_session_metadata_ssot.py +0 -0
  676. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_session_metadata_write.py +0 -0
  677. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_session_ready.py +0 -0
  678. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_session_state.py +0 -0
  679. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_shared_dir_guard.py +0 -0
  680. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_shim_selfheal.py +0 -0
  681. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_skill_install.py +0 -0
  682. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_speech_tags.py +0 -0
  683. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_ssh.py +0 -0
  684. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_stt_backend.py +0 -0
  685. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_stt_cloud.py +0 -0
  686. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_stt_engine.py +0 -0
  687. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_task_cli.py +0 -0
  688. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_task_max_duration.py +0 -0
  689. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_taskbar_persist_js.py +0 -0
  690. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_tasks.py +0 -0
  691. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_tasks_cli.py +0 -0
  692. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_templating.py +0 -0
  693. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_terminal_resize.py +0 -0
  694. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_tmux_session_cwd.py +0 -0
  695. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_topology_expand_js.py +0 -0
  696. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_tts_engine_resolution.py +0 -0
  697. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_tts_local.py +0 -0
  698. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_tunnels_probe.py +0 -0
  699. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_unattended_allow.py +0 -0
  700. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_unattended_env_isolation.py +0 -0
  701. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_unattended_scoped_allow.py +0 -0
  702. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_usage_limit.py +0 -0
  703. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_voice_assistant_removed.py +0 -0
  704. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_voice_off_and_shim_bind.py +0 -0
  705. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_voice_status.py +0 -0
  706. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_watchdog_stages.py +0 -0
  707. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_wiki.py +0 -0
  708. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_wiki_audit.py +0 -0
  709. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_worktree.py +0 -0
  710. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_worktree_branch_cleanup.py +0 -0
  711. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_worktree_dot_project.py +0 -0
  712. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_worktree_git_truth.py +0 -0
  713. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_worktree_layout.py +0 -0
  714. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_worktree_registry.py +0 -0
  715. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tests/unit/test_zero_access_member_access.py +0 -0
  716. {agentwire_dev-1.77.2 → agentwire_dev-1.77.3}/tools/nonce_stt_probe.py +0 -0
@@ -93,8 +93,9 @@ jobs:
93
93
  with:
94
94
  python-version: "3.9"
95
95
 
96
+ # The published engine, at the range agentwire declares (never a checkout copy, #1209 M8).
96
97
  - name: Install the damage_control package and test dependencies
97
- run: python -m pip install pytest ./packages/damage-control-dev
98
+ run: python -m pip install pytest "$(grep -o 'damage-control-dev>=[^"]*' pyproject.toml)"
98
99
 
99
100
  # --noconftest: tests/conftest.py imports agentwire's full dependency set.
100
101
  - name: Run hook tests on the declared floor
@@ -106,4 +107,3 @@ jobs:
106
107
  tests/unit/test_hook_python_floor.py
107
108
  tests/unit/test_hook_fail_closed.py
108
109
  tests/unit/test_hook_fail_closed_matrix.py
109
- tests/unit/test_engine_standalone.py
@@ -32,10 +32,8 @@ jobs:
32
32
  python-version: "3.12"
33
33
  - name: Sync dependencies
34
34
  run: uv sync --extra dev
35
- - name: Bundled rule JSON is in sync with its YAML
36
- run: >
37
- uv run --no-sync python packages/damage-control-dev/tools/build_rules_json.py --check
38
- packages/damage-control-dev/src/damage_control/rules packages/damage-control-dev/src/damage_control/tooldefs agentwire/safety/rules
35
+ - name: AgentWire rules-layer JSON is in sync with its YAML
36
+ run: uv run --no-sync python scripts/build_rules_json.py --check
39
37
  - name: Run bypass + hook fail-closed + control-plane corpus
40
38
  run: >
41
39
  uv run --no-sync pytest -q
@@ -57,7 +55,7 @@ jobs:
57
55
  # asserts), and we fail only on high-severity high-confidence findings.
58
56
  # Green on the clean tree today; red only on NEW genuinely-dangerous code.
59
57
  - name: Run bandit
60
- run: uvx bandit==1.9.4 -c pyproject.toml -r agentwire packages/damage-control-dev/src --severity-level high --confidence-level high
58
+ run: uvx bandit==1.9.4 -c pyproject.toml -r agentwire --severity-level high --confidence-level high
61
59
 
62
60
  pip-audit:
63
61
  name: pip-audit (advisory)
@@ -40,7 +40,7 @@ jobs:
40
40
  with:
41
41
  python-version: "3.12"
42
42
  - name: Install base package
43
- run: pip install ./packages/damage-control-dev .
43
+ run: pip install .
44
44
  - name: Import kokoro engine without torch
45
45
  # Windows is scoped to this import only — the portal/CLI use
46
46
  # fcntl/pty and don't support Windows; the kokoro path must still
@@ -91,7 +91,7 @@ jobs:
91
91
  path: ~/.cache/kokoro_onnx
92
92
  key: kokoro-model-files-v1.0-fp16
93
93
  - name: Install base package
94
- run: pip install ./packages/damage-control-dev .
94
+ run: pip install .
95
95
  - name: Synthesize a sentence
96
96
  run: |
97
97
  python - <<'EOF'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentwire-dev
3
- Version: 1.77.2
3
+ Version: 1.77.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
@@ -228,7 +228,7 @@ Requires-Dist: aiohttp-jinja2>=1.6
228
228
  Requires-Dist: aiohttp>=3.13.4
229
229
  Requires-Dist: av>=12.0.0
230
230
  Requires-Dist: certifi>=2026.10.23
231
- Requires-Dist: damage-control-dev<0.2,>=0.1.3
231
+ Requires-Dist: damage-control-dev<0.2,>=0.1.4
232
232
  Requires-Dist: fastapi>=0.104.0
233
233
  Requires-Dist: jinja2>=3.1.0
234
234
  Requires-Dist: kokoro-onnx>=0.4.9; python_version < '3.14'
@@ -4,15 +4,19 @@ This project publishes the CLI and web app to PyPI as `agentwire-dev`. Packaging
4
4
 
5
5
  Every release does **both** a PyPI publish and a GitHub release. The **GitHub release is the changelog** — there is no `CHANGELOG.md`; release notes are built from the commits since the last tag (step 5).
6
6
 
7
- ## Release order (two packages)
7
+ ## The engine is a separate project (single source)
8
8
 
9
- `agentwire-dev` depends on `damage-control-dev` (its own PyPI project, engine source in `packages/damage-control-dev/`). `pyproject.toml` pins it to a range — currently `damage-control-dev>=0.1.3,<0.2` — and `tests/unit/test_damage_control_pin.py` fails if the workspace version leaves that range. A checkout resolves the engine from the workspace; a PyPI install resolves it from PyPI. Order matters, because an `agentwire-dev` that names a version PyPI doesn't have yet is uninstallable:
9
+ The damage-control engine has exactly one source: the `damage-control-dev` repo (<https://github.com/dotdevdotdev/damage-control-dev>), published on PyPI. `agentwire-dev` only *consumes* it through the range in `pyproject.toml` (currently `damage-control-dev>=0.1.4,<0.2`); a checkout and a PyPI install both resolve it from PyPI. There is no copy of the engine in this repo and nothing to release from here. `tests/unit/test_damage_control_pin.py` checks that the declared floor/ceiling parse and that the installed engine satisfies them.
10
10
 
11
- 1. **Engine changed?** Bump `__version__` in `packages/damage-control-dev/src/damage_control/__init__.py`, merge, then build and publish it **first** (commands in step 3). Skip entirely when the engine didn't change — the existing pin keeps resolving.
12
- 2. **Pin still admits the engine?** A patch/minor bump inside the range needs no `agentwire-dev` change. A bump outside it (e.g. `0.2.0`) requires widening the range in `pyproject.toml` (`>=0.2.0,<0.3`) in the agentwire PR — the pin test enforces this.
13
- 3. **Verify against the published wheel** before releasing agentwire: in a scratch venv, install the agentwire wheel plus `damage-control-dev=={DC_VERSION}` from PyPI (not the workspace), then run `scripts/golden_snapshot.py check`, the fast suite, `agentwire doctor` and a hook subprocess smoke under a temp `HOME`. Diff the PyPI wheel's tree against `uv build --package damage-control-dev --wheel` at HEAD; code and JSON rules must be identical.
11
+ To ship an engine change:
12
+
13
+ 1. **Land it in the damage-control-dev repo**, tag and release it there (its own release flow). Do not tag or release from this repo.
14
+ 2. **Raise the floor here** in a normal agentwire PR: bump the `>=` in `pyproject.toml` (and the `<` ceiling too if the engine crossed it, e.g. `>=0.2.0,<0.3`), run `uv lock`, and re-run `scripts/golden_snapshot.py check` and `scripts/effective_rules.py --check` — re-record the golden only if the behavior change is intended, in that same PR.
15
+ 3. **Verify against the published wheel** before releasing agentwire: in a scratch venv, install the agentwire wheel (it pulls the engine from PyPI), then run the fast suite, `agentwire doctor` and a hook subprocess smoke under a temp `HOME`.
14
16
  4. **Then** bump and publish `agentwire-dev` (steps below), then the GitHub release.
15
17
 
18
+ An `agentwire-dev` whose floor names an engine version PyPI doesn't have yet is uninstallable, so step 1 always completes (published) before step 2 merges.
19
+
16
20
  ## Steps
17
21
 
18
22
  ### 1. Bump version
@@ -35,13 +39,6 @@ uv build
35
39
 
36
40
  Produces `dist/agentwire_dev-{VERSION}-py3-none-any.whl` and `dist/agentwire_dev-{VERSION}.tar.gz`.
37
41
 
38
- When the engine's version is new (see [Release order](#release-order-two-packages)), build and publish `damage-control-dev` **before** agentwire. Its version lives in `packages/damage-control-dev/src/damage_control/__init__.py`:
39
-
40
- ```bash
41
- uv build --package damage-control-dev # -> dist/damage_control_dev-{DC_VERSION}*
42
- uv publish --token "$(grep '^PYPI_TOKEN=' ~/.agentwire/.env | cut -d= -f2-)" dist/damage_control_dev-{DC_VERSION}*
43
- ```
44
-
45
42
  Optional sanity check — confirm `agentwire/templates/` and `agentwire/static/` are bundled:
46
43
 
47
44
  ```bash
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.77.2"
3
+ __version__ = "1.77.3"
@@ -943,12 +943,18 @@ def _same_project(path_a: Path, path_b: Path) -> bool:
943
943
  return common_a == common_b
944
944
 
945
945
 
946
- def resolve_default_created_by(caller: str | None, target_path: Path) -> str | None:
946
+ def resolve_default_created_by(
947
+ caller: str | None, target_path: Path, delegated: bool = False
948
+ ) -> str | None:
947
949
  """The default ``created_by`` when none was explicitly given.
948
950
 
949
951
  Inherit the caller only when the new session's project is the one the
950
952
  caller is already running in — a cross-project spawn gets its own root
951
- instead of flattening into the caller's subtree (#715). An explicit
953
+ instead of flattening into the caller's subtree (#715). EXCEPT delegated
954
+ work (``delegated=True``: the spawn carries a task prompt): that is a
955
+ child whose completion the caller is waiting on, so it parents to the
956
+ caller in any project — nobody should have to pass their own session
957
+ name to be told when their worker finishes (#1261). An explicit
952
958
  --created-by always wins and never reaches this function.
953
959
 
954
960
  Uses ``_live_session_cwd`` rather than ``_get_session_project_path`` —
@@ -975,9 +981,92 @@ def resolve_default_created_by(caller: str | None, target_path: Path) -> str | N
975
981
  caller_path = _live_session_cwd(caller)
976
982
  if caller_path is None:
977
983
  return None
984
+ if delegated:
985
+ return caller
978
986
  return caller if _same_project(caller_path, target_path) else None
979
987
 
980
988
 
989
+ def closest_sessions(name: str, candidates, limit: int = 3) -> list[str]:
990
+ """Candidate session names nearest to ``name`` (typo or repo-vs-session mixup)."""
991
+ import difflib
992
+
993
+ pool = sorted(set(candidates))
994
+ close = difflib.get_close_matches(name, pool, n=limit, cutoff=0.5)
995
+ # A repo/project name vs its session name is a prefix/substring relation
996
+ # (`agentwire-dev` vs `agentwire`) that edit distance under-ranks.
997
+ related = [c for c in pool if c not in close and (c in name or name in c)]
998
+ return (close + related)[:limit]
999
+
1000
+
1001
+ def unknown_session_error(
1002
+ name: str, live: "set[str] | None", *, require_live: bool, what: str
1003
+ ) -> str | None:
1004
+ """Why ``name`` can't be a ``what`` target, or None when it's acceptable.
1005
+
1006
+ Fails at the moment a wrong name is NAMED instead of hours later as a
1007
+ dead-letter (#1261). ``''`` (explicitly standalone), ``name@machine``
1008
+ (remote — unverifiable from here) and an unreachable tmux (``live is
1009
+ None``: an outage is not a gone session) always pass.
1010
+
1011
+ ``require_live`` (spawn parents): the session must be running now.
1012
+ Otherwise (message targets) a session is KNOWN if it is live OR has a
1013
+ record in ``~/.agentwire/sessions/`` — so a busy or restarting session is
1014
+ still deferred to, never refused.
1015
+ """
1016
+ if not name or "@" in name or live is None:
1017
+ return None
1018
+ if name in live:
1019
+ return None
1020
+ if not require_live and session_metadata_path(name).exists():
1021
+ return None
1022
+ near = closest_sessions(name, live)
1023
+ hint = f" — did you mean: {', '.join(near)}?" if near else ""
1024
+ listing = f" Live sessions: {', '.join(sorted(live))}." if live and not near else ""
1025
+ return (
1026
+ f"{what} '{name}' is not a live session{hint}{listing} Your session "
1027
+ "name is NOT your repo name: `agentwire list` / `tmux display -p '#S'` "
1028
+ "tells you."
1029
+ )
1030
+
1031
+
1032
+ NO_REPORT_PATH_HINT = (
1033
+ "state explicitly, as the LAST line of your final message, that you have no "
1034
+ "parent session to report to, then stop. Do not guess a session name."
1035
+ )
1036
+
1037
+
1038
+ def unparented_delegation_warning(
1039
+ session_name: str,
1040
+ caller: str | None,
1041
+ created_by: str | None,
1042
+ first_message: str | None,
1043
+ ) -> str | None:
1044
+ """Warn when a delegated task was spawned with no parent to report to (#1259).
1045
+
1046
+ A cross-project spawn deliberately records no parent (#715), but a spawn
1047
+ that carries a task prompt is clearly delegated work: the child's
1048
+ ``notify-parent`` has no target and its completion is invisible. The
1049
+ spawner is the only party that can fix that, and only at spawn time.
1050
+ ``created_by == ''`` is an explicit rootless request (orchestrators,
1051
+ ``--created-by ''``) and never warns; services are not spawners.
1052
+ """
1053
+ if not first_message or created_by is not None or not caller:
1054
+ return None
1055
+ if caller == session_name:
1056
+ return None
1057
+ from .services import is_service_session
1058
+
1059
+ if is_service_session(caller):
1060
+ return None
1061
+ return (
1062
+ f"session '{session_name}' was given a task but has NO parent "
1063
+ f"('{caller}' is not a live agentwire session that delegation could "
1064
+ f"auto-parent to): it cannot notify-parent and its completion will "
1065
+ f"not reach you. Re-spawn from a live session, or pass "
1066
+ f"--created-by <live session>."
1067
+ )
1068
+
1069
+
981
1070
  def tmux_session_has_agent(name: str) -> bool:
982
1071
  """Check if a tmux session has an agent running (not just a bare shell).
983
1072
 
@@ -65,6 +65,13 @@ PASSIVE_KINDS = ("ingest",)
65
65
  # Broadcast token: deliver to every live agent session except the sender.
66
66
  BROADCAST_TOKEN = "@all"
67
67
 
68
+ # Words a role prompt or a worker's own phrasing uses for "the session that
69
+ # spawned me". They are never session names; sent to one that isn't actually
70
+ # running, the message just dead-letters ~5 min later (#1259). Deliberately NOT
71
+ # the kind words (orchestrator/worker/reviewer): `agentwire orchestrator`
72
+ # names a session "orchestrator" by default, so those are real addresses.
73
+ ROLE_WORDS = frozenset({"parent", "creator"})
74
+
68
75
  # After this many failed/deferred delivery attempts a message is dead-lettered
69
76
  # rather than retried forever (40 * 60s watchdog tick ≈ 40 min of a session
70
77
  # being permanently busy/typed-in).
@@ -709,9 +716,33 @@ def resolve_targets(to: str, sender: "str | None") -> list[str]:
709
716
  s for s in _live_agent_sessions()
710
717
  if s != sender and not is_service_session(s)
711
718
  ]
719
+ if to in ROLE_WORDS and to not in (live_sessions() or set()):
720
+ raise ValueError(
721
+ f"{to!r} is a role word, not a session name — no such session is "
722
+ "running, so the message would dead-letter. Address a real session; "
723
+ "if you have no parent to report to, state that explicitly as the "
724
+ "LAST line of your final message and stop. Do not guess a session name."
725
+ )
712
726
  return [_validate_session(to)]
713
727
 
714
728
 
729
+ def unknown_target_error(to: str) -> "str | None":
730
+ """Why ``to`` can't receive a message, or None when it's a KNOWN session.
731
+
732
+ Known = live in tmux OR recorded in ``~/.agentwire/sessions/`` — so a busy
733
+ or restarting session still defers instead of failing (#1261). A name that
734
+ is neither is a typo or a repo-vs-session mixup, and enqueueing it only
735
+ moves the failure to a dead-letter hours later. ``@all`` and role words
736
+ are judged by ``resolve_targets`` and pass here.
737
+ """
738
+ if to == BROADCAST_TOKEN or to in ROLE_WORDS:
739
+ return None
740
+ from .core import unknown_session_error
741
+
742
+ return unknown_session_error(
743
+ to, live_sessions(), require_live=False, what="message target")
744
+
745
+
715
746
  def enqueue(
716
747
  to: str, text: str, kind: str = "note", sender: "str | None" = None, ref: str = ""
717
748
  ) -> list[Message]:
@@ -75,6 +75,13 @@ def cmd_msg_send(args) -> int:
75
75
  print(f"Error: {msg}")
76
76
  return 1
77
77
  sender = claimed or detected or "unknown"
78
+ unknown = inbox.unknown_target_error(args.to)
79
+ if unknown:
80
+ if getattr(args, "json", False):
81
+ print(json.dumps({"success": False, "error": unknown}))
82
+ else:
83
+ print(f"Error: {unknown}")
84
+ return 1
78
85
  try:
79
86
  written = inbox.enqueue(args.to, text, kind=args.kind, sender=sender,
80
87
  ref=getattr(args, "ref", ""))
@@ -14,6 +14,7 @@ import urllib.request
14
14
 
15
15
  from . import pane_manager
16
16
  from .core import (
17
+ NO_REPORT_PATH_HINT,
17
18
  _get_portal_url,
18
19
  _output_json,
19
20
  _output_result,
@@ -108,7 +109,9 @@ def cmd_notify_parent(args) -> int:
108
109
  else:
109
110
  return _output_result(
110
111
  False, json_mode,
111
- "No target session (set 'parent' in .agentwire.yml or use --to)")
112
+ "No target session: this session has no recorded parent (set "
113
+ "'parent' in .agentwire.yml or use --to <real session name>). "
114
+ f"If you were delegated this task, {NO_REPORT_PATH_HINT}")
112
115
 
113
116
  # --queued (#667): route through the polite msg inbox (kind=done) instead
114
117
  # of a direct paste. The drain owns everything the direct path lacks — the
@@ -124,6 +127,9 @@ def cmd_notify_parent(args) -> int:
124
127
  # typed discriminator the cohort ledger keys on — sentinel text is
125
128
  # defeated by any child that happens to write the same words.
126
129
  kind = "idle" if getattr(args, 'on_idle', False) else "done"
130
+ unknown = inbox.unknown_target_error(target_session)
131
+ if unknown:
132
+ return _output_result(False, json_mode, unknown)
127
133
  try:
128
134
  msgs = inbox.enqueue(
129
135
  to=target_session, text=text, kind=kind,
@@ -557,6 +557,9 @@ def cmd_info(args) -> int:
557
557
  "pane_count": pane_count,
558
558
  "panes": panes,
559
559
  "is_remote": False,
560
+ # Who this session reports to (its recorded creator), so a worker
561
+ # never has to guess a parent name; None for a standalone root.
562
+ "parent": load_session_metadata(session).get("created_by") or None,
560
563
  }
561
564
 
562
565
  if json_mode:
@@ -36,3 +36,5 @@ When your review reaches a conclusion, `notify_parent` with a structured verdict
36
36
  - **blocked** — you can't finish the review (missing context, can't reproduce, PR is in a broken state) — say what's blocking you
37
37
 
38
38
  Silence is not a verdict. If you're still working, say so before you go idle.
39
+
40
+ **No report path?** If `notify-parent` (or `notify_parent`) reports no target, you were spawned without a parent. State that explicitly as the LAST line of your final message and stop — do not guess a session name, and never `msg send --to parent` (there is no session by that name; it dead-letters and emails the owner).
@@ -27,3 +27,5 @@ When your review reaches a conclusion, `notify_parent` with a structured verdict
27
27
  - **blocked** — you can't finish the review (missing context, can't reproduce, PR is in a broken state) — say what's blocking you
28
28
 
29
29
  Silence is not a verdict. If you're still working, say so before you go idle.
30
+
31
+ **No report path?** If `notify-parent` (or `notify_parent`) reports no target, you were spawned without a parent. State that explicitly as the LAST line of your final message and stop — do not guess a session name, and never `msg send --to parent` (there is no session by that name; it dead-letters and emails the owner).
@@ -37,3 +37,5 @@ When the task is done:
37
37
  `agentwire msg` queues the message and delivers it only when their input box is empty; `notify-parent` / `session_send` paste + Enter **immediately** and overwrite any uncommitted draft — reserve those for something that genuinely can't wait.
38
38
 
39
39
  Don't merge the PR yourself — your creator or a reviewer handles merge and worktree cleanup.
40
+
41
+ **No report path?** If `notify-parent` (or `notify_parent`) reports no target, you were spawned without a parent. State that explicitly as the LAST line of your final message and stop — do not guess a session name, and never `msg send --to parent` (there is no session by that name; it dead-letters and emails the owner).
@@ -37,3 +37,5 @@ complete | incomplete | error
37
37
  After writing the summary, stop. The system detects idle and auto-exits your pane.
38
38
 
39
39
  **If you're a standalone session** (your own tmux session, no separate worktree — no pane to auto-reap): there is no automatic idle-kill. Send the same summary content as your final message to the parent/creator instead (`agentwire msg send --to <parent> --kind done "..."`), then stop and wait — whoever created you is responsible for noticing you're idle and cleaning up.
40
+
41
+ **No report path?** If `notify-parent` (or `notify_parent`) reports no target, you were spawned without a parent. State that explicitly as the LAST line of your final message and stop — do not guess a session name, and never `msg send --to parent` (there is no session by that name; it dead-letters and emails the owner).
@@ -182,28 +182,23 @@ def rebuild_refusal_lines(repo_root: Path) -> List[str]:
182
182
 
183
183
 
184
184
  def rebuild_package_refusal_lines(repo_root: Path) -> List[str]:
185
- """Refusal when either package ``rebuild`` would install is not wholly inside a primary checkout.
185
+ """Refusal when the ``agentwire`` package ``rebuild`` would install is not wholly inside a primary checkout.
186
186
 
187
- ``rebuild`` installs agentwire AND its damage-control sibling from one checkout. The
188
- worktree check above covers the checkout; this covers the packages themselves — a missing
189
- sibling would install an agentwire whose hooks cannot start (``onFailure: block`` then
190
- refuses every tool call), and one that resolves into a linked worktree would make that
191
- worktree canonical for the engine alone.
187
+ The worktree check above covers the checkout; this covers the package itself — a missing
188
+ one would install nothing runnable, and one that resolves (e.g. through a symlink) into a
189
+ linked worktree would make that worktree canonical. The damage-control engine is no longer
190
+ built from the checkout (#1209 M8): it comes from PyPI, and its own provenance (a copy
191
+ running out of a worktree venv) is still judged by ``install_provenance`` over ``PACKAGES``.
192
192
  """
193
- sources = {
194
- "agentwire": repo_root / "agentwire",
195
- "damage_control": repo_root / "packages" / "damage-control-dev" / "src" / "damage_control",
196
- }
197
- for package, path in sources.items():
198
- if not path.is_dir():
199
- return [f"REFUSED: rebuild would install without the {package} package.",
200
- f" expected : {path}",
201
- " An install missing it registers hooks that cannot start."]
202
- worktree = _enclosing_worktree(path.resolve())
203
- if worktree is not None:
204
- return [f"REFUSED: rebuild would install the {package} package from the linked worktree {worktree}.",
205
- " The worktree would BECOME canonical for that package (#936, doubled by #1209).",
206
- " Fix: rebuild from the primary checkout, or pass --allow-foreign-source."]
193
+ path = repo_root / "agentwire"
194
+ if not path.is_dir():
195
+ return ["REFUSED: rebuild would install without the agentwire package.",
196
+ f" expected : {path}"]
197
+ worktree = _enclosing_worktree(path.resolve())
198
+ if worktree is not None:
199
+ return [f"REFUSED: rebuild would install the agentwire package from the linked worktree {worktree}.",
200
+ " The worktree would BECOME canonical for that package (#936).",
201
+ " Fix: rebuild from the primary checkout, or pass --allow-foreign-source."]
207
202
  return []
208
203
 
209
204
 
@@ -41,6 +41,7 @@ from .core import (
41
41
  record_session_launch,
42
42
  resolve_default_created_by,
43
43
  tmux_session_exists,
44
+ unparented_delegation_warning,
44
45
  )
45
46
  from .project_config import (
46
47
  DEFAULT_POSTURE,
@@ -133,6 +134,21 @@ def _shared_dir_conflicts(panes_output: str, session_name: str, target: str) ->
133
134
  return conflicting
134
135
 
135
136
 
137
+ def created_by_error(created_by: "str | None") -> "str | None":
138
+ """Why an explicit ``--created-by`` can't be this spawn's parent, or None.
139
+
140
+ Called BEFORE any worktree/session exists so a wrong name leaves nothing
141
+ behind (#1261). ``None`` (derive it) and ``''`` (standalone) always pass.
142
+ """
143
+ if not created_by:
144
+ return None
145
+ from . import inbox
146
+ from .core import unknown_session_error
147
+
148
+ return unknown_session_error(
149
+ created_by, inbox.live_sessions(), require_live=True, what="--created-by")
150
+
151
+
136
152
  def cmd_new(args) -> int:
137
153
  """Create a new agent session.
138
154
 
@@ -157,6 +173,13 @@ def cmd_new(args) -> int:
157
173
  # KIND can be derived from whether a worktree is being created.
158
174
  project, branch, machine_id = parse_session_name(name)
159
175
 
176
+ # A wrong --created-by fails here, before any worktree/session exists
177
+ # (#1261). Remote spawns are exempt: the parent can't be verified from here.
178
+ if not machine_id:
179
+ parent_err = created_by_error(getattr(args, 'created_by', None))
180
+ if parent_err:
181
+ return _output_result(False, json_mode, parent_err)
182
+
160
183
  # --- Role resolution (two distinct phases) -----------------------------
161
184
  # Phase 1 — resolve. The session's ROLE is derived from the spawn verb:
162
185
  # cmd_worktree passes an explicit kind (default "worker"); for `new` we
@@ -529,7 +552,12 @@ def cmd_new(args) -> int:
529
552
  if created_by is None and getattr(args, 'kind', None) == 'orchestrator':
530
553
  created_by = ''
531
554
  elif created_by is None:
532
- created_by = resolve_default_created_by(caller, session_path)
555
+ created_by = resolve_default_created_by(
556
+ caller, session_path, delegated=bool(first_message))
557
+ orphan_warning = unparented_delegation_warning(
558
+ session_name, caller, created_by, first_message)
559
+ if orphan_warning and not json_mode:
560
+ print(f"WARNING: {orphan_warning}", file=sys.stderr)
533
561
 
534
562
  # Build agent command
535
563
  model_override = getattr(args, 'model', None)
@@ -717,6 +745,8 @@ def cmd_new(args) -> int:
717
745
  "branch": branch,
718
746
  "machine": None,
719
747
  }
748
+ if orphan_warning:
749
+ result["warning"] = orphan_warning
720
750
  if first_message:
721
751
  result["first_message_delivered"] = bool(first_message_delivered)
722
752
  # Present whenever the straight verified paste didn't carry the
@@ -1068,6 +1098,10 @@ def cmd_worktree(args) -> int:
1068
1098
  if not name:
1069
1099
  return _output_result(False, json_mode, "Usage: agentwire worktree <name> (or --list / --remove <name> / --prune)")
1070
1100
 
1101
+ parent_err = created_by_error(getattr(args, 'created_by', None))
1102
+ if parent_err:
1103
+ return _output_result(False, json_mode, parent_err)
1104
+
1071
1105
  if not _check_tmux_installed():
1072
1106
  return _output_result(False, json_mode, "tmux is required but not installed")
1073
1107
 
@@ -42,15 +42,15 @@ UV_CACHE_CLEAN_TIMEOUT = 20.0
42
42
 
43
43
 
44
44
  def _clean_uv_cache_for_agentwire() -> None:
45
- """Drop only agentwire-dev's and damage-control-dev's entries from the uv cache.
45
+ """Drop only agentwire-dev's entry from the uv cache.
46
46
 
47
47
  The uv cache (~/.cache/uv) is shared by every uv tool and project on the
48
48
  machine — never rmtree it wholesale. `uv cache clean <package>` evicts just
49
49
  that package's wheels/sdists so the next install rebuilds from source.
50
- damage-control-dev is the workspace sibling the hooks run from, so a stale
51
- cached wheel of it would ship old rules just as a stale agentwire wheel would.
50
+ damage-control-dev is a published, versioned wheel resolved from PyPI (#1209 M8),
51
+ so there is no stale local build of it to evict.
52
52
  """
53
- for package in ("agentwire-dev", "damage-control-dev"):
53
+ for package in ("agentwire-dev",):
54
54
  try:
55
55
  result = subprocess.run(
56
56
  ["uv", "cache", "clean", package],
@@ -570,9 +570,8 @@ def cmd_rebuild(args) -> int:
570
570
  print(f" {line}" if line else "", file=sys.stderr)
571
571
  return 1
572
572
 
573
- # ...and the same question for each package it installs (#1209 M6): the damage-control
574
- # engine is a second distribution, so a missing or worktree-resident sibling is the
575
- # #936 hazard on the package that actually runs on every tool call.
573
+ # ...and the same question for the package it installs: one that resolves into a linked
574
+ # worktree (a symlinked package dir) is the #936 hazard from a primary-looking checkout.
576
575
  package_refusal = prov.rebuild_package_refusal_lines(project_root)
577
576
  if package_refusal and not getattr(args, "allow_foreign_source", False):
578
577
  for line in package_refusal: