agentirc-cli 0.10.5__tar.gz → 0.10.7__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.
- agentirc_cli-0.10.7/.claude/skills/pr-review/SKILL.md +184 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/CHANGELOG.md +16 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/PKG-INFO +1 -1
- agentirc_cli-0.10.7/agentirc/__init__.py +1 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/cli.py +22 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/irc_transport.py +7 -1
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/irc_transport.py +7 -1
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/irc_transport.py +7 -1
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/irc_transport.py +7 -1
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/irc_transport.py +7 -1
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/pyproject.toml +1 -1
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_irc_transport.py +48 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/uv.lock +1 -1
- agentirc_cli-0.10.5/agentirc/__init__.py +0 -1
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/.gitignore +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/.pr_agent.toml +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/CLAUDE.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/CNAME +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/Gemfile +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/Gemfile.lock +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/LICENSE +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/README.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/_config.yml +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/__main__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/config.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/ipc.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/socket_server.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/supervisor.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/claude/webhook.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/config.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/ipc.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/skill/SKILL.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/socket_server.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/supervisor.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/codex/webhook.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/config.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/ipc.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/skill/SKILL.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/copilot/webhook.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/agent_runner.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/config.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/ipc.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/message_buffer.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/skill/SKILL.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/skill/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/skill/irc_client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/socket_server.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/supervisor.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/clients/opencode/webhook.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/observer.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/pidfile.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/protocol/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/protocol/commands.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/protocol/extensions/federation.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/protocol/extensions/history.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/protocol/message.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/protocol/protocol-index.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/protocol/replies.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/__main__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/channel.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/config.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/ircd.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/remote_client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/server_link.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/skill.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/skills/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/agentirc/server/skills/history.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/agent-client.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/agent-harness-spec.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/ci.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/cli.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/opencode/configuration.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/opencode/context-management.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/opencode/irc-tools.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/opencode/overview.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/opencode/setup.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/opencode/supervisor.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/clients/opencode/webhooks.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/codex-backend.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/copilot-backend.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/design.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/docs-site.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/getting-started.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/grow-your-agent.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/layer1-core-irc.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/layer2-attention.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/layer3-skills.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/layer4-federation.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/layer5-agent-harness.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/opencode-backend.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/publishing.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/server-architecture.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases/10-grow-your-agent.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/use-cases-index.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/index.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/plugins/codex/skills/agentirc-irc/SKILL.md +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/__init__.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/conftest.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_channel.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_connection.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_discovery.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_federation.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_history.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_ipc.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_mentions.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_message.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_messaging.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_modes.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_opencode_daemon.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_skill_client.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_skills.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_socket_server.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_supervisor.py +0 -0
- {agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/tests/test_webhook.py +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-review
|
|
3
|
+
description: >
|
|
4
|
+
Full PR workflow for agentirc: branch, commit, push, create PR, wait for
|
|
5
|
+
automated reviewers, fetch comments, fix or pushback, reply, resolve threads.
|
|
6
|
+
Use when: creating PRs, handling review feedback, or the user says
|
|
7
|
+
"create PR", "review comments", "address feedback", or "resolve threads".
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PR Review Workflow
|
|
11
|
+
|
|
12
|
+
Complete pull request lifecycle for the agentirc project. Follow every step
|
|
13
|
+
in order.
|
|
14
|
+
|
|
15
|
+
## Step 1 — Branch
|
|
16
|
+
|
|
17
|
+
If you are on `main`, create a feature branch first:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
git checkout -b <branch-name>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Branch naming conventions:
|
|
24
|
+
|
|
25
|
+
| Type | Pattern | Example |
|
|
26
|
+
|------|---------|---------|
|
|
27
|
+
| Bug fix | `fix/<short-desc>` | `fix/server-not-running-crash` |
|
|
28
|
+
| Feature | `feat/<short-desc>` | `feat/webhook-alerts` |
|
|
29
|
+
| Docs | `docs/<short-desc>` | `docs/protocol-extensions` |
|
|
30
|
+
|
|
31
|
+
## Step 2 — Make changes, commit, push
|
|
32
|
+
|
|
33
|
+
1. Edit code
|
|
34
|
+
2. Run tests: `uv run pytest tests/ -x -q`
|
|
35
|
+
3. Bump the version (required before PR):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
echo '{"fixed":["..."]}' | python3 ~/.claude/skills/version-bump/scripts/bump.py patch
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
4. Stage and commit:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
git add <files>
|
|
45
|
+
git commit -m "$(cat <<'EOF'
|
|
46
|
+
Commit message here.
|
|
47
|
+
|
|
48
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
49
|
+
EOF
|
|
50
|
+
)"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
5. Push:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git push -u origin <branch-name>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Step 3 — Create PR
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
gh pr create --title "Short title" --body "$(cat <<'EOF'
|
|
63
|
+
## Summary
|
|
64
|
+
- Bullet points describing changes
|
|
65
|
+
|
|
66
|
+
## Test plan
|
|
67
|
+
- [ ] Test items
|
|
68
|
+
|
|
69
|
+
- Claude
|
|
70
|
+
EOF
|
|
71
|
+
)"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Step 4 — Wait for reviewers
|
|
75
|
+
|
|
76
|
+
Automated reviewers (Qodo, Copilot) need time to post comments.
|
|
77
|
+
|
|
78
|
+
**Wait 5 minutes** after creating the PR before checking for comments:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
sleep 300
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Step 5 — Poll for comments
|
|
85
|
+
|
|
86
|
+
After the initial wait, poll every 60 seconds until comments appear:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
bash ~/.claude/skills/pr-review/scripts/pr-comments.sh <PR_NUMBER>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
If no comments yet, wait and retry:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
sleep 60
|
|
96
|
+
bash ~/.claude/skills/pr-review/scripts/pr-comments.sh <PR_NUMBER>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Continue until at least one unresolved comment exists, or 3 consecutive polls
|
|
100
|
+
return zero comments (reviewers are done / not configured).
|
|
101
|
+
|
|
102
|
+
## Step 6 — Triage each comment
|
|
103
|
+
|
|
104
|
+
For every review comment, decide:
|
|
105
|
+
|
|
106
|
+
- **FIX** — valid concern, make the code change
|
|
107
|
+
- **PUSHBACK** — disagree, explain why in the reply
|
|
108
|
+
|
|
109
|
+
Guidelines:
|
|
110
|
+
|
|
111
|
+
- Exception type mismatches (e.g., breaking reconnect loops) are always valid
|
|
112
|
+
- Test requests are always valid — add them
|
|
113
|
+
- Style nits are usually valid — fix them
|
|
114
|
+
- Architecture opinions may warrant pushback if they conflict with project
|
|
115
|
+
conventions (check `CLAUDE.md` and `docs/`)
|
|
116
|
+
|
|
117
|
+
## Step 7 — Fix code and push
|
|
118
|
+
|
|
119
|
+
1. Make all code fixes
|
|
120
|
+
2. Run tests: `uv run pytest tests/ -x -q`
|
|
121
|
+
3. Commit with a descriptive message
|
|
122
|
+
4. Push: `git push`
|
|
123
|
+
|
|
124
|
+
## Step 8 — Reply and resolve threads
|
|
125
|
+
|
|
126
|
+
Use batch mode to reply to all comments at once:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
bash ~/.claude/skills/pr-review/scripts/pr-batch.sh --resolve <PR_NUMBER> <<'EOF'
|
|
130
|
+
{"comment_id": 123, "body": "Fixed -- changed X to Y.\n\n- Claude"}
|
|
131
|
+
{"comment_id": 456, "body": "Intentional -- this follows the pattern in Z because...\n\n- Claude"}
|
|
132
|
+
EOF
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Or reply to a single comment:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
bash ~/.claude/skills/pr-review/scripts/pr-reply.sh --resolve <PR_NUMBER> <COMMENT_ID> "Fixed -- updated.\n\n- Claude"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Important:**
|
|
142
|
+
|
|
143
|
+
- Always sign replies with `\n\n- Claude`
|
|
144
|
+
- Always use `--resolve` to resolve the thread after replying
|
|
145
|
+
- Every comment must get a reply — no silent fixes
|
|
146
|
+
|
|
147
|
+
## Step 9 — Wait for merge
|
|
148
|
+
|
|
149
|
+
**Never merge the PR yourself.** The PR is merged manually on the GitHub site.
|
|
150
|
+
|
|
151
|
+
Report completion back to the IRC channel:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Using the IRC skill
|
|
155
|
+
AGENTIRC_NICK=<your-nick> python3 -m agentirc.clients.claude.skill.irc_client \
|
|
156
|
+
send "#general" "PR #<N> — all review threads addressed and resolved. Ready for merge."
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Script reference
|
|
160
|
+
|
|
161
|
+
| Script | Purpose |
|
|
162
|
+
|--------|---------|
|
|
163
|
+
| `pr-comments.sh <PR>` | Fetch all review comments |
|
|
164
|
+
| `pr-reply.sh [--resolve] <PR> <ID> "body"` | Reply to one comment |
|
|
165
|
+
| `pr-batch.sh [--resolve] <PR> < jsonl` | Batch reply from JSONL stdin |
|
|
166
|
+
|
|
167
|
+
All scripts auto-detect `owner/repo` from the current git remote.
|
|
168
|
+
|
|
169
|
+
## Quick reference — full flow
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
git checkout -b fix/my-fix
|
|
173
|
+
# ... make changes ...
|
|
174
|
+
uv run pytest tests/ -x -q
|
|
175
|
+
echo '{"fixed":["desc"]}' | python3 ~/.claude/skills/version-bump/scripts/bump.py patch
|
|
176
|
+
git add <files> && git commit -m "message"
|
|
177
|
+
git push -u origin fix/my-fix
|
|
178
|
+
gh pr create --title "..." --body "..."
|
|
179
|
+
sleep 300
|
|
180
|
+
bash ~/.claude/skills/pr-review/scripts/pr-comments.sh <PR>
|
|
181
|
+
# ... fix issues, commit, push ...
|
|
182
|
+
bash ~/.claude/skills/pr-review/scripts/pr-batch.sh --resolve <PR> <<< '{"comment_id":N,"body":"Fixed\n\n- Claude"}'
|
|
183
|
+
# Wait for manual merge — never merge yourself
|
|
184
|
+
```
|
|
@@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/).
|
|
6
6
|
|
|
7
|
+
## [0.10.7] - 2026-03-28
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Fix crash with cryptic asyncio Event loop is closed errors when starting agent without IRC server running
|
|
13
|
+
- Add server-running pre-check in CLI before starting agent daemon
|
|
14
|
+
- Wrap IRC transport connect in try/except for clear error on connection failure
|
|
15
|
+
|
|
16
|
+
## [0.10.6] - 2026-03-28
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Add start command suggestion to init collision output
|
|
22
|
+
|
|
7
23
|
## [0.10.5] - 2026-03-28
|
|
8
24
|
|
|
9
25
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.10.7"
|
|
@@ -351,6 +351,8 @@ def _cmd_init(args: argparse.Namespace) -> None:
|
|
|
351
351
|
print(f" Channels: {', '.join(channels)}", file=sys.stderr)
|
|
352
352
|
print(f" Model: {existing.model}", file=sys.stderr)
|
|
353
353
|
print(f" Config: {args.config}", file=sys.stderr)
|
|
354
|
+
print(file=sys.stderr)
|
|
355
|
+
print(f"Start with: agentirc start {full_nick}", file=sys.stderr)
|
|
354
356
|
sys.exit(1)
|
|
355
357
|
|
|
356
358
|
# Use backend-specific config for correct defaults
|
|
@@ -431,6 +433,26 @@ def _cmd_start(args: argparse.Namespace) -> None:
|
|
|
431
433
|
print("No agents configured", file=sys.stderr)
|
|
432
434
|
sys.exit(1)
|
|
433
435
|
|
|
436
|
+
# Best-effort check that the IRC server is reachable before starting agent(s)
|
|
437
|
+
import socket as _socket
|
|
438
|
+
|
|
439
|
+
server_name = config.server.name
|
|
440
|
+
host, port = config.server.host, config.server.port
|
|
441
|
+
try:
|
|
442
|
+
with _socket.create_connection((host, port), timeout=2):
|
|
443
|
+
pass
|
|
444
|
+
except (ConnectionRefusedError, OSError):
|
|
445
|
+
# TCP probe failed — add PID hint if available
|
|
446
|
+
hint = ""
|
|
447
|
+
server_pid = read_pid(f"server-{server_name}")
|
|
448
|
+
if not server_pid or not is_process_alive(server_pid):
|
|
449
|
+
hint = f"\nStart it with: agentirc server start --name {server_name}"
|
|
450
|
+
print(
|
|
451
|
+
f"Error: cannot connect to IRC server at {host}:{port}.{hint}",
|
|
452
|
+
file=sys.stderr,
|
|
453
|
+
)
|
|
454
|
+
sys.exit(1)
|
|
455
|
+
|
|
434
456
|
if len(agents) == 1:
|
|
435
457
|
# Run in foreground (single agent)
|
|
436
458
|
agent = agents[0]
|
|
@@ -35,7 +35,13 @@ class IRCTransport:
|
|
|
35
35
|
await self._do_connect()
|
|
36
36
|
|
|
37
37
|
async def _do_connect(self) -> None:
|
|
38
|
-
|
|
38
|
+
try:
|
|
39
|
+
self._reader, self._writer = await asyncio.open_connection(self.host, self.port)
|
|
40
|
+
except (ConnectionRefusedError, OSError) as exc:
|
|
41
|
+
raise ConnectionError(
|
|
42
|
+
f"Cannot connect to IRC server at {self.host}:{self.port} "
|
|
43
|
+
f"- is the server running?"
|
|
44
|
+
) from exc
|
|
39
45
|
await self._send_raw(f"NICK {self.nick}")
|
|
40
46
|
await self._send_raw(f"USER {self.user} 0 * :{self.user}")
|
|
41
47
|
self._read_task = asyncio.create_task(self._read_loop())
|
|
@@ -35,7 +35,13 @@ class IRCTransport:
|
|
|
35
35
|
await self._do_connect()
|
|
36
36
|
|
|
37
37
|
async def _do_connect(self) -> None:
|
|
38
|
-
|
|
38
|
+
try:
|
|
39
|
+
self._reader, self._writer = await asyncio.open_connection(self.host, self.port)
|
|
40
|
+
except (ConnectionRefusedError, OSError) as exc:
|
|
41
|
+
raise ConnectionError(
|
|
42
|
+
f"Cannot connect to IRC server at {self.host}:{self.port} "
|
|
43
|
+
f"- is the server running?"
|
|
44
|
+
) from exc
|
|
39
45
|
await self._send_raw(f"NICK {self.nick}")
|
|
40
46
|
await self._send_raw(f"USER {self.user} 0 * :{self.user}")
|
|
41
47
|
self._read_task = asyncio.create_task(self._read_loop())
|
|
@@ -35,7 +35,13 @@ class IRCTransport:
|
|
|
35
35
|
await self._do_connect()
|
|
36
36
|
|
|
37
37
|
async def _do_connect(self) -> None:
|
|
38
|
-
|
|
38
|
+
try:
|
|
39
|
+
self._reader, self._writer = await asyncio.open_connection(self.host, self.port)
|
|
40
|
+
except (ConnectionRefusedError, OSError) as exc:
|
|
41
|
+
raise ConnectionError(
|
|
42
|
+
f"Cannot connect to IRC server at {self.host}:{self.port} "
|
|
43
|
+
f"- is the server running?"
|
|
44
|
+
) from exc
|
|
39
45
|
await self._send_raw(f"NICK {self.nick}")
|
|
40
46
|
await self._send_raw(f"USER {self.user} 0 * :{self.user}")
|
|
41
47
|
self._read_task = asyncio.create_task(self._read_loop())
|
|
@@ -35,7 +35,13 @@ class IRCTransport:
|
|
|
35
35
|
await self._do_connect()
|
|
36
36
|
|
|
37
37
|
async def _do_connect(self) -> None:
|
|
38
|
-
|
|
38
|
+
try:
|
|
39
|
+
self._reader, self._writer = await asyncio.open_connection(self.host, self.port)
|
|
40
|
+
except (ConnectionRefusedError, OSError) as exc:
|
|
41
|
+
raise ConnectionError(
|
|
42
|
+
f"Cannot connect to IRC server at {self.host}:{self.port} "
|
|
43
|
+
f"- is the server running?"
|
|
44
|
+
) from exc
|
|
39
45
|
await self._send_raw(f"NICK {self.nick}")
|
|
40
46
|
await self._send_raw(f"USER {self.user} 0 * :{self.user}")
|
|
41
47
|
self._read_task = asyncio.create_task(self._read_loop())
|
|
@@ -36,7 +36,13 @@ class IRCTransport:
|
|
|
36
36
|
await self._do_connect()
|
|
37
37
|
|
|
38
38
|
async def _do_connect(self) -> None:
|
|
39
|
-
|
|
39
|
+
try:
|
|
40
|
+
self._reader, self._writer = await asyncio.open_connection(self.host, self.port)
|
|
41
|
+
except (ConnectionRefusedError, OSError) as exc:
|
|
42
|
+
raise ConnectionError(
|
|
43
|
+
f"Cannot connect to IRC server at {self.host}:{self.port} "
|
|
44
|
+
f"- is the server running?"
|
|
45
|
+
) from exc
|
|
40
46
|
await self._send_raw(f"NICK {self.nick}")
|
|
41
47
|
await self._send_raw(f"USER {self.user} 0 * :{self.user}")
|
|
42
48
|
self._read_task = asyncio.create_task(self._read_loop())
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import pytest
|
|
3
|
+
import re
|
|
3
4
|
from agentirc.clients.claude.irc_transport import IRCTransport
|
|
4
5
|
from agentirc.clients.claude.message_buffer import MessageBuffer
|
|
5
6
|
|
|
@@ -89,3 +90,50 @@ async def test_send_join_part(server):
|
|
|
89
90
|
await asyncio.sleep(0.2)
|
|
90
91
|
assert "#new" not in server.channels
|
|
91
92
|
await transport.disconnect()
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
@pytest.mark.asyncio
|
|
96
|
+
async def test_connect_raises_on_refused():
|
|
97
|
+
"""Connecting to an unreachable server raises ConnectionError with a clear message."""
|
|
98
|
+
buf = MessageBuffer()
|
|
99
|
+
transport = IRCTransport(
|
|
100
|
+
host="127.0.0.1", port=1, # nothing listens here
|
|
101
|
+
nick="testserv-bot", user="bot", channels=["#general"], buffer=buf,
|
|
102
|
+
)
|
|
103
|
+
with pytest.raises(ConnectionError, match=re.escape("127.0.0.1:1")):
|
|
104
|
+
await transport.connect()
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@pytest.mark.asyncio
|
|
108
|
+
async def test_reconnect_retries_after_connection_error(server):
|
|
109
|
+
"""The reconnect loop retries after ConnectionError instead of crashing."""
|
|
110
|
+
buf = MessageBuffer()
|
|
111
|
+
# Use a port where nothing listens so the first _do_connect fails
|
|
112
|
+
transport = IRCTransport(
|
|
113
|
+
host="127.0.0.1", port=1,
|
|
114
|
+
nick="testserv-bot", user="bot", channels=["#general"], buffer=buf,
|
|
115
|
+
)
|
|
116
|
+
transport._should_run = True
|
|
117
|
+
transport._reconnecting = False
|
|
118
|
+
|
|
119
|
+
# Patch _do_connect to fail once with ConnectionError, then succeed
|
|
120
|
+
call_count = 0
|
|
121
|
+
original_do_connect = transport._do_connect
|
|
122
|
+
|
|
123
|
+
async def patched_do_connect():
|
|
124
|
+
nonlocal call_count
|
|
125
|
+
call_count += 1
|
|
126
|
+
if call_count == 1:
|
|
127
|
+
raise ConnectionError("simulated failure")
|
|
128
|
+
# On retry, connect to the real server
|
|
129
|
+
transport.host = "127.0.0.1"
|
|
130
|
+
transport.port = server.config.port
|
|
131
|
+
await original_do_connect()
|
|
132
|
+
|
|
133
|
+
transport._do_connect = patched_do_connect
|
|
134
|
+
|
|
135
|
+
# _reconnect should retry and eventually succeed
|
|
136
|
+
await asyncio.wait_for(transport._reconnect(), timeout=5.0)
|
|
137
|
+
assert call_count >= 2
|
|
138
|
+
assert transport.connected or not transport._reconnecting
|
|
139
|
+
await transport.disconnect()
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.10.5"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/resources/github-copilot-sdk-instructions.md
RENAMED
|
File without changes
|
|
File without changes
|
{agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md
RENAMED
|
File without changes
|
|
File without changes
|
{agentirc_cli-0.10.5 → agentirc_cli-0.10.7}/docs/superpowers/specs/2026-03-19-agentirc-design.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|