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.
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/PKG-INFO +1 -1
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/__init__.py +1 -1
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/__main__.py +244 -53
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/config.py +2 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/mcp_server.py +136 -1
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/overnight.py +4 -1
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/project_config.py +7 -7
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/projects.py +87 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/agentwire.md +1 -2
- agentwire_dev-1.22.0/agentwire/roles/notifications.md +83 -0
- agentwire_dev-1.22.0/agentwire/roles/orchestrator.md +92 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/scheduler.py +1 -1
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/server.py +178 -4
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/css/desktop.css +105 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/desktop-manager.js +9 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/desktop.js +9 -0
- agentwire_dev-1.22.0/agentwire/static/js/notifications-panel.js +138 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/sessions-section.js +4 -1
- agentwire_dev-1.22.0/agentwire/workflows/__init__.py +28 -0
- agentwire_dev-1.22.0/agentwire/workflows/cli.py +328 -0
- agentwire_dev-1.22.0/agentwire/workflows/context.py +52 -0
- agentwire_dev-1.22.0/agentwire/workflows/definitions.py +331 -0
- agentwire_dev-1.22.0/agentwire/workflows/node.py +115 -0
- agentwire_dev-1.22.0/agentwire/workflows/outputs.py +149 -0
- agentwire_dev-1.22.0/agentwire/workflows/pi_runner.py +238 -0
- agentwire_dev-1.22.0/agentwire/workflows/runner.py +364 -0
- agentwire_dev-1.22.0/agentwire/workflows/storage.py +186 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/PORTAL.md +1 -1
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/claude-code-auto-mode.md +5 -5
- agentwire_dev-1.22.0/docs/pi-zai.md +222 -0
- agentwire_dev-1.22.0/docs/workflows.md +317 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/pyproject.toml +2 -0
- agentwire_dev-1.22.0/tests/integration/test_build_agent_command.py +237 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_channels.py +4 -4
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_project_config.py +0 -9
- agentwire_dev-1.22.0/tests/unit/test_workflows.py +467 -0
- agentwire_dev-1.20.0/agentwire/glm_system_prompt.md +0 -81
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/README.md +0 -45
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/agent-prompt-explore.md +0 -62
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/agent-prompt-task-tool.md +0 -29
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-agent-memory-instructions.md +0 -25
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-agent-summary-generation.md +0 -20
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-censoring-assistance-with-malicious-activities.md +0 -6
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-chrome-browser-mcp-tools.md +0 -14
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-claude-in-chrome-browser-automation.md +0 -51
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-conditional-delegate-codebase-exploration.md +0 -21
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-context-compaction-summary.md +0 -28
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-doing-tasks.md +0 -18
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-executing-actions-with-care.md +0 -15
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-git-status.md +0 -20
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-hooks-configuration.md +0 -161
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-at-a-glance-summary.md +0 -55
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-friction-analysis.md +0 -16
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-on-the-horizon.md +0 -16
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-session-facets-extraction.md +0 -31
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-insights-suggestions.md +0 -44
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-learning-mode-insights.md +0 -15
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-learning-mode.md +0 -80
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-main-system-prompt.md +0 -17
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-option-previewer.md +0 -14
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-parallel-tool-call-note-part-of-tool-usage-policy.md +0 -6
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-scratchpad-directory.md +0 -22
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-skillify-current-session.md +0 -139
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-task-management.md +0 -53
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-teammate-communication.md +0 -15
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tone-and-style.md +0 -19
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-execution-denied.md +0 -6
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-permission-mode.md +0 -9
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-usage-policy.md +0 -18
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/system-prompt-tool-use-summary-generation.md +0 -21
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-askuserquestion.md +0 -19
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-bash-git-commit-and-pr-creation-instructions.md +0 -95
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-bash-sandbox-note.md +0 -27
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-bash.md +0 -66
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-computer.md +0 -9
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-edit.md +0 -15
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-enterplanmode.md +0 -83
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-enterworktree.md +0 -32
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-exitplanmode.md +0 -28
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-glob.md +0 -11
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-grep.md +0 -19
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-lsp.md +0 -24
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-notebookedit.md +0 -6
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-readfile.md +0 -27
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-sendmessagetool.md +0 -144
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-skill.md +0 -28
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-sleep.md +0 -18
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-task.md +0 -77
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-taskcreate.md +0 -48
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-tasklist-teammate-workflow.md +0 -14
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-teamdelete.md +0 -18
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-teammatetool.md +0 -115
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-todowrite.md +0 -189
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-toolsearch-extended.md +0 -69
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-toolsearch.md +0 -14
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-webfetch.md +0 -23
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-websearch.md +0 -33
- agentwire_dev-1.20.0/docs/claude-code-system-prompt/tool-description-write.md +0 -14
- agentwire_dev-1.20.0/tests/integration/test_build_agent_command.py +0 -135
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/FUNDING.yml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/.gitignore +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CHANGELOG.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CLA.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CODE_OF_CONDUCT.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/CONTRIBUTING.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/Dockerfile.local +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/Dockerfile.runpod +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/LICENSE +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/README.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/RELEASING.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/SECURITY.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/SPONSORS.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/agents/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/agents/base.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/agents/tmux.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/bridges/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/bridges/telegram.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/cached_status.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/_template.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/base.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/discord.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/email.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/quo.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/slack.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/sms.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/telegram.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/channels/webhook.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/cli_safety.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/completion.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/errors.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/history.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/agentwire-permission.sh +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/hooks/idle-handler.sh +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/init_agentwire.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/listen.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/locking.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/network.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/onboarding.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/pane_manager.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/prompts/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/prompts/init.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/channel-admin.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/chatbot.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/discord-dm.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/init.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/slack-dm.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/task-runner.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/voice.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/roles/worker.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-Echo--black.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-Echo--transparent.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-Echo.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-email-banner.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--full--transparent-top.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--full-black.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--telephone-fg.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--transparent-top.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--transparent.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/agentwire-splash-logo-layers.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/favicon.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/android.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/automaton.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/bot.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/cyborg.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/droid.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/drone.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/guardian.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/mech.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/probe.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/robot.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/sentinel.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/machines/unit.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/blob.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/cloud.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/crystal.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/cyclops.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/flame.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/fuzzy.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/horned.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/moon.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/slime.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/star.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/tentacle.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/projects/winged.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/bear.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/cat.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/crown.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/custom/agentwire-portal.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/custom/agentwire-tts.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/custom/agentwire.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/deer.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/drone.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/eagle.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/fox.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/hawk.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/horse.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/lion.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/rabbit.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/robot.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/tiger.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/icons/sessions/wolf.jpeg +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/.gitkeep +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/artifact-window.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/components/icon-picker.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/components/list-card.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/components/type-tag.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/icon-manager.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/session-window.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/config-section.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/services-section.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar/socials-section.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/sidebar.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/tile-manager.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/utils/auto-refresh.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/static/js/windows/chat-window.js +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/base.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/server_backend.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/stt_server.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/stt/whisperkit.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tasks.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/base.html +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/desktop.html +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/email_notification.html +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templates/tmux.conf +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/templating.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/aws.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/docker.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/gcp.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/gh.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/git.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/gws.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/kubectl.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/npm.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/terraform.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tooldefs/uv.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/base.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/chatterbox.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/kokoro.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/qwen_base.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/qwen_custom.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/qwen_design.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/engines/zonos.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/registry.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts/runpod_handler.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tts_server.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/tunnels.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/__init__.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/chunker.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/file_io.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/paths.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/utils/subprocess.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/validation.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voiceclone.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/darren.wav +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/default.wav +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/jessica.wav +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/lisa.wav +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/voices/may.wav +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/agentwire/worktree.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/FEATURE-REQUESTS.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/FR-auto-mode-session-type.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/SHELL_ESCAPING.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/SPONSORS.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/TROUBLESHOOTING.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/README.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-agent-hot-swap.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-ambient-context-stream.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-ambient-listening-mode.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-audio-cues.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-checkpoint-commits.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-context-compression-protocol.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-context-window-gauge.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-contextual-bookmarks.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-conversation-archaeology.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-cost-tracking-dashboard.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-cross-session-events.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-delegation-replay.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-device-session-tethering.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-failure-memory.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-notification-escalation.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-periodic-voice-briefings.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-presence-aware-sessions.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-drift-detection.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-energy-model.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-handshake.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-momentum.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-replay.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-snapshots.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-templates.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-session-thermal-throttling.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-smart-session-routing.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-spatial-voice-mixing.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-speculative-execution.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-task-pipeline-chaining.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-task-pivot-protocol.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-task-time-budgets.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-activity-zones.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-breakpoints.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-code-review.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-command-undo.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-handoff.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-identity.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-interrupts-v2.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-interrupts.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-macros.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-voice-transcript-logs.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-watchdog-mode.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-fencing.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-file-coordination.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-health-dashboard.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-heartbeat-watchdog.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-progress-streaming.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-proof-of-work.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-worker-warmup.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/brainstorms/idea-x-api-integration.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/channels.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/critical-analysis.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/demo-script.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/gws-google-workspace-cli.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/hammerspoon.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/pending-code-changes.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/projects-dedup-ignores-machine.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/remote-tts-session-detection.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/tmux-config-onboarding.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/tmux-paste-freeze.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/issues/tmux-recommended-config.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/logo.png +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/notification-hooks.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/progressive-loading-pattern.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/prompts/agentwire-website.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/releasing.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/remote-access.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/remote-machines.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/runpod-tts.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/scheduled-workloads.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/security/damage-control-migration.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/security/damage-control.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/tmux-hooks.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/tts-self-hosted.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/docs/youtube-channel.md +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/requirements-tts.txt +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/conftest.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/e2e/test_portal_ui.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/fixtures/sample_agentwire.yml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/fixtures/sample_config.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/fixtures/sample_scheduler.yaml +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_channels_cli.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_cli_commands.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_cli_output.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_mcp_tools.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_portal_api.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/integration/test_scheduler_board.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_cli_safety.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_config.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_file_io.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_history.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_locking.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_mcp_server.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_roles.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_scheduler.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_server_async.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_server_pure.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_tasks.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_templating.py +0 -0
- {agentwire_dev-1.20.0 → agentwire_dev-1.22.0}/tests/unit/test_worktree.py +0 -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", "
|
|
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
|
-
# ===
|
|
105
|
-
if session_type.startswith("
|
|
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
|
-
#
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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 = [
|
|
175
|
+
parts = [pi_binary, "--provider", "zai"]
|
|
176
|
+
parts.extend(["--model", model or default_model])
|
|
120
177
|
|
|
121
|
-
# Permission
|
|
122
|
-
|
|
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
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|