agentirc-cli 3.0.0__tar.gz → 3.0.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-3.0.0 → agentirc_cli-3.0.1}/CHANGELOG.md +7 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/PKG-INFO +1 -1
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/cli.py +24 -7
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/overview/collector.py +28 -21
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/pyproject.toml +1 -1
- agentirc_cli-3.0.1/tests/test_overview_cli.py +133 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/uv.lock +1 -1
- agentirc_cli-3.0.0/tests/test_overview_cli.py +0 -42
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.claude/skills/run-tests/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.flake8 +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.github/workflows/security-checks.yml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.gitignore +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.pr_agent.toml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.pre-commit-config.yaml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/.pylintrc +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/CLAUDE.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/CNAME +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/Gemfile +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/Gemfile.lock +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/LICENSE +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/README.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/SECURITY.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/_config.yml +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/__main__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/bots/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/bots/bot.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/bots/bot_manager.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/bots/config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/bots/http_listener.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/bots/template_engine.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/bots/virtual_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/ipc.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/skill/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/socket_server.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/supervisor.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/acp/webhook.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/__main__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/ipc.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/socket_server.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/supervisor.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/claude/webhook.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/ipc.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/skill/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/socket_server.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/supervisor.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/codex/webhook.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/ipc.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/skill/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/clients/copilot/webhook.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/app.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/commands.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/widgets/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/widgets/chat.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/widgets/info_panel.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/console/widgets/sidebar.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/credentials.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/learn_prompt.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/mesh_config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/observer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/overview/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/overview/model.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/overview/renderer_text.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/overview/renderer_web.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/overview/web/style.css +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/persistence.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/pidfile.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/commands.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/extensions/federation.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/extensions/history.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/extensions/icons.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/extensions/tags.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/extensions/threads.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/message.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/protocol-index.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/protocol/replies.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/__main__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/channel.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/ircd.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/remote_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/room_store.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/rooms_util.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/server_link.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/skill.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/skills/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/skills/history.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/skills/icon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/skills/rooms.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/skills/threads.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/server/thread_store.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/culture/skills/culture/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/agent-lifecycle.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/agentic-self-learn.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/agent-client.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/agent-harness-spec.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/harness-conformance.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/index.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/layer1-core-irc.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/layer2-attention.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/layer3-skills.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/layer4-federation.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/layer5-agent-harness.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/server-architecture.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/architecture/threads.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/acp/overview.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/culture-cli.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/getting-started.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/index.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/SECURITY.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/bots.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/ci.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/cli.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/docs-site.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/index.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/ops-tooling.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/overview.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/operations/publishing.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/rooms.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases/10-agent-lifecycle.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/use-cases-index.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/docs/what-is-culture.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/plugins/claude-code/skills/culture/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/plugins/codex/skills/culture-irc/SKILL.md +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/sonar-project.properties +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/__init__.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/conftest.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_bot.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_bot_config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_bot_manager.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_bots_integration.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_channel.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_connection.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_console_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_console_commands.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_console_connection.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_console_icons.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_console_integration.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_daemon.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_discovery.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_federation.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_history.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_http_listener.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_ipc.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_mentions.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_message.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_messaging.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_modes.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_overview_collector.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_overview_model.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_overview_renderer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_overview_web.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_persistence.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_pidfile.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_rooms.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_server_icon_skill.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_skill_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_skills.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_socket_server.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_supervisor.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_template_engine.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_threads.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_virtual_client.py +0 -0
- {agentirc_cli-3.0.0 → agentirc_cli-3.0.1}/tests/test_webhook.py +0 -0
|
@@ -4,6 +4,13 @@ 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
|
+
## [3.0.1] - 2026-04-06
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Fix empty error message when running `culture overview` against a starting or unreachable server
|
|
13
|
+
|
|
7
14
|
## [3.0.0] - 2026-04-06
|
|
8
15
|
|
|
9
16
|
|
|
@@ -1593,14 +1593,31 @@ def _cmd_overview(args: argparse.Namespace) -> None:
|
|
|
1593
1593
|
)
|
|
1594
1594
|
return
|
|
1595
1595
|
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1596
|
+
host, port = config.server.host, config.server.port
|
|
1597
|
+
try:
|
|
1598
|
+
mesh = asyncio.run(
|
|
1599
|
+
collect_mesh_state(
|
|
1600
|
+
host=host,
|
|
1601
|
+
port=port,
|
|
1602
|
+
server_name=config.server.name,
|
|
1603
|
+
message_limit=message_limit,
|
|
1604
|
+
)
|
|
1602
1605
|
)
|
|
1603
|
-
|
|
1606
|
+
except ConnectionRefusedError:
|
|
1607
|
+
print(
|
|
1608
|
+
f"Error: could not connect to {host}:{port} — is the server running?",
|
|
1609
|
+
file=sys.stderr,
|
|
1610
|
+
)
|
|
1611
|
+
sys.exit(1)
|
|
1612
|
+
except TimeoutError:
|
|
1613
|
+
print(
|
|
1614
|
+
f"Error: server at {host}:{port} not responding" " — it may still be starting up",
|
|
1615
|
+
file=sys.stderr,
|
|
1616
|
+
)
|
|
1617
|
+
sys.exit(1)
|
|
1618
|
+
except OSError as exc:
|
|
1619
|
+
print(f"Error: {exc}", file=sys.stderr)
|
|
1620
|
+
sys.exit(1)
|
|
1604
1621
|
output = render_text(
|
|
1605
1622
|
mesh,
|
|
1606
1623
|
room_filter=args.room,
|
|
@@ -116,28 +116,35 @@ async def _connect(
|
|
|
116
116
|
timeout=REGISTER_TIMEOUT,
|
|
117
117
|
)
|
|
118
118
|
nick = _temp_nick(server_name)
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
try:
|
|
120
|
+
writer.write(f"NICK {nick}\r\nUSER overview 0 * :overview\r\n".encode())
|
|
121
|
+
await writer.drain()
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
123
|
+
deadline = asyncio.get_event_loop().time() + REGISTER_TIMEOUT
|
|
124
|
+
while True:
|
|
125
|
+
remaining = deadline - asyncio.get_event_loop().time()
|
|
126
|
+
if remaining <= 0:
|
|
127
|
+
raise TimeoutError("Registration timed out")
|
|
128
|
+
try:
|
|
129
|
+
data = await asyncio.wait_for(reader.readline(), timeout=remaining)
|
|
130
|
+
except asyncio.TimeoutError:
|
|
131
|
+
raise TimeoutError("Registration timed out") from None
|
|
132
|
+
line = data.decode().strip()
|
|
133
|
+
if not line:
|
|
134
|
+
continue
|
|
135
|
+
msg = IRCMessage.parse(line)
|
|
136
|
+
if msg.command == "PING":
|
|
137
|
+
writer.write(f"PONG :{msg.params[0]}\r\n".encode())
|
|
138
|
+
await writer.drain()
|
|
139
|
+
elif msg.command == "001":
|
|
140
|
+
return reader, writer, nick
|
|
141
|
+
elif msg.command == "433":
|
|
142
|
+
nick = _temp_nick(server_name)
|
|
143
|
+
writer.write(f"NICK {nick}\r\n".encode())
|
|
144
|
+
await writer.drain()
|
|
145
|
+
except BaseException:
|
|
146
|
+
await _disconnect(writer)
|
|
147
|
+
raise
|
|
141
148
|
|
|
142
149
|
|
|
143
150
|
async def _disconnect(writer: asyncio.StreamWriter) -> None:
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"""Tests for overview CLI subcommand argument parsing and error handling."""
|
|
2
|
+
|
|
3
|
+
import subprocess
|
|
4
|
+
import sys
|
|
5
|
+
from unittest.mock import patch
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_overview_help():
|
|
11
|
+
"""The overview subcommand is registered and has help."""
|
|
12
|
+
result = subprocess.run(
|
|
13
|
+
[sys.executable, "-m", "culture", "overview", "--help"],
|
|
14
|
+
capture_output=True,
|
|
15
|
+
text=True,
|
|
16
|
+
)
|
|
17
|
+
assert result.returncode == 0
|
|
18
|
+
assert "--room" in result.stdout
|
|
19
|
+
assert "--agent" in result.stdout
|
|
20
|
+
assert "--messages" in result.stdout
|
|
21
|
+
assert "--serve" in result.stdout
|
|
22
|
+
assert "--refresh" in result.stdout
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_overview_default_args():
|
|
26
|
+
"""Default args parse correctly."""
|
|
27
|
+
from culture.cli import _build_parser
|
|
28
|
+
|
|
29
|
+
parser = _build_parser()
|
|
30
|
+
args = parser.parse_args(["overview"])
|
|
31
|
+
assert args.command == "overview"
|
|
32
|
+
assert args.room is None
|
|
33
|
+
assert args.agent is None
|
|
34
|
+
assert args.messages == 4
|
|
35
|
+
assert args.serve is False
|
|
36
|
+
assert args.refresh == 5
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_overview_with_flags():
|
|
40
|
+
from culture.cli import _build_parser
|
|
41
|
+
|
|
42
|
+
parser = _build_parser()
|
|
43
|
+
args = parser.parse_args(["overview", "--room", "#general", "--messages", "10"])
|
|
44
|
+
assert args.room == "#general"
|
|
45
|
+
assert args.messages == 10
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_overview_connection_refused(capsys):
|
|
49
|
+
"""ConnectionRefusedError produces a helpful message."""
|
|
50
|
+
from culture.cli import _build_parser, _cmd_overview
|
|
51
|
+
|
|
52
|
+
parser = _build_parser()
|
|
53
|
+
args = parser.parse_args(["overview"])
|
|
54
|
+
|
|
55
|
+
with patch(
|
|
56
|
+
"culture.overview.collector.collect_mesh_state",
|
|
57
|
+
side_effect=ConnectionRefusedError(111, "Connection refused"),
|
|
58
|
+
):
|
|
59
|
+
with pytest.raises(SystemExit, match="1"):
|
|
60
|
+
_cmd_overview(args)
|
|
61
|
+
|
|
62
|
+
captured = capsys.readouterr()
|
|
63
|
+
assert "is the server running?" in captured.err
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_overview_timeout(capsys):
|
|
67
|
+
"""TimeoutError produces a helpful message."""
|
|
68
|
+
from culture.cli import _build_parser, _cmd_overview
|
|
69
|
+
|
|
70
|
+
parser = _build_parser()
|
|
71
|
+
args = parser.parse_args(["overview"])
|
|
72
|
+
|
|
73
|
+
with patch(
|
|
74
|
+
"culture.overview.collector.collect_mesh_state",
|
|
75
|
+
side_effect=TimeoutError("Registration timed out"),
|
|
76
|
+
):
|
|
77
|
+
with pytest.raises(SystemExit, match="1"):
|
|
78
|
+
_cmd_overview(args)
|
|
79
|
+
|
|
80
|
+
captured = capsys.readouterr()
|
|
81
|
+
assert "not responding" in captured.err
|
|
82
|
+
assert "still be starting up" in captured.err
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_overview_os_error(capsys):
|
|
86
|
+
"""OSError shows the original error details."""
|
|
87
|
+
from culture.cli import _build_parser, _cmd_overview
|
|
88
|
+
|
|
89
|
+
parser = _build_parser()
|
|
90
|
+
args = parser.parse_args(["overview"])
|
|
91
|
+
|
|
92
|
+
with patch(
|
|
93
|
+
"culture.overview.collector.collect_mesh_state",
|
|
94
|
+
side_effect=OSError("Name or service not known"),
|
|
95
|
+
):
|
|
96
|
+
with pytest.raises(SystemExit, match="1"):
|
|
97
|
+
_cmd_overview(args)
|
|
98
|
+
|
|
99
|
+
captured = capsys.readouterr()
|
|
100
|
+
assert "Name or service not known" in captured.err
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@pytest.mark.asyncio
|
|
104
|
+
async def test_connect_timeout_has_message():
|
|
105
|
+
"""_connect raises TimeoutError with a non-empty message on registration timeout."""
|
|
106
|
+
import asyncio
|
|
107
|
+
|
|
108
|
+
from culture.overview.collector import _connect
|
|
109
|
+
|
|
110
|
+
# TCP server that accepts but never sends IRC 001 (silent handshake)
|
|
111
|
+
stop = asyncio.Event()
|
|
112
|
+
|
|
113
|
+
async def hold_open(reader, writer):
|
|
114
|
+
await stop.wait()
|
|
115
|
+
writer.close()
|
|
116
|
+
|
|
117
|
+
server = await asyncio.start_server(hold_open, "127.0.0.1", 0)
|
|
118
|
+
port = server.sockets[0].getsockname()[1]
|
|
119
|
+
|
|
120
|
+
try:
|
|
121
|
+
with pytest.raises(TimeoutError, match="Registration timed out"):
|
|
122
|
+
import culture.overview.collector as col
|
|
123
|
+
|
|
124
|
+
original = col.REGISTER_TIMEOUT
|
|
125
|
+
col.REGISTER_TIMEOUT = 0.5
|
|
126
|
+
try:
|
|
127
|
+
await _connect("127.0.0.1", port, "test")
|
|
128
|
+
finally:
|
|
129
|
+
col.REGISTER_TIMEOUT = original
|
|
130
|
+
finally:
|
|
131
|
+
stop.set()
|
|
132
|
+
server.close()
|
|
133
|
+
await server.wait_closed()
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"""Tests for overview CLI subcommand argument parsing."""
|
|
2
|
-
|
|
3
|
-
import subprocess
|
|
4
|
-
import sys
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def test_overview_help():
|
|
8
|
-
"""The overview subcommand is registered and has help."""
|
|
9
|
-
result = subprocess.run(
|
|
10
|
-
[sys.executable, "-m", "culture", "overview", "--help"],
|
|
11
|
-
capture_output=True,
|
|
12
|
-
text=True,
|
|
13
|
-
)
|
|
14
|
-
assert result.returncode == 0
|
|
15
|
-
assert "--room" in result.stdout
|
|
16
|
-
assert "--agent" in result.stdout
|
|
17
|
-
assert "--messages" in result.stdout
|
|
18
|
-
assert "--serve" in result.stdout
|
|
19
|
-
assert "--refresh" in result.stdout
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def test_overview_default_args():
|
|
23
|
-
"""Default args parse correctly."""
|
|
24
|
-
from culture.cli import _build_parser
|
|
25
|
-
|
|
26
|
-
parser = _build_parser()
|
|
27
|
-
args = parser.parse_args(["overview"])
|
|
28
|
-
assert args.command == "overview"
|
|
29
|
-
assert args.room is None
|
|
30
|
-
assert args.agent is None
|
|
31
|
-
assert args.messages == 4
|
|
32
|
-
assert args.serve is False
|
|
33
|
-
assert args.refresh == 5
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def test_overview_with_flags():
|
|
37
|
-
from culture.cli import _build_parser
|
|
38
|
-
|
|
39
|
-
parser = _build_parser()
|
|
40
|
-
args = parser.parse_args(["overview", "--room", "#general", "--messages", "10"])
|
|
41
|
-
assert args.room == "#general"
|
|
42
|
-
assert args.messages == 10
|
|
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
|