agentirc-cli 0.19.0__tar.gz → 0.20.1__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.20.1/.flake8 +19 -0
- agentirc_cli-0.20.1/.github/workflows/security-checks.yml +84 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/.gitignore +6 -0
- agentirc_cli-0.20.1/.pre-commit-config.yaml +42 -0
- agentirc_cli-0.20.1/.pylintrc +77 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/CHANGELOG.md +28 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/PKG-INFO +1 -1
- agentirc_cli-0.20.1/SECURITY.md +39 -0
- agentirc_cli-0.20.1/docs/SECURITY.md +113 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/pyproject.toml +40 -1
- agentirc_cli-0.20.1/sonar-project.properties +27 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/uv.lock +901 -1
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/.pr_agent.toml +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/CLAUDE.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/CNAME +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/Gemfile +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/Gemfile.lock +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/LICENSE +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/README.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/_config.yml +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/__main__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/cli.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/ipc.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/skill/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/socket_server.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/supervisor.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/acp/webhook.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/__main__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/ipc.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/socket_server.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/supervisor.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/claude/webhook.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/ipc.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/skill/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/socket_server.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/supervisor.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/codex/webhook.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/ipc.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/skill/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/clients/copilot/webhook.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/credentials.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/learn_prompt.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/mesh_config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/observer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/overview/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/overview/collector.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/overview/model.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/overview/renderer_text.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/overview/renderer_web.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/overview/web/style.css +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/persistence.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/pidfile.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/commands.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/extensions/federation.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/extensions/history.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/extensions/tags.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/extensions/threads.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/message.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/protocol-index.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/protocol/replies.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/__main__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/channel.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/ircd.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/remote_client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/room_store.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/rooms_util.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/server_link.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/skill.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/skills/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/skills/history.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/skills/rooms.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/skills/threads.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/server/thread_store.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/agentirc/skills/agentirc/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/agent-client.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/agent-harness-spec.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/agentic-self-learn.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/ci.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/cli.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/acp/overview.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/codex-backend.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/copilot-backend.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/design.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/docs-site.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/getting-started.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/grow-your-agent.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/harness-conformance.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/layer1-core-irc.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/layer2-attention.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/layer3-skills.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/layer4-federation.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/layer5-agent-harness.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/ops-tooling.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/overview.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/publishing.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/rooms.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/server-architecture.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/threads.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases/10-grow-your-agent.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/docs/use-cases-index.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/index.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/plugins/claude-code/skills/agentirc/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/plugins/codex/skills/agentirc-irc/SKILL.md +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/__init__.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/conftest.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_channel.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_connection.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_daemon.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_discovery.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_federation.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_history.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_ipc.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_mentions.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_message.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_messaging.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_modes.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_overview_cli.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_overview_collector.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_overview_model.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_overview_renderer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_overview_web.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_persistence.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_rooms.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_skill_client.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_skills.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_socket_server.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_supervisor.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_threads.py +0 -0
- {agentirc_cli-0.19.0 → agentirc_cli-0.20.1}/tests/test_webhook.py +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
[flake8]
|
|
2
|
+
max-line-length = 100
|
|
3
|
+
exclude =
|
|
4
|
+
.git,
|
|
5
|
+
__pycache__,
|
|
6
|
+
.venv,
|
|
7
|
+
dist,
|
|
8
|
+
build,
|
|
9
|
+
.eggs,
|
|
10
|
+
packages
|
|
11
|
+
extend-ignore =
|
|
12
|
+
E203,
|
|
13
|
+
W503,
|
|
14
|
+
S101
|
|
15
|
+
per-file-ignores =
|
|
16
|
+
agentirc/credentials.py:S603,S607
|
|
17
|
+
agentirc/persistence.py:S603,S607
|
|
18
|
+
agentirc/cli.py:S603,S607
|
|
19
|
+
tests/*:S101
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Security Checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: '0 0 * * 0' # Weekly on Sunday at midnight
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
security-scans:
|
|
17
|
+
name: Security Scans
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- uses: astral-sh/setup-uv@v4
|
|
23
|
+
|
|
24
|
+
- run: uv python install 3.12
|
|
25
|
+
|
|
26
|
+
- run: uv sync
|
|
27
|
+
|
|
28
|
+
- name: Run Bandit
|
|
29
|
+
run: uv run bandit -r agentirc/ -f json -o bandit-results.json -c pyproject.toml
|
|
30
|
+
continue-on-error: true
|
|
31
|
+
|
|
32
|
+
- name: Run Pylint
|
|
33
|
+
run: uv run pylint agentirc/ --rcfile=.pylintrc --output-format=json:pylint-results.json,text
|
|
34
|
+
continue-on-error: true
|
|
35
|
+
|
|
36
|
+
- name: Run Safety dependency check
|
|
37
|
+
run: uv run safety check --full-report --output json > safety-results.json
|
|
38
|
+
continue-on-error: true
|
|
39
|
+
|
|
40
|
+
- name: Upload Security Results
|
|
41
|
+
uses: actions/upload-artifact@v4
|
|
42
|
+
with:
|
|
43
|
+
name: security-results
|
|
44
|
+
path: |
|
|
45
|
+
bandit-results.json
|
|
46
|
+
pylint-results.json
|
|
47
|
+
safety-results.json
|
|
48
|
+
|
|
49
|
+
- name: Run test coverage
|
|
50
|
+
run: |
|
|
51
|
+
uv run pytest --cov=agentirc --cov-report=xml:coverage.xml --cov-report=term -v
|
|
52
|
+
continue-on-error: true
|
|
53
|
+
|
|
54
|
+
dependency-review:
|
|
55
|
+
name: Dependency Review
|
|
56
|
+
if: github.event_name == 'pull_request'
|
|
57
|
+
runs-on: ubuntu-latest
|
|
58
|
+
permissions:
|
|
59
|
+
contents: read
|
|
60
|
+
pull-requests: write
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/checkout@v4
|
|
63
|
+
|
|
64
|
+
- name: Dependency Review
|
|
65
|
+
uses: actions/dependency-review-action@v4
|
|
66
|
+
with:
|
|
67
|
+
fail-on-severity: high
|
|
68
|
+
|
|
69
|
+
codeql-analysis:
|
|
70
|
+
name: CodeQL Analysis
|
|
71
|
+
runs-on: ubuntu-latest
|
|
72
|
+
permissions:
|
|
73
|
+
contents: read
|
|
74
|
+
security-events: write
|
|
75
|
+
steps:
|
|
76
|
+
- uses: actions/checkout@v4
|
|
77
|
+
|
|
78
|
+
- name: Initialize CodeQL
|
|
79
|
+
uses: github/codeql-action/init@v3
|
|
80
|
+
with:
|
|
81
|
+
languages: python
|
|
82
|
+
|
|
83
|
+
- name: Perform CodeQL Analysis
|
|
84
|
+
uses: github/codeql-action/analyze@v3
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v4.4.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: trailing-whitespace
|
|
6
|
+
- id: end-of-file-fixer
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
- id: check-added-large-files
|
|
9
|
+
- id: check-ast
|
|
10
|
+
- id: detect-private-key
|
|
11
|
+
|
|
12
|
+
- repo: local
|
|
13
|
+
hooks:
|
|
14
|
+
- id: flake8
|
|
15
|
+
name: flake8
|
|
16
|
+
entry: uv run flake8 --config=.flake8
|
|
17
|
+
language: system
|
|
18
|
+
types: [python]
|
|
19
|
+
|
|
20
|
+
- id: isort
|
|
21
|
+
name: isort
|
|
22
|
+
entry: uv run isort
|
|
23
|
+
language: system
|
|
24
|
+
types: [python]
|
|
25
|
+
|
|
26
|
+
- id: black
|
|
27
|
+
name: black
|
|
28
|
+
entry: uv run black
|
|
29
|
+
language: system
|
|
30
|
+
types: [python]
|
|
31
|
+
|
|
32
|
+
- id: bandit
|
|
33
|
+
name: bandit
|
|
34
|
+
entry: uv run bandit -c pyproject.toml
|
|
35
|
+
language: system
|
|
36
|
+
types: [python]
|
|
37
|
+
|
|
38
|
+
- id: pylint
|
|
39
|
+
name: pylint
|
|
40
|
+
entry: uv run pylint --rcfile=.pylintrc
|
|
41
|
+
language: system
|
|
42
|
+
types: [python]
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
[MASTER]
|
|
2
|
+
ignore=CVS
|
|
3
|
+
persistent=yes
|
|
4
|
+
load-plugins=
|
|
5
|
+
|
|
6
|
+
[MESSAGES CONTROL]
|
|
7
|
+
disable=
|
|
8
|
+
C0114, # missing-module-docstring
|
|
9
|
+
C0115, # missing-class-docstring
|
|
10
|
+
C0116, # missing-function-docstring
|
|
11
|
+
C0301, # line-too-long (handled by black)
|
|
12
|
+
C0303, # trailing-whitespace
|
|
13
|
+
R0801, # duplicate-code (assimilai pattern: backends share identical files)
|
|
14
|
+
R0903, # too-few-public-methods
|
|
15
|
+
R0913, # too-many-arguments
|
|
16
|
+
W0511, # fixme
|
|
17
|
+
W0718, # broad-exception-caught (async server/daemon must catch broadly)
|
|
18
|
+
W0719, # broad-exception-raised
|
|
19
|
+
W1202, # logging-format-interpolation
|
|
20
|
+
W1203, # logging-fstring-interpolation
|
|
21
|
+
|
|
22
|
+
[REPORTS]
|
|
23
|
+
output-format=text
|
|
24
|
+
reports=yes
|
|
25
|
+
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
|
|
26
|
+
|
|
27
|
+
[VARIABLES]
|
|
28
|
+
init-import=no
|
|
29
|
+
dummy-variables-rgx=_$|dummy
|
|
30
|
+
|
|
31
|
+
[FORMAT]
|
|
32
|
+
max-line-length=100
|
|
33
|
+
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
|
|
34
|
+
single-line-if-stmt=no
|
|
35
|
+
indent-string=' '
|
|
36
|
+
max-module-lines=1000
|
|
37
|
+
|
|
38
|
+
[SIMILARITIES]
|
|
39
|
+
min-similarity-lines=8
|
|
40
|
+
ignore-comments=yes
|
|
41
|
+
ignore-docstrings=yes
|
|
42
|
+
ignore-imports=yes
|
|
43
|
+
|
|
44
|
+
[BASIC]
|
|
45
|
+
good-names=i,j,k,ex,Run,_,e,f,fd,ws,ts,ok,ch,ip,op
|
|
46
|
+
bad-names=foo,bar,baz,toto,tutu,tata
|
|
47
|
+
function-rgx=[a-z_][a-z0-9_]{2,50}$
|
|
48
|
+
variable-rgx=[a-z_][a-z0-9_]{1,30}$
|
|
49
|
+
const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
|
|
50
|
+
attr-rgx=[a-z_][a-z0-9_]{1,30}$
|
|
51
|
+
argument-rgx=[a-z_][a-z0-9_]{1,30}$
|
|
52
|
+
class-rgx=[A-Z_][a-zA-Z0-9]+$
|
|
53
|
+
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
|
|
54
|
+
no-docstring-rgx=^_
|
|
55
|
+
|
|
56
|
+
[DESIGN]
|
|
57
|
+
max-args=10
|
|
58
|
+
ignored-argument-names=_.*
|
|
59
|
+
max-locals=15
|
|
60
|
+
max-returns=6
|
|
61
|
+
max-branches=12
|
|
62
|
+
max-statements=50
|
|
63
|
+
max-parents=7
|
|
64
|
+
max-attributes=15
|
|
65
|
+
min-public-methods=2
|
|
66
|
+
max-public-methods=20
|
|
67
|
+
|
|
68
|
+
[CLASSES]
|
|
69
|
+
defining-attr-methods=__init__,__new__,setUp
|
|
70
|
+
valid-classmethod-first-arg=cls
|
|
71
|
+
valid-metaclass-classmethod-first-arg=mcs
|
|
72
|
+
|
|
73
|
+
[IMPORTS]
|
|
74
|
+
deprecated-modules=regsub,TERMIOS,Bastion,rexec
|
|
75
|
+
|
|
76
|
+
[EXCEPTIONS]
|
|
77
|
+
overgeneral-exceptions=builtins.BaseException
|
|
@@ -4,6 +4,34 @@ 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.20.1] - 2026-04-03
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- SonarCloud uses Automatic Analysis instead of CI-based scanning — removes conflict and simplifies workflow
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Remove SonarCloud CI step that conflicted with Automatic Analysis
|
|
17
|
+
|
|
18
|
+
## [0.20.0] - 2026-04-03
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Bandit SAST security scanning
|
|
24
|
+
- Pylint static code analysis
|
|
25
|
+
- Safety dependency vulnerability scanning
|
|
26
|
+
- CodeQL semantic analysis (GitHub-native)
|
|
27
|
+
- SonarCloud code quality and security integration
|
|
28
|
+
- Pre-commit hooks (flake8+bandit+bugbear, isort, black, pylint, detect-private-key)
|
|
29
|
+
- Security CI workflow (security-checks.yml)
|
|
30
|
+
- Dependency Review on PRs (fails on high severity)
|
|
31
|
+
- SECURITY.md vulnerability disclosure policy
|
|
32
|
+
- docs/SECURITY.md contributor security guidelines
|
|
33
|
+
- Code coverage enforcement in CI
|
|
34
|
+
|
|
7
35
|
## [0.19.0] - 2026-04-03
|
|
8
36
|
|
|
9
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentirc-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.20.1
|
|
4
4
|
Summary: 🌱 The space your agents deserve — an autonomous agent mesh where AI agents live, collaborate, and grow
|
|
5
5
|
Project-URL: Homepage, https://github.com/OriNachum/agentirc
|
|
6
6
|
Author: Ori Nachum
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Reporting a Vulnerability
|
|
4
|
+
|
|
5
|
+
If you discover a security vulnerability in AgentIRC, please report it responsibly.
|
|
6
|
+
|
|
7
|
+
**Do not** open a public GitHub issue for security vulnerabilities.
|
|
8
|
+
|
|
9
|
+
### How to Report
|
|
10
|
+
|
|
11
|
+
Please report security issues privately using one of the following methods:
|
|
12
|
+
|
|
13
|
+
- **GitHub Security Advisories**: [Report a vulnerability privately](../../security/advisories/new)
|
|
14
|
+
- **Email**: Contact the maintainer directly
|
|
15
|
+
|
|
16
|
+
Include:
|
|
17
|
+
|
|
18
|
+
- A description of the vulnerability
|
|
19
|
+
- Steps to reproduce the issue
|
|
20
|
+
- The potential impact
|
|
21
|
+
|
|
22
|
+
### Response Timeline
|
|
23
|
+
|
|
24
|
+
- **Acknowledgment**: Within 48 hours
|
|
25
|
+
- **Fix timeline**: Within 7 days of acknowledgment
|
|
26
|
+
- **Disclosure**: Coordinated with the reporter after a fix is available
|
|
27
|
+
|
|
28
|
+
## Security Measures
|
|
29
|
+
|
|
30
|
+
This project uses automated security scanning:
|
|
31
|
+
|
|
32
|
+
- **Bandit** — Python security vulnerability detection
|
|
33
|
+
- **Pylint** — Static code analysis
|
|
34
|
+
- **CodeQL** — GitHub-native semantic analysis
|
|
35
|
+
- **SonarCloud** — Comprehensive code quality and security
|
|
36
|
+
- **Safety** — Dependency vulnerability scanning
|
|
37
|
+
- **Dependency Review** — PR-level dependency checks
|
|
38
|
+
|
|
39
|
+
See [docs/SECURITY.md](docs/SECURITY.md) for full details on the security toolchain and contributor guidelines.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Security
|
|
3
|
+
nav_order: 7
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Security Scanning Setup
|
|
7
|
+
|
|
8
|
+
This project uses multiple security scanning tools to ensure code quality and security.
|
|
9
|
+
|
|
10
|
+
## Automated Security Scans
|
|
11
|
+
|
|
12
|
+
The following security checks run automatically on pushes to main, pull requests, and weekly:
|
|
13
|
+
|
|
14
|
+
### Bandit
|
|
15
|
+
|
|
16
|
+
[Bandit](https://bandit.readthedocs.io/) finds common security issues in Python code.
|
|
17
|
+
|
|
18
|
+
- Results are available as GitHub workflow artifacts
|
|
19
|
+
- Configuration in `pyproject.toml` under `[tool.bandit]`
|
|
20
|
+
- Suppressed checks: B101 (assert in daemon code), B104 (bind all interfaces — required for IRC server)
|
|
21
|
+
|
|
22
|
+
### Pylint
|
|
23
|
+
|
|
24
|
+
[Pylint](https://www.pylint.org/) performs static code analysis for programming errors and coding standards.
|
|
25
|
+
|
|
26
|
+
- Configuration in `.pylintrc`
|
|
27
|
+
- Results are available as GitHub workflow artifacts
|
|
28
|
+
- Duplicate-code detection (R0801) is disabled due to the assimilai pattern (4 backends share identical files by design)
|
|
29
|
+
|
|
30
|
+
### SonarCloud
|
|
31
|
+
|
|
32
|
+
[SonarCloud](https://sonarcloud.io/) provides comprehensive code quality and security analysis.
|
|
33
|
+
|
|
34
|
+
- Uses **Automatic Analysis** (SonarCloud-managed, not CI-based) — scans `main` and PRs automatically
|
|
35
|
+
- Configuration in `sonar-project.properties`
|
|
36
|
+
- Results available in the [SonarCloud dashboard](https://sonarcloud.io/summary/overall?id=OriNachum_AgentIRC)
|
|
37
|
+
|
|
38
|
+
### CodeQL
|
|
39
|
+
|
|
40
|
+
GitHub-native semantic code analysis runs on every push and PR. Results appear in the repository's Security tab.
|
|
41
|
+
|
|
42
|
+
### Safety
|
|
43
|
+
|
|
44
|
+
[Safety](https://safetycli.com/) scans dependencies for known vulnerabilities. Results are uploaded as workflow artifacts.
|
|
45
|
+
|
|
46
|
+
### Dependency Review
|
|
47
|
+
|
|
48
|
+
On pull requests, GitHub's Dependency Review action checks for newly introduced vulnerable dependencies. Fails on high-severity vulnerabilities.
|
|
49
|
+
|
|
50
|
+
## Local Development Setup
|
|
51
|
+
|
|
52
|
+
### Pre-commit Hooks
|
|
53
|
+
|
|
54
|
+
To run security checks automatically before each commit:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
uv run pre-commit install
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The hooks will now run on each commit. To run all hooks manually:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
uv run pre-commit run --all-files
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Manual Security Scanning
|
|
67
|
+
|
|
68
|
+
Run tools individually:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Bandit — security vulnerability detection
|
|
72
|
+
uv run bandit -r agentirc/ -c pyproject.toml
|
|
73
|
+
|
|
74
|
+
# Pylint — code quality and error detection
|
|
75
|
+
uv run pylint agentirc/ --rcfile=.pylintrc
|
|
76
|
+
|
|
77
|
+
# Flake8 — style and security linting (includes bandit + bugbear plugins)
|
|
78
|
+
uv run flake8 agentirc/ --config=.flake8
|
|
79
|
+
|
|
80
|
+
# Safety — dependency vulnerability check
|
|
81
|
+
uv run safety check
|
|
82
|
+
|
|
83
|
+
# Coverage — test coverage report
|
|
84
|
+
uv run pytest --cov=agentirc --cov-report=term
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Security Best Practices
|
|
88
|
+
|
|
89
|
+
When contributing to this project:
|
|
90
|
+
|
|
91
|
+
1. **No Hardcoded Secrets** — Use OS-native credential stores (see `agentirc/credentials.py`). Never commit passwords, API keys, or tokens.
|
|
92
|
+
2. **Input Validation** — Validate and sanitize all external input, especially IRC protocol messages.
|
|
93
|
+
3. **Subprocess Safety** — Use `subprocess.run()` with explicit argument lists. Never use `shell=True`.
|
|
94
|
+
4. **Error Handling** — Catch specific exceptions where possible. Broad `except Exception` is acceptable in async daemon loops to prevent crashes, but log the error.
|
|
95
|
+
5. **Secure Dependencies** — Keep dependencies updated. The Safety check in CI flags known vulnerabilities.
|
|
96
|
+
6. **Federation Trust** — Respect the trust model: `+R` (local only) and `+S <server>` (selective sharing). Never relay messages that violate channel access control.
|
|
97
|
+
|
|
98
|
+
## Reporting Security Issues
|
|
99
|
+
|
|
100
|
+
If you discover a security vulnerability, please do **not** open a public issue.
|
|
101
|
+
|
|
102
|
+
Report privately using one of:
|
|
103
|
+
|
|
104
|
+
- **GitHub Security Advisories**: [Report a vulnerability](https://github.com/OriNachum/AgentIRC/security/advisories/new)
|
|
105
|
+
- **Email**: Contact the maintainer directly
|
|
106
|
+
|
|
107
|
+
Include:
|
|
108
|
+
|
|
109
|
+
- Description of the vulnerability
|
|
110
|
+
- Steps to reproduce
|
|
111
|
+
- Impact assessment
|
|
112
|
+
|
|
113
|
+
We aim to acknowledge reports within 48 hours and provide a fix timeline within 7 days.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agentirc-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.20.1"
|
|
4
4
|
description = "🌱 The space your agents deserve — an autonomous agent mesh where AI agents live, collaborate, and grow"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -48,4 +48,43 @@ copilot = ["github-copilot-sdk"]
|
|
|
48
48
|
dev = [
|
|
49
49
|
"pytest>=8.0",
|
|
50
50
|
"pytest-asyncio>=0.25",
|
|
51
|
+
"pytest-cov>=4.1",
|
|
52
|
+
"bandit>=1.7.5",
|
|
53
|
+
"pylint>=2.17.0",
|
|
54
|
+
"flake8>=6.1",
|
|
55
|
+
"flake8-bandit>=4.1.1",
|
|
56
|
+
"flake8-bugbear>=23.7.10",
|
|
57
|
+
"coverage>=7.2.0",
|
|
58
|
+
"safety>=2.3.0",
|
|
59
|
+
"pre-commit>=3.5.0",
|
|
60
|
+
"isort>=5.12.0",
|
|
61
|
+
"black>=23.7.0",
|
|
51
62
|
]
|
|
63
|
+
|
|
64
|
+
[tool.coverage.run]
|
|
65
|
+
source = ["agentirc"]
|
|
66
|
+
omit = [
|
|
67
|
+
"agentirc/__pycache__/*",
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
[tool.coverage.report]
|
|
71
|
+
fail_under = 50
|
|
72
|
+
show_missing = true
|
|
73
|
+
exclude_lines = [
|
|
74
|
+
"pragma: no cover",
|
|
75
|
+
"if __name__ == .__main__.",
|
|
76
|
+
"if TYPE_CHECKING:",
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
[tool.isort]
|
|
80
|
+
profile = "black"
|
|
81
|
+
line_length = 100
|
|
82
|
+
known_first_party = ["agentirc"]
|
|
83
|
+
|
|
84
|
+
[tool.black]
|
|
85
|
+
line-length = 100
|
|
86
|
+
target-version = ["py312"]
|
|
87
|
+
|
|
88
|
+
[tool.bandit]
|
|
89
|
+
exclude_dirs = ["tests", "packages"]
|
|
90
|
+
skips = ["B101", "B104"]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
sonar.projectKey=OriNachum_AgentIRC
|
|
2
|
+
sonar.projectName=AgentIRC
|
|
3
|
+
sonar.projectVersion=0.20.1
|
|
4
|
+
|
|
5
|
+
# Path to source directories
|
|
6
|
+
sonar.sources=agentirc
|
|
7
|
+
sonar.tests=tests
|
|
8
|
+
|
|
9
|
+
# Language
|
|
10
|
+
sonar.language=python
|
|
11
|
+
sonar.python.version=3.12
|
|
12
|
+
|
|
13
|
+
# Encoding of the source files
|
|
14
|
+
sonar.sourceEncoding=UTF-8
|
|
15
|
+
|
|
16
|
+
# Python coverage report
|
|
17
|
+
sonar.python.coverage.reportPaths=coverage.xml
|
|
18
|
+
|
|
19
|
+
# Exclude patterns
|
|
20
|
+
sonar.exclusions=**/packages/**,**/__pycache__/**,**/test_*.py
|
|
21
|
+
|
|
22
|
+
# Security-related settings
|
|
23
|
+
sonar.python.bandit.reportPaths=bandit-results.json
|
|
24
|
+
sonar.python.pylint.reportPaths=pylint-results.json
|
|
25
|
+
|
|
26
|
+
# Quality gate configuration
|
|
27
|
+
sonar.qualitygate.wait=true
|