agentwire-dev 1.20.0__tar.gz → 1.22.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  2. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/PKG-INFO +1 -1
  3. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/__init__.py +1 -1
  4. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/__main__.py +244 -53
  5. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/config.py +2 -0
  6. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/mcp_server.py +136 -1
  7. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/overnight.py +4 -1
  8. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/project_config.py +7 -7
  9. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/projects.py +87 -0
  10. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/agentwire.md +1 -2
  11. agentwire_dev-1.22.0/agentwire/roles/notifications.md +83 -0
  12. agentwire_dev-1.22.0/agentwire/roles/orchestrator.md +92 -0
  13. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/scheduler.py +1 -1
  14. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/server.py +178 -4
  15. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/css/desktop.css +105 -0
  16. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/desktop-manager.js +9 -0
  17. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/desktop.js +9 -0
  18. agentwire_dev-1.22.0/agentwire/static/js/notifications-panel.js +138 -0
  19. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/sessions-section.js +4 -1
  20. agentwire_dev-1.22.0/agentwire/workflows/__init__.py +28 -0
  21. agentwire_dev-1.22.0/agentwire/workflows/cli.py +328 -0
  22. agentwire_dev-1.22.0/agentwire/workflows/context.py +52 -0
  23. agentwire_dev-1.22.0/agentwire/workflows/definitions.py +331 -0
  24. agentwire_dev-1.22.0/agentwire/workflows/node.py +115 -0
  25. agentwire_dev-1.22.0/agentwire/workflows/outputs.py +149 -0
  26. agentwire_dev-1.22.0/agentwire/workflows/pi_runner.py +238 -0
  27. agentwire_dev-1.22.0/agentwire/workflows/runner.py +364 -0
  28. agentwire_dev-1.22.0/agentwire/workflows/storage.py +186 -0
  29. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/PORTAL.md +1 -1
  30. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/claude-code-auto-mode.md +5 -5
  31. agentwire_dev-1.22.0/docs/pi-zai.md +222 -0
  32. agentwire_dev-1.22.0/docs/workflows.md +317 -0
  33. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/pyproject.toml +2 -0
  34. agentwire_dev-1.22.0/tests/integration/test_build_agent_command.py +237 -0
  35. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_channels.py +4 -4
  36. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_project_config.py +0 -9
  37. agentwire_dev-1.22.0/tests/unit/test_workflows.py +467 -0
  38. agentwire_dev-1.20.0/agentwire/glm_system_prompt.md +0 -81
  39. agentwire_dev-1.20.0/docs/claude-code-system-prompt/README.md +0 -45
  40. agentwire_dev-1.20.0/docs/claude-code-system-prompt/agent-prompt-explore.md +0 -62
  41. agentwire_dev-1.20.0/docs/claude-code-system-prompt/agent-prompt-task-tool.md +0 -29
  42. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-agent-memory-instructions.md +0 -25
  43. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-agent-summary-generation.md +0 -20
  44. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-censoring-assistance-with-malicious-activities.md +0 -6
  45. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-chrome-browser-mcp-tools.md +0 -14
  46. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-claude-in-chrome-browser-automation.md +0 -51
  47. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-conditional-delegate-codebase-exploration.md +0 -21
  48. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-context-compaction-summary.md +0 -28
  49. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-doing-tasks.md +0 -18
  50. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-executing-actions-with-care.md +0 -15
  51. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-git-status.md +0 -20
  52. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-hooks-configuration.md +0 -161
  53. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-at-a-glance-summary.md +0 -55
  54. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-friction-analysis.md +0 -16
  55. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-on-the-horizon.md +0 -16
  56. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-session-facets-extraction.md +0 -31
  57. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-suggestions.md +0 -44
  58. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-learning-mode-insights.md +0 -15
  59. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-learning-mode.md +0 -80
  60. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-main-system-prompt.md +0 -17
  61. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-option-previewer.md +0 -14
  62. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-parallel-tool-call-note-part-of-tool-usage-policy.md +0 -6
  63. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-scratchpad-directory.md +0 -22
  64. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-skillify-current-session.md +0 -139
  65. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-task-management.md +0 -53
  66. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-teammate-communication.md +0 -15
  67. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tone-and-style.md +0 -19
  68. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-execution-denied.md +0 -6
  69. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-permission-mode.md +0 -9
  70. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-usage-policy.md +0 -18
  71. agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-use-summary-generation.md +0 -21
  72. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-askuserquestion.md +0 -19
  73. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-bash-git-commit-and-pr-creation-instructions.md +0 -95
  74. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-bash-sandbox-note.md +0 -27
  75. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-bash.md +0 -66
  76. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-computer.md +0 -9
  77. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-edit.md +0 -15
  78. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-enterplanmode.md +0 -83
  79. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-enterworktree.md +0 -32
  80. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-exitplanmode.md +0 -28
  81. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-glob.md +0 -11
  82. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-grep.md +0 -19
  83. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-lsp.md +0 -24
  84. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-notebookedit.md +0 -6
  85. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-readfile.md +0 -27
  86. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-sendmessagetool.md +0 -144
  87. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-skill.md +0 -28
  88. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-sleep.md +0 -18
  89. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-task.md +0 -77
  90. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-taskcreate.md +0 -48
  91. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-tasklist-teammate-workflow.md +0 -14
  92. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-teamdelete.md +0 -18
  93. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-teammatetool.md +0 -115
  94. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-todowrite.md +0 -189
  95. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-toolsearch-extended.md +0 -69
  96. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-toolsearch.md +0 -14
  97. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-webfetch.md +0 -23
  98. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-websearch.md +0 -33
  99. agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-write.md +0 -14
  100. agentwire_dev-1.20.0/tests/integration/test_build_agent_command.py +0 -135
  101. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/FUNDING.yml +0 -0
  102. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  103. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  104. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  105. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.gitignore +0 -0
  106. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CHANGELOG.md +0 -0
  107. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CLA.md +0 -0
  108. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CODE_OF_CONDUCT.md +0 -0
  109. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CONTRIBUTING.md +0 -0
  110. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/Dockerfile.local +0 -0
  111. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/Dockerfile.runpod +0 -0
  112. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/LICENSE +0 -0
  113. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/README.md +0 -0
  114. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/RELEASING.md +0 -0
  115. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/SECURITY.md +0 -0
  116. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/SPONSORS.md +0 -0
  117. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/agents/__init__.py +0 -0
  118. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/agents/base.py +0 -0
  119. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/agents/tmux.py +0 -0
  120. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/bridges/__init__.py +0 -0
  121. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/bridges/telegram.py +0 -0
  122. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/cached_status.py +0 -0
  123. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/__init__.py +0 -0
  124. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/_template.py +0 -0
  125. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/base.py +0 -0
  126. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/discord.py +0 -0
  127. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/email.py +0 -0
  128. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/quo.py +0 -0
  129. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/slack.py +0 -0
  130. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/sms.py +0 -0
  131. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/telegram.py +0 -0
  132. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/webhook.py +0 -0
  133. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/cli_safety.py +0 -0
  134. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/completion.py +0 -0
  135. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/errors.py +0 -0
  136. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/history.py +0 -0
  137. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/__init__.py +0 -0
  138. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/agentwire-permission.sh +0 -0
  139. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/__init__.py +0 -0
  140. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  141. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  142. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  143. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  144. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  145. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  146. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  147. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  148. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  149. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  150. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  151. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  152. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  153. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  154. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  155. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  156. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/idle-handler.sh +0 -0
  157. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/init_agentwire.py +0 -0
  158. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/listen.py +0 -0
  159. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/locking.py +0 -0
  160. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/network.py +0 -0
  161. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/onboarding.py +0 -0
  162. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/pane_manager.py +0 -0
  163. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/prompts/__init__.py +0 -0
  164. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/prompts/init.md +0 -0
  165. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/__init__.py +0 -0
  166. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/channel-admin.md +0 -0
  167. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/chatbot.md +0 -0
  168. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/discord-dm.md +0 -0
  169. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/init.md +0 -0
  170. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/slack-dm.md +0 -0
  171. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/task-runner.md +0 -0
  172. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/voice.md +0 -0
  173. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/worker.md +0 -0
  174. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-Echo--black.png +0 -0
  175. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-Echo--transparent.png +0 -0
  176. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-Echo.png +0 -0
  177. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-email-banner.png +0 -0
  178. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  179. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  180. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  181. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
  182. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
  183. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
  184. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  185. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
  186. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
  187. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  188. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
  189. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/favicon.png +0 -0
  190. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/android.jpeg +0 -0
  191. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/automaton.jpeg +0 -0
  192. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/bot.jpeg +0 -0
  193. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
  194. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/droid.jpeg +0 -0
  195. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/drone.jpeg +0 -0
  196. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/guardian.jpeg +0 -0
  197. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/mech.jpeg +0 -0
  198. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/probe.jpeg +0 -0
  199. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/robot.jpeg +0 -0
  200. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
  201. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/unit.jpeg +0 -0
  202. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/blob.jpeg +0 -0
  203. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/cloud.jpeg +0 -0
  204. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/crystal.jpeg +0 -0
  205. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
  206. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/flame.jpeg +0 -0
  207. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
  208. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/horned.jpeg +0 -0
  209. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/moon.jpeg +0 -0
  210. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/slime.jpeg +0 -0
  211. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/star.jpeg +0 -0
  212. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
  213. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/winged.jpeg +0 -0
  214. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/bear.jpeg +0 -0
  215. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/cat.jpeg +0 -0
  216. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/crown.jpeg +0 -0
  217. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
  218. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
  219. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
  220. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/deer.jpeg +0 -0
  221. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/drone.jpeg +0 -0
  222. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
  223. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/fox.jpeg +0 -0
  224. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
  225. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/horse.jpeg +0 -0
  226. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/lion.jpeg +0 -0
  227. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
  228. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/robot.jpeg +0 -0
  229. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
  230. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
  231. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/.gitkeep +0 -0
  232. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/artifact-window.js +0 -0
  233. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/components/icon-picker.js +0 -0
  234. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/components/list-card.js +0 -0
  235. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/components/type-tag.js +0 -0
  236. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/icon-manager.js +0 -0
  237. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/session-window.js +0 -0
  238. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  239. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/config-section.js +0 -0
  240. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
  241. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
  242. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  243. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/services-section.js +0 -0
  244. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/socials-section.js +0 -0
  245. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar.js +0 -0
  246. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/tile-manager.js +0 -0
  247. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/utils/auto-refresh.js +0 -0
  248. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
  249. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/windows/chat-window.js +0 -0
  250. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/__init__.py +0 -0
  251. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/base.py +0 -0
  252. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/server_backend.py +0 -0
  253. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/stt_server.py +0 -0
  254. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/whisperkit.py +0 -0
  255. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tasks.py +0 -0
  256. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/__init__.py +0 -0
  257. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/base.html +0 -0
  258. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/desktop.html +0 -0
  259. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/email_notification.html +0 -0
  260. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/tmux.conf +0 -0
  261. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templating.py +0 -0
  262. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/aws.yaml +0 -0
  263. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/docker.yaml +0 -0
  264. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/gcp.yaml +0 -0
  265. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/gh.yaml +0 -0
  266. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/git.yaml +0 -0
  267. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/gws.yaml +0 -0
  268. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/kubectl.yaml +0 -0
  269. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/npm.yaml +0 -0
  270. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/terraform.yaml +0 -0
  271. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/uv.yaml +0 -0
  272. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/__init__.py +0 -0
  273. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/base.py +0 -0
  274. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/__init__.py +0 -0
  275. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/chatterbox.py +0 -0
  276. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/kokoro.py +0 -0
  277. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/qwen_base.py +0 -0
  278. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/qwen_custom.py +0 -0
  279. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/qwen_design.py +0 -0
  280. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/zonos.py +0 -0
  281. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/registry.py +0 -0
  282. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/runpod_handler.py +0 -0
  283. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts_server.py +0 -0
  284. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tunnels.py +0 -0
  285. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/__init__.py +0 -0
  286. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/chunker.py +0 -0
  287. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/file_io.py +0 -0
  288. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/paths.py +0 -0
  289. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/subprocess.py +0 -0
  290. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/validation.py +0 -0
  291. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voiceclone.py +0 -0
  292. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/darren.wav +0 -0
  293. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/default.wav +0 -0
  294. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/jessica.wav +0 -0
  295. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/lisa.wav +0 -0
  296. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/may.wav +0 -0
  297. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/worktree.py +0 -0
  298. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/FEATURE-REQUESTS.md +0 -0
  299. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/FR-auto-mode-session-type.md +0 -0
  300. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/SHELL_ESCAPING.md +0 -0
  301. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/SPONSORS.md +0 -0
  302. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/TROUBLESHOOTING.md +0 -0
  303. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/README.md +0 -0
  304. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-agent-hot-swap.md +0 -0
  305. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-ambient-context-stream.md +0 -0
  306. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-ambient-listening-mode.md +0 -0
  307. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-audio-cues.md +0 -0
  308. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-checkpoint-commits.md +0 -0
  309. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-context-compression-protocol.md +0 -0
  310. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-context-window-gauge.md +0 -0
  311. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-contextual-bookmarks.md +0 -0
  312. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-conversation-archaeology.md +0 -0
  313. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-cost-tracking-dashboard.md +0 -0
  314. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-cross-session-events.md +0 -0
  315. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-delegation-replay.md +0 -0
  316. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-device-session-tethering.md +0 -0
  317. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-failure-memory.md +0 -0
  318. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-notification-escalation.md +0 -0
  319. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-periodic-voice-briefings.md +0 -0
  320. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-presence-aware-sessions.md +0 -0
  321. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-drift-detection.md +0 -0
  322. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-energy-model.md +0 -0
  323. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-handshake.md +0 -0
  324. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-momentum.md +0 -0
  325. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-replay.md +0 -0
  326. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-snapshots.md +0 -0
  327. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-templates.md +0 -0
  328. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-thermal-throttling.md +0 -0
  329. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-smart-session-routing.md +0 -0
  330. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-spatial-voice-mixing.md +0 -0
  331. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-speculative-execution.md +0 -0
  332. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-task-pipeline-chaining.md +0 -0
  333. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-task-pivot-protocol.md +0 -0
  334. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-task-time-budgets.md +0 -0
  335. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-activity-zones.md +0 -0
  336. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-breakpoints.md +0 -0
  337. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-code-review.md +0 -0
  338. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-command-undo.md +0 -0
  339. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-handoff.md +0 -0
  340. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-identity.md +0 -0
  341. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-interrupts-v2.md +0 -0
  342. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-interrupts.md +0 -0
  343. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-macros.md +0 -0
  344. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-transcript-logs.md +0 -0
  345. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-watchdog-mode.md +0 -0
  346. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-fencing.md +0 -0
  347. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-file-coordination.md +0 -0
  348. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-health-dashboard.md +0 -0
  349. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-heartbeat-watchdog.md +0 -0
  350. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-progress-streaming.md +0 -0
  351. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-proof-of-work.md +0 -0
  352. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-warmup.md +0 -0
  353. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-x-api-integration.md +0 -0
  354. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/channels.md +0 -0
  355. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/critical-analysis.md +0 -0
  356. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/demo-script.md +0 -0
  357. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/gws-google-workspace-cli.md +0 -0
  358. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/hammerspoon.md +0 -0
  359. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/pending-code-changes.md +0 -0
  360. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/projects-dedup-ignores-machine.md +0 -0
  361. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/remote-tts-session-detection.md +0 -0
  362. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/tmux-config-onboarding.md +0 -0
  363. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/tmux-paste-freeze.md +0 -0
  364. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/tmux-recommended-config.md +0 -0
  365. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/logo.png +0 -0
  366. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/notification-hooks.md +0 -0
  367. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/progressive-loading-pattern.md +0 -0
  368. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/prompts/agentwire-website.md +0 -0
  369. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/releasing.md +0 -0
  370. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/remote-access.md +0 -0
  371. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/remote-machines.md +0 -0
  372. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/runpod-tts.md +0 -0
  373. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/scheduled-workloads.md +0 -0
  374. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/security/damage-control-migration.md +0 -0
  375. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/security/damage-control.md +0 -0
  376. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/tmux-hooks.md +0 -0
  377. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/tts-self-hosted.md +0 -0
  378. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/youtube-channel.md +0 -0
  379. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/requirements-tts.txt +0 -0
  380. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/conftest.py +0 -0
  381. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/e2e/test_portal_ui.py +0 -0
  382. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/fixtures/sample_agentwire.yml +0 -0
  383. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/fixtures/sample_config.yaml +0 -0
  384. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/fixtures/sample_scheduler.yaml +0 -0
  385. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_channels_cli.py +0 -0
  386. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_cli_commands.py +0 -0
  387. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_cli_output.py +0 -0
  388. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_mcp_tools.py +0 -0
  389. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_portal_api.py +0 -0
  390. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_scheduler_board.py +0 -0
  391. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_cli_safety.py +0 -0
  392. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_config.py +0 -0
  393. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_file_io.py +0 -0
  394. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_history.py +0 -0
  395. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_locking.py +0 -0
  396. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_mcp_server.py +0 -0
  397. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_roles.py +0 -0
  398. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_scheduler.py +0 -0
  399. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_server_async.py +0 -0
  400. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_server_pure.py +0 -0
  401. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_tasks.py +0 -0
  402. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_templating.py +0 -0
  403. {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_worktree.py +0 -0
@@ -29,7 +29,7 @@ What actually happens.
29
29
  - **OS:** (e.g., macOS 14.2, Ubuntu 22.04)
30
30
  - **Python:** (e.g., 3.11.5)
31
31
  - **AgentWire version:** (run `agentwire --version`)
32
- - **Agent:** (Claude Code / claudeGLM / Other)
32
+ - **Agent:** (Claude Code)
33
33
 
34
34
  ## Logs
35
35
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentwire-dev
3
- Version: 1.20.0
3
+ Version: 1.22.0
4
4
  Summary: Multi-session voice web interface for AI coding agents
5
5
  Project-URL: Homepage, https://agentwire.dev
6
6
  Project-URL: Repository, https://github.com/dotdevdotdev/agentwire-dev
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.20.0"
3
+ __version__ = "1.22.0"
@@ -2,7 +2,7 @@
2
2
 
3
3
  import argparse
4
4
  import base64
5
- from dataclasses import dataclass
5
+ from dataclasses import dataclass, field
6
6
  import datetime
7
7
  import importlib.resources
8
8
  import json
@@ -81,15 +81,75 @@ class AgentCommand:
81
81
  """Result of building an agent command."""
82
82
  command: str # The shell command to execute
83
83
  temp_file: str | None = None # Temp file to clean up after agent starts
84
+ env: dict[str, str] = field(default_factory=dict) # Secrets to inject via tmux set-environment (keeps keys out of `ps`)
85
+
86
+
87
+ def inject_session_env(session: str, env: dict[str, str], remote_host: str | None = None) -> None:
88
+ """Set env vars on a tmux session so panes inherit them without exposing secrets.
89
+
90
+ Using `tmux set-environment -t <session>` keeps API keys out of the command
91
+ string (which would otherwise be visible in `ps auxwww` and shell history).
92
+ """
93
+ if not env:
94
+ return
95
+ for key, value in env.items():
96
+ if remote_host:
97
+ subprocess.run(
98
+ ["ssh", remote_host, "tmux", "set-environment", "-t",
99
+ shlex.quote(session), shlex.quote(key), shlex.quote(value)],
100
+ check=False,
101
+ )
102
+ else:
103
+ subprocess.run(
104
+ ["tmux", "set-environment", "-t", session, key, value],
105
+ check=False,
106
+ )
107
+
108
+
109
+ def parse_env_args(env_args: list[str] | None) -> dict[str, str]:
110
+ """Parse repeated `--env KEY=VAL` flags into a dict.
111
+
112
+ Raises SystemExit via argparse pattern if an entry lacks `=`.
113
+ """
114
+ if not env_args:
115
+ return {}
116
+ result: dict[str, str] = {}
117
+ for entry in env_args:
118
+ if "=" not in entry:
119
+ print(f"Error: --env expects KEY=VAL, got {entry!r}", file=sys.stderr)
120
+ sys.exit(2)
121
+ key, value = entry.split("=", 1)
122
+ if not key:
123
+ print(f"Error: --env KEY cannot be empty (got {entry!r})", file=sys.stderr)
124
+ sys.exit(2)
125
+ result[key] = value
126
+ return result
127
+
128
+
129
+ def build_session_env_shell_fragment(session: str, env: dict[str, str]) -> str:
130
+ """Build a shell fragment of `tmux set-environment` calls for chained remote commands.
131
+
132
+ Returns a trailing `&& ` string ready to splice into an ssh-executed compound
133
+ command. Empty string if no env.
134
+ """
135
+ if not env:
136
+ return ""
137
+ parts = []
138
+ for key, value in env.items():
139
+ parts.append(
140
+ f"tmux set-environment -t {shlex.quote(session)} "
141
+ f"{shlex.quote(key)} {shlex.quote(value)}"
142
+ )
143
+ return " && ".join(parts) + " && "
84
144
 
85
145
 
86
146
  def build_agent_command(session_type: str, roles: list[RoleConfig] | None = None, model: str | None = None) -> AgentCommand:
87
147
  """Build the agent command for a session.
88
148
 
89
149
  Args:
90
- session_type: Session type (e.g., "claude-bypass", "claudeglm-bypass", "bare")
150
+ session_type: Session type (e.g., "claude-bypass", "claude-auto", "pi-zai", "bare")
91
151
  roles: Optional list of roles to apply
92
- model: Optional model override (e.g., "haiku", "sonnet", "opus")
152
+ model: Optional model override (e.g., "haiku", "sonnet", "opus", "glm-5")
93
153
 
94
154
  Returns:
95
155
  AgentCommand with the command string and metadata
@@ -101,60 +161,47 @@ def build_agent_command(session_type: str, roles: list[RoleConfig] | None = None
101
161
  # Merge roles if provided
102
162
  merged = merge_roles(roles) if roles else None
103
163
 
104
- # === Claude Code via Z.AI GLM (must check before "claude" since "claudeglm" starts with "claude") ===
105
- if session_type.startswith("claudeglm"):
164
+ # === Pi coding agent via Z.AI GLM ===
165
+ if session_type.startswith("pi-zai"):
106
166
  config = load_config()
107
167
  zai = config.get("zai", {})
168
+ pi_config = config.get("pi", {})
108
169
 
109
- # Build env var prefix for command line (inline, so the running shell picks them up)
110
- env_prefix = (
111
- f"ANTHROPIC_AUTH_TOKEN={shlex.quote(zai.get('api_key', ''))} "
112
- f"ANTHROPIC_BASE_URL={shlex.quote(zai.get('base_url', 'https://api.z.ai/api/anthropic'))} "
113
- f"ANTHROPIC_DEFAULT_OPUS_MODEL={shlex.quote(zai.get('opus_model', 'glm-5'))} "
114
- f"ANTHROPIC_DEFAULT_SONNET_MODEL={shlex.quote(zai.get('sonnet_model', 'glm-5'))} "
115
- f"ANTHROPIC_DEFAULT_HAIKU_MODEL={shlex.quote(zai.get('haiku_model', 'glm-4.7-flash'))} "
116
- f"API_TIMEOUT_MS={shlex.quote(str(zai.get('timeout_ms', 3000000)))} "
117
- )
170
+ # Pi reads ZAI_API_KEY from env. We inject it via `tmux set-environment`
171
+ # (see inject_session_env) so the key never appears in `ps auxwww`.
172
+ pi_binary = pi_config.get("binary", "pi")
173
+ default_model = pi_config.get("default_model", "glm-5")
118
174
 
119
- parts = [env_prefix + "claude"]
175
+ parts = [pi_binary, "--provider", "zai"]
176
+ parts.extend(["--model", model or default_model])
120
177
 
121
- # Permission flags (same as claude-*)
122
- if session_type == "claudeglm-bypass":
123
- parts.append("--dangerously-skip-permissions")
124
- elif session_type == "claudeglm-restricted":
125
- parts.append("--tools Bash")
126
-
127
- # Model override
128
- if model:
129
- parts.append(f"--model {model}")
130
-
131
- # GLM-5 system prompt — replaces Claude's default identity with GLM-5 identity
132
- # while preserving all tool usage, safety, and behavioral instructions
133
- glm_prompt_path = Path(__file__).parent / "glm_system_prompt.md"
134
- glm_prompt = glm_prompt_path.read_text()
135
-
136
- # Append role instructions to the system prompt (not for restricted mode)
178
+ # Permission variants (pi has no permission system to bypass; variants
179
+ # translate to pi's --tools whitelist instead)
137
180
  temp_file = None
138
- if merged and session_type != "claudeglm-restricted":
139
- if merged.tools:
140
- parts.append(f"--tools {','.join(merged.tools)}")
141
-
142
- if merged.disallowed_tools:
143
- parts.append(f"--disallowedTools {','.join(merged.disallowed_tools)}")
144
-
145
- if merged.instructions:
146
- glm_prompt += "\n\n" + merged.instructions
147
-
148
- # Write combined system prompt to temp file
149
- f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
150
- f.write(glm_prompt)
151
- f.close()
152
- temp_file = f.name
153
- parts.append(f'--system-prompt "$(<{temp_file})"')
181
+ if session_type == "pi-zai-restricted":
182
+ parts.extend(["--tools", "read,grep,find,bash"])
183
+ elif session_type == "pi-zai-readonly":
184
+ parts.extend(["--tools", "read,grep,find"])
185
+ elif merged and merged.tools:
186
+ # Translate Claude tool names to pi's lowercase tool names.
187
+ # Pi only supports: read, bash, edit, write, grep, find, ls
188
+ pi_valid = {"read", "bash", "edit", "write", "grep", "find", "ls"}
189
+ pi_tools = [t.lower() for t in merged.tools if t.lower() in pi_valid]
190
+ if pi_tools:
191
+ parts.extend(["--tools", ",".join(pi_tools)])
192
+
193
+ # Role-based system prompt (skipped for restricted/readonly — those are curated contexts)
194
+ if merged and merged.instructions and session_type not in ("pi-zai-restricted", "pi-zai-readonly"):
195
+ f = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
196
+ f.write(merged.instructions)
197
+ f.close()
198
+ temp_file = f.name
199
+ parts.append(f'--append-system-prompt "$(<{temp_file})"')
154
200
 
155
201
  return AgentCommand(
156
202
  command=" ".join(parts),
157
203
  temp_file=temp_file,
204
+ env={"ZAI_API_KEY": zai.get("api_key", "")},
158
205
  )
159
206
 
160
207
  # === Claude Code ===
@@ -333,6 +380,27 @@ def tmux_session_exists(name: str) -> bool:
333
380
  return result.returncode == 0
334
381
 
335
382
 
383
+ def wait_for_shell_prompt(target: str, timeout: float = 2.0) -> None:
384
+ """Poll tmux capture-pane until the shell has drawn a prompt.
385
+
386
+ Prevents a race where send-keys fires before the shell is ready, causing
387
+ the command to appear in the pre-prompt buffer and again after the prompt
388
+ renders (looks like it ran twice).
389
+ """
390
+ import time
391
+ deadline = time.monotonic() + timeout
392
+ while time.monotonic() < deadline:
393
+ result = subprocess.run(
394
+ ["tmux", "capture-pane", "-t", target, "-p"],
395
+ capture_output=True, text=True,
396
+ )
397
+ if result.returncode == 0 and any(
398
+ c in result.stdout for c in ("$", "%", "#", "❯", "➜", ">")
399
+ ):
400
+ return
401
+ time.sleep(0.05)
402
+
403
+
336
404
  def _get_session_project_path(session: str) -> Path | None:
337
405
  """Get a session's project path from its tmux working directory.
338
406
 
@@ -3459,8 +3527,7 @@ def cmd_new(args) -> int:
3459
3527
 
3460
3528
  # Build agent command
3461
3529
  agent = build_agent_command(session_type, roles if roles else None)
3462
-
3463
-
3530
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
3464
3531
 
3465
3532
  agent_cmd = agent.command
3466
3533
 
@@ -3481,12 +3548,15 @@ def cmd_new(args) -> int:
3481
3548
  except Exception as e:
3482
3549
  print(f"Warning: Failed to write system prompt to remote: {e}", file=sys.stderr)
3483
3550
 
3551
+ env_fragment = build_session_env_shell_fragment(session_name, agent.env)
3552
+
3484
3553
  # Create session - Agent starts immediately if not bare
3485
3554
  if agent_cmd:
3486
3555
  create_cmd = (
3487
3556
  f"tmux new-session -d -s {shlex.quote(session_name)} -c {shlex.quote(remote_path)} && "
3488
3557
  f"tmux send-keys -t {shlex.quote(session_name)} 'cd {shlex.quote(remote_path)}' Enter && "
3489
3558
  f"sleep 0.1 && "
3559
+ f"{env_fragment}"
3490
3560
  f"tmux send-keys -t {shlex.quote(session_name)} {shlex.quote(agent_cmd)} Enter"
3491
3561
  )
3492
3562
  else:
@@ -3627,9 +3697,13 @@ def cmd_new(args) -> int:
3627
3697
  # Build agent command
3628
3698
  model_override = getattr(args, 'model', None)
3629
3699
  agent = build_agent_command(session_type, roles if roles else None, model=model_override)
3700
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
3630
3701
 
3631
3702
  agent_cmd = agent.command
3632
3703
 
3704
+ # Inject secrets via tmux set-environment (keeps keys out of `ps`)
3705
+ inject_session_env(session_name, agent.env)
3706
+
3633
3707
  # Start agent command if not bare
3634
3708
  if agent_cmd:
3635
3709
  subprocess.run(
@@ -4127,10 +4201,17 @@ def cmd_spawn(args) -> int:
4127
4201
 
4128
4202
  # Build agent command
4129
4203
  agent = build_agent_command(session_type_str, roles if roles else None)
4204
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
4130
4205
 
4131
4206
  agent_cmd = agent.command
4132
4207
 
4133
4208
  try:
4209
+ # Inject secrets onto the parent session before spawning the pane so the
4210
+ # new pane inherits them from tmux (avoids putting keys in `ps`).
4211
+ parent_session = session or pane_manager.get_current_session()
4212
+ if parent_session:
4213
+ inject_session_env(parent_session, agent.env)
4214
+
4134
4215
  # Spawn pane first to get the pane index
4135
4216
  pane_index = pane_manager.spawn_worker_pane(
4136
4217
  session=session,
@@ -4507,12 +4588,15 @@ def cmd_recreate(args) -> int:
4507
4588
 
4508
4589
  # Build agent command using the standard function
4509
4590
  agent = build_agent_command(session_type_str)
4591
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
4510
4592
  agent_cmd = agent.command
4593
+ env_fragment = build_session_env_shell_fragment(session_name, agent.env)
4511
4594
 
4512
4595
  create_cmd = (
4513
4596
  f"tmux new-session -d -s {shlex.quote(session_name)} -c {shlex.quote(session_path)} && "
4514
4597
  f"tmux send-keys -t {shlex.quote(session_name)} 'cd {shlex.quote(session_path)}' Enter && "
4515
4598
  f"sleep 0.1 && "
4599
+ f"{env_fragment}"
4516
4600
  f"tmux send-keys -t {shlex.quote(session_name)} {shlex.quote(agent_cmd)} Enter"
4517
4601
  )
4518
4602
 
@@ -4609,6 +4693,7 @@ def cmd_recreate(args) -> int:
4609
4693
 
4610
4694
  # Build agent command
4611
4695
  agent = build_agent_command(session_type_str, roles)
4696
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
4612
4697
 
4613
4698
  agent_cmd = agent.command
4614
4699
 
@@ -4625,6 +4710,9 @@ def cmd_recreate(args) -> int:
4625
4710
  )
4626
4711
  time.sleep(0.1)
4627
4712
 
4713
+ # Inject secrets via tmux set-environment (keeps keys out of `ps`)
4714
+ inject_session_env(session_name, agent.env)
4715
+
4628
4716
  # Start the agent with appropriate command
4629
4717
  if agent_cmd:
4630
4718
  subprocess.run(
@@ -4689,6 +4777,7 @@ def cmd_worktree(args) -> int:
4689
4777
  'force': False, 'bare': False, 'restricted': False, 'prompted': False,
4690
4778
  'type': getattr(args, 'type', None), 'roles': getattr(args, 'roles', None),
4691
4779
  'instructions': None, 'persist': False,
4780
+ 'env': getattr(args, 'env', None),
4692
4781
  })())
4693
4782
 
4694
4783
  # If worktree already exists, reattach
@@ -4881,13 +4970,16 @@ def cmd_fork(args) -> int:
4881
4970
 
4882
4971
  # Build agent command
4883
4972
  agent = build_agent_command(session_type_str, roles)
4973
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
4884
4974
 
4885
4975
  agent_cmd = agent.command
4976
+ env_fragment = build_session_env_shell_fragment(target_session, agent.env)
4886
4977
 
4887
4978
  create_session_cmd = (
4888
4979
  f"tmux new-session -d -s {shlex.quote(target_session)} -c {shlex.quote(target_path)} && "
4889
4980
  f"tmux send-keys -t {shlex.quote(target_session)} 'cd {shlex.quote(target_path)}' Enter && "
4890
4981
  f"sleep 0.1 && "
4982
+ f"{env_fragment}"
4891
4983
  f"tmux send-keys -t {shlex.quote(target_session)} {shlex.quote(agent_cmd)} Enter"
4892
4984
  )
4893
4985
 
@@ -5034,6 +5126,10 @@ def cmd_fork(args) -> int:
5034
5126
 
5035
5127
  # Build agent command
5036
5128
  agent = build_agent_command(session_type_str, roles)
5129
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
5130
+
5131
+ # Inject secrets via tmux set-environment (keeps keys out of `ps`)
5132
+ inject_session_env(target_session, agent.env)
5037
5133
 
5038
5134
  agent_cmd = agent.command
5039
5135
  if agent_cmd:
@@ -5147,7 +5243,12 @@ def cmd_fork(args) -> int:
5147
5243
 
5148
5244
  # Build agent command
5149
5245
  agent = build_agent_command(session_type_str, roles)
5246
+ agent.env.update(parse_env_args(getattr(args, 'env', None)))
5150
5247
  agent_cmd = agent.command
5248
+
5249
+ # Inject secrets via tmux set-environment (keeps keys out of `ps`)
5250
+ inject_session_env(target_session, agent.env)
5251
+
5151
5252
  if agent_cmd:
5152
5253
  subprocess.run(
5153
5254
  ["tmux", "send-keys", "-t", target_session, agent_cmd, "Enter"],
@@ -5745,8 +5846,12 @@ def cmd_dev(args) -> int:
5745
5846
  "tmux", "new-session", "-d", "-s", session_name, "-c", str(project_dir),
5746
5847
  ])
5747
5848
 
5849
+ # Inject secrets via tmux set-environment (keeps keys out of `ps`)
5850
+ inject_session_env(session_name, agent.env)
5851
+
5748
5852
  # Start agent with agentwire config
5749
5853
  if agent_cmd:
5854
+ wait_for_shell_prompt(session_name)
5750
5855
  subprocess.run([
5751
5856
  "tmux", "send-keys", "-t", session_name, agent_cmd, "Enter",
5752
5857
  ])
@@ -6103,6 +6208,23 @@ def cmd_doctor(args) -> int:
6103
6208
  print(" [..] claude: not found (optional, use --bare sessions or other agents)")
6104
6209
  print(" Install: https://github.com/anthropics/claude-code")
6105
6210
 
6211
+ # Check Pi coding agent (optional, for pi-zai session types)
6212
+ pi_path = shutil.which("pi")
6213
+ if pi_path:
6214
+ try:
6215
+ # Pi prints --version to stderr, so merge with stdout
6216
+ result = subprocess.run(
6217
+ [pi_path, "--version"],
6218
+ capture_output=True, text=True, timeout=5,
6219
+ )
6220
+ pi_version = (result.stdout + result.stderr).strip()
6221
+ print(f" [ok] pi: {pi_path} (v{pi_version})")
6222
+ except Exception:
6223
+ print(f" [ok] pi: {pi_path}")
6224
+ else:
6225
+ print(" [..] pi: not found (optional, required for pi-zai session types)")
6226
+ print(" Install: npm install -g @mariozechner/pi-coding-agent")
6227
+
6106
6228
  # 3. Check AgentWire scripts
6107
6229
  print("\nChecking AgentWire scripts...")
6108
6230
 
@@ -9888,11 +10010,12 @@ def main() -> int:
9888
10010
  new_parser.add_argument("-p", "--path", help="Working directory (default: ~/projects/<name>)")
9889
10011
  new_parser.add_argument("-f", "--force", action="store_true", help="Replace existing session")
9890
10012
  # Session type
9891
- new_parser.add_argument("--type", help="Session type (bare, claude-bypass, claude-prompted, claude-restricted, claudeglm-bypass, claudeglm-prompted, claudeglm-restricted, standard, worker, voice)")
10013
+ new_parser.add_argument("--type", help="Session type (bare, claude-bypass, claude-prompted, claude-restricted, pi-zai, pi-zai-restricted, pi-zai-readonly, standard, worker, voice)")
9892
10014
  # Roles
9893
10015
  new_parser.add_argument("--roles", help="Comma-separated list of roles (preserves existing config, defaults to agentwire for new projects)")
9894
10016
  new_parser.add_argument("--model", help="Model override (e.g., haiku, sonnet, opus)")
9895
10017
  new_parser.add_argument("--persist", action="store_true", help="Write --type/--roles to .agentwire.yml (default: session-level override only)")
10018
+ new_parser.add_argument("--env", action="append", metavar="KEY=VAL", help="Inject env var via `tmux set-environment` (repeatable, keeps secrets out of `ps`)")
9896
10019
  new_parser.add_argument("--json", action="store_true", help="Output as JSON")
9897
10020
  new_parser.set_defaults(func=cmd_new)
9898
10021
 
@@ -9923,10 +10046,11 @@ def main() -> int:
9923
10046
  spawn_parser.add_argument("-s", "--session", help="Target session (default: auto-detect)")
9924
10047
  spawn_parser.add_argument("--cwd", help="Working directory (default: current)")
9925
10048
  spawn_parser.add_argument("--branch", "-b", help="Create worktree on this branch for isolated commits")
9926
- spawn_parser.add_argument("--type", help="Session type (claude-bypass, claude-prompted, claude-restricted, claudeglm-bypass, claudeglm-prompted, claudeglm-restricted)")
10049
+ spawn_parser.add_argument("--type", help="Session type (claude-bypass, claude-prompted, claude-restricted, pi-zai, pi-zai-restricted, pi-zai-readonly)")
9927
10050
  spawn_parser.add_argument("--roles", default="worker", help="Comma-separated roles (default: worker)")
9928
10051
  spawn_parser.add_argument("--no-wait", action="store_true", help="Don't wait for worker to be ready (default: wait up to 30s)")
9929
10052
  spawn_parser.add_argument("--timeout", type=int, default=30, help="Seconds to wait for worker ready (default: 30)")
10053
+ spawn_parser.add_argument("--env", action="append", metavar="KEY=VAL", help="Inject env var onto parent session (repeatable)")
9930
10054
  spawn_parser.add_argument("--json", action="store_true", help="Output as JSON")
9931
10055
  spawn_parser.set_defaults(func=cmd_spawn)
9932
10056
 
@@ -9961,7 +10085,8 @@ def main() -> int:
9961
10085
  recreate_parser = subparsers.add_parser("recreate", help="Destroy and recreate session with fresh worktree")
9962
10086
  recreate_parser.add_argument("-s", "--session", required=True, help="Session name (project/branch or project/branch@machine)")
9963
10087
  # Session type
9964
- recreate_parser.add_argument("--type", help="Session type (bare, claude-bypass, claude-prompted, claude-restricted, claudeglm-bypass, claudeglm-prompted, claudeglm-restricted, standard, worker, voice)")
10088
+ recreate_parser.add_argument("--type", help="Session type (bare, claude-bypass, claude-prompted, claude-restricted, pi-zai, pi-zai-restricted, pi-zai-readonly, standard, worker, voice)")
10089
+ recreate_parser.add_argument("--env", action="append", metavar="KEY=VAL", help="Inject env var via `tmux set-environment` (repeatable)")
9965
10090
  recreate_parser.add_argument("--json", action="store_true", help="Output as JSON")
9966
10091
  recreate_parser.set_defaults(func=cmd_recreate)
9967
10092
 
@@ -9970,8 +10095,9 @@ def main() -> int:
9970
10095
  fork_parser.add_argument("-s", "--source", required=True, help="Source session (project or project/branch)")
9971
10096
  fork_parser.add_argument("-t", "--target", required=True, help="Target session (must include branch: project/new-branch)")
9972
10097
  # Session type
9973
- fork_parser.add_argument("--type", help="Session type (bare, claude-bypass, claude-prompted, claude-restricted, claudeglm-bypass, claudeglm-prompted, claudeglm-restricted, standard, worker, voice)")
10098
+ fork_parser.add_argument("--type", help="Session type (bare, claude-bypass, claude-prompted, claude-restricted, pi-zai, pi-zai-restricted, pi-zai-readonly, standard, worker, voice)")
9974
10099
  fork_parser.add_argument("--commit", metavar="REF", help="Fork from this commit/ref instead of HEAD (e.g. abc123, main~5)")
10100
+ fork_parser.add_argument("--env", action="append", metavar="KEY=VAL", help="Inject env var via `tmux set-environment` (repeatable)")
9975
10101
  fork_parser.add_argument("--json", action="store_true", help="Output as JSON")
9976
10102
  fork_parser.set_defaults(func=cmd_fork)
9977
10103
 
@@ -9985,6 +10111,7 @@ def main() -> int:
9985
10111
  wt_parser.add_argument("--project", "-p", help="Path to git repo (default: from config or cwd)")
9986
10112
  wt_parser.add_argument("--type", help="Session type override")
9987
10113
  wt_parser.add_argument("--roles", help="Comma-separated role names")
10114
+ wt_parser.add_argument("--env", action="append", metavar="KEY=VAL", help="Inject env var via `tmux set-environment` (repeatable)")
9988
10115
  wt_parser.add_argument("--json", action="store_true", help="Output as JSON")
9989
10116
  wt_parser.set_defaults(func=cmd_worktree)
9990
10117
 
@@ -9994,6 +10121,70 @@ def main() -> int:
9994
10121
  )
9995
10122
  dev_parser.set_defaults(func=cmd_dev)
9996
10123
 
10124
+ # === workflow command group ===
10125
+ from agentwire.workflows.cli import (
10126
+ cmd_workflow_history,
10127
+ cmd_workflow_list,
10128
+ cmd_workflow_run,
10129
+ cmd_workflow_show,
10130
+ cmd_workflow_validate,
10131
+ )
10132
+
10133
+ workflow_parser = subparsers.add_parser("workflow", help="Pi workflow engine")
10134
+ workflow_subparsers = workflow_parser.add_subparsers(dest="workflow_command")
10135
+
10136
+ wf_list = workflow_subparsers.add_parser("list", help="List discoverable workflows")
10137
+ wf_list.add_argument("--json", action="store_true", help="Output as JSON")
10138
+ wf_list.set_defaults(func=cmd_workflow_list)
10139
+
10140
+ wf_validate = workflow_subparsers.add_parser(
10141
+ "validate", help="Validate a workflow YAML without running it"
10142
+ )
10143
+ wf_validate.add_argument("workflow", help="Workflow name or path to YAML")
10144
+ wf_validate.set_defaults(func=cmd_workflow_validate)
10145
+
10146
+ wf_run = workflow_subparsers.add_parser("run", help="Execute a workflow")
10147
+ wf_run.add_argument("workflow", help="Workflow name or path to YAML")
10148
+ wf_run.add_argument(
10149
+ "--input", action="append", metavar="KEY=VALUE",
10150
+ help="Workflow input (repeatable). Overrides --input-file."
10151
+ )
10152
+ wf_run.add_argument(
10153
+ "--input-file", metavar="PATH",
10154
+ help="JSON file with inputs (object mapping name → value)"
10155
+ )
10156
+ wf_run.add_argument("--dry-run", action="store_true", help="Print plan without running")
10157
+ wf_run.add_argument("--verbose", "-v", action="store_true", help="Verbose output")
10158
+ wf_run.add_argument("--json", action="store_true", help="Output as JSON")
10159
+ wf_run.set_defaults(func=cmd_workflow_run)
10160
+
10161
+ wf_history = workflow_subparsers.add_parser(
10162
+ "history", help="List past workflow runs"
10163
+ )
10164
+ wf_history.add_argument(
10165
+ "--workflow", metavar="NAME", help="Filter by workflow name"
10166
+ )
10167
+ wf_history.add_argument(
10168
+ "--limit", type=int, default=20, help="Max runs to show (default: 20)"
10169
+ )
10170
+ wf_history.add_argument("--json", action="store_true", help="Output as JSON")
10171
+ wf_history.set_defaults(func=cmd_workflow_history)
10172
+
10173
+ wf_show = workflow_subparsers.add_parser(
10174
+ "show", help="Inspect a past workflow run"
10175
+ )
10176
+ wf_show.add_argument("run_id", help="Run ID (from `workflow history`)")
10177
+ wf_show.add_argument(
10178
+ "--events", action="store_true",
10179
+ help="Dump raw event JSONL for all nodes",
10180
+ )
10181
+ wf_show.add_argument(
10182
+ "--node", metavar="ID",
10183
+ help="Filter events to one node id (implies --events)",
10184
+ )
10185
+ wf_show.add_argument("--json", action="store_true", help="Output as JSON")
10186
+ wf_show.set_defaults(func=cmd_workflow_show)
10187
+
9997
10188
  # === listen command group ===
9998
10189
  listen_parser = subparsers.add_parser("listen", help="Voice input recording")
9999
10190
  listen_parser.add_argument(
@@ -74,6 +74,7 @@ class ProjectsConfig:
74
74
 
75
75
  dir: Path = field(default_factory=lambda: Path.home() / "projects")
76
76
  worktrees: WorktreesConfig = field(default_factory=WorktreesConfig)
77
+ extra: list = field(default_factory=list)
77
78
 
78
79
  def __post_init__(self):
79
80
  self.dir = _expand_path(self.dir) or Path.home() / "projects"
@@ -355,6 +356,7 @@ def _dict_to_config(data: dict) -> Config:
355
356
  projects = ProjectsConfig(
356
357
  dir=projects_data.get("dir", "~/projects"),
357
358
  worktrees=worktrees,
359
+ extra=projects_data.get("extra", []),
358
360
  )
359
361
 
360
362
  # TTS