agentirc-cli 4.2.1__tar.gz → 4.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/CHANGELOG.md +13 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/PKG-INFO +1 -1
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/agent.py +29 -1
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/config.py +27 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/config.py +27 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/config.py +27 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/config.py +27 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +52 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/config.py +27 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/pyproject.toml +1 -1
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_archive.py +405 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/uv.lock +1 -1
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.flake8 +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/security-checks.yml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.gitignore +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.pr_agent.toml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.pre-commit-config.yaml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.pylintrc +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/CLAUDE.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/CNAME +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/Gemfile +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/Gemfile.lock +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/LICENSE +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/README.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/SECURITY.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/_config.yml +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/__main__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/aio.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/bot.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/bot_manager.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/config.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/http_listener.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/template_engine.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/virtual_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/_helpers.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/bot.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/channel.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/mesh.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/server.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/skills.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/ipc.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/skill/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/socket_server.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/supervisor.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/webhook.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/__main__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/ipc.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/socket_server.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/supervisor.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/webhook.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/ipc.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/skill/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/socket_server.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/supervisor.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/webhook.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/ipc.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/skill/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/webhook.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/app.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/commands.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/chat.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/info_panel.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/sidebar.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/credentials.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/learn_prompt.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/mesh_config.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/observer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/collector.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/model.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/renderer_text.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/renderer_web.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/web/style.css +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/persistence.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/pidfile.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/commands.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/federation.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/history.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/icons.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/tags.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/threads.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/message.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/protocol-index.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/replies.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/__main__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/channel.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/config.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/ircd.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/remote_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/room_store.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/rooms_util.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/server_link.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skill.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/history.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/icon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/rooms.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/threads.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/thread_store.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/skills/culture/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/agent-lifecycle.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/agentic-self-learn.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/agent-client.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/agent-harness-spec.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/harness-conformance.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/index.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer1-core-irc.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer2-attention.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer3-skills.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer4-federation.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer5-agent-harness.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/server-architecture.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/threads.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/channel-polling.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/acp/overview.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/culture-cli.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/getting-started.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/index.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/SECURITY.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/bots.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/ci.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/cli.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/docs-site.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/index.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/ops-tooling.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/overview.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/publishing.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/rooms.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/server-rename.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/10-agent-lifecycle.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases-index.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/what-is-culture.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/claude-code/skills/culture/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/codex/skills/culture-irc/SKILL.md +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/sonar-project.properties +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/__init__.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/conftest.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bot.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bot_config.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bot_manager.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bots_integration.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_channel.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_connection.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_commands.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_connection.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_icons.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_integration.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_daemon.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_discovery.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_federation.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_history.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_http_listener.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_ipc.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mention_alias.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mention_target_cleanup.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mentions.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_message.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_messaging.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_modes.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_cli.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_collector.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_model.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_renderer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_web.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_persistence.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_pidfile.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_poll_loop.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_rooms.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_server_icon_skill.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_skill_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_skills.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_socket_server.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_supervisor.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_template_engine.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_threads.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_virtual_client.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_wait_for_port.py +0 -0
- {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_webhook.py +0 -0
|
@@ -4,6 +4,19 @@ 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
|
+
## [4.3.0] - 2026-04-07
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- agent delete command to remove agents from config entirely
|
|
13
|
+
- agent create now overwrites archived agents, enabling harness/model migration
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- agent create no longer blocks when the matching nick is archived
|
|
19
|
+
|
|
7
20
|
## [4.2.1] - 2026-04-07
|
|
8
21
|
|
|
9
22
|
|
|
@@ -16,6 +16,7 @@ from culture.clients.claude.config import (
|
|
|
16
16
|
archive_agent,
|
|
17
17
|
load_config,
|
|
18
18
|
load_config_or_default,
|
|
19
|
+
remove_agent,
|
|
19
20
|
sanitize_agent_name,
|
|
20
21
|
unarchive_agent,
|
|
21
22
|
)
|
|
@@ -158,11 +159,16 @@ def register(subparsers: argparse._SubParsersAction) -> None:
|
|
|
158
159
|
unarchive_parser.add_argument("nick", help="Agent nick to unarchive")
|
|
159
160
|
unarchive_parser.add_argument("--config", default=DEFAULT_CONFIG, help=_CONFIG_HELP)
|
|
160
161
|
|
|
162
|
+
# -- delete ---------------------------------------------------------------
|
|
163
|
+
delete_parser = agent_sub.add_parser("delete", help="Remove an agent from config entirely")
|
|
164
|
+
delete_parser.add_argument("nick", help="Agent nick to delete")
|
|
165
|
+
delete_parser.add_argument("--config", default=DEFAULT_CONFIG, help=_CONFIG_HELP)
|
|
166
|
+
|
|
161
167
|
|
|
162
168
|
def dispatch(args: argparse.Namespace) -> None:
|
|
163
169
|
if not args.agent_command:
|
|
164
170
|
print(
|
|
165
|
-
"Usage: culture agent {create|join|start|stop|status|rename|assign|sleep|wake|learn|message|read|archive|unarchive}",
|
|
171
|
+
"Usage: culture agent {create|join|start|stop|status|rename|assign|sleep|wake|learn|message|read|archive|unarchive|delete}",
|
|
166
172
|
file=sys.stderr,
|
|
167
173
|
)
|
|
168
174
|
sys.exit(1)
|
|
@@ -182,6 +188,7 @@ def dispatch(args: argparse.Namespace) -> None:
|
|
|
182
188
|
"read": _cmd_read,
|
|
183
189
|
"archive": _cmd_archive,
|
|
184
190
|
"unarchive": _cmd_unarchive,
|
|
191
|
+
"delete": _cmd_delete,
|
|
185
192
|
}
|
|
186
193
|
handler = handlers.get(args.agent_command)
|
|
187
194
|
if handler:
|
|
@@ -264,6 +271,10 @@ def _cmd_create(args: argparse.Namespace) -> None:
|
|
|
264
271
|
|
|
265
272
|
for existing in config.agents:
|
|
266
273
|
if existing.nick == full_nick:
|
|
274
|
+
if existing.archived:
|
|
275
|
+
print(f"Replacing archived agent '{full_nick}'")
|
|
276
|
+
remove_agent(args.config, full_nick)
|
|
277
|
+
break
|
|
267
278
|
channels = existing.channels if isinstance(existing.channels, list) else []
|
|
268
279
|
print(f"Agent '{full_nick}' already exists in config", file=sys.stderr)
|
|
269
280
|
print(f" Directory: {existing.directory}", file=sys.stderr)
|
|
@@ -831,3 +842,20 @@ def _cmd_unarchive(args: argparse.Namespace) -> None:
|
|
|
831
842
|
|
|
832
843
|
print(f"Agent unarchived: {args.nick}")
|
|
833
844
|
print(f"\nStart with: culture agent start {args.nick}")
|
|
845
|
+
|
|
846
|
+
|
|
847
|
+
def _cmd_delete(args: argparse.Namespace) -> None:
|
|
848
|
+
"""Remove an agent from config entirely."""
|
|
849
|
+
config = load_config_or_default(args.config)
|
|
850
|
+
agent = config.get_agent(args.nick)
|
|
851
|
+
if not agent:
|
|
852
|
+
print(f"Agent '{args.nick}' not found in config", file=sys.stderr)
|
|
853
|
+
sys.exit(1)
|
|
854
|
+
|
|
855
|
+
# Stop the agent if it's running
|
|
856
|
+
pid = read_pid(f"agent-{args.nick}")
|
|
857
|
+
if pid and is_process_alive(pid):
|
|
858
|
+
stop_agent(args.nick)
|
|
859
|
+
|
|
860
|
+
remove_agent(args.config, args.nick)
|
|
861
|
+
print(f"Agent deleted: {args.nick}")
|
|
@@ -248,3 +248,30 @@ def rename_agent(
|
|
|
248
248
|
return
|
|
249
249
|
|
|
250
250
|
raise ValueError(f"agent {old_nick!r} not found in config")
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def remove_agent(
|
|
254
|
+
path: str | Path,
|
|
255
|
+
nick: str,
|
|
256
|
+
) -> None:
|
|
257
|
+
"""Remove an agent from config entirely.
|
|
258
|
+
|
|
259
|
+
Operates on raw YAML to preserve backend-specific fields on other
|
|
260
|
+
agents that the typed schema would strip.
|
|
261
|
+
Raises ValueError if the agent is not found.
|
|
262
|
+
"""
|
|
263
|
+
path = Path(path)
|
|
264
|
+
if not path.exists():
|
|
265
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
266
|
+
|
|
267
|
+
with open(path) as f:
|
|
268
|
+
raw = yaml.safe_load(f) or {}
|
|
269
|
+
|
|
270
|
+
agents = raw.get("agents", [])
|
|
271
|
+
for i, agent_raw in enumerate(agents):
|
|
272
|
+
if agent_raw.get("nick") == nick:
|
|
273
|
+
agents.pop(i)
|
|
274
|
+
with open(path, "w") as f:
|
|
275
|
+
yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
|
|
276
|
+
return
|
|
277
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
@@ -303,6 +303,33 @@ def unarchive_agent(
|
|
|
303
303
|
raise ValueError(f"agent {nick!r} not found in config")
|
|
304
304
|
|
|
305
305
|
|
|
306
|
+
def remove_agent(
|
|
307
|
+
path: str | Path,
|
|
308
|
+
nick: str,
|
|
309
|
+
) -> None:
|
|
310
|
+
"""Remove an agent from config entirely.
|
|
311
|
+
|
|
312
|
+
Operates on raw YAML to preserve backend-specific fields (e.g.
|
|
313
|
+
acp_command) on other agents that the typed schema would strip.
|
|
314
|
+
Raises ValueError if the agent is not found.
|
|
315
|
+
"""
|
|
316
|
+
path = Path(path)
|
|
317
|
+
if not path.exists():
|
|
318
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
319
|
+
|
|
320
|
+
with open(path) as f:
|
|
321
|
+
raw = yaml.safe_load(f) or {}
|
|
322
|
+
|
|
323
|
+
agents = raw.get("agents", [])
|
|
324
|
+
for i, agent_raw in enumerate(agents):
|
|
325
|
+
if agent_raw.get("nick") == nick:
|
|
326
|
+
agents.pop(i)
|
|
327
|
+
with open(path, "w") as f:
|
|
328
|
+
yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
|
|
329
|
+
return
|
|
330
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
331
|
+
|
|
332
|
+
|
|
306
333
|
def archive_server(
|
|
307
334
|
path: str | Path,
|
|
308
335
|
reason: str = "",
|
|
@@ -248,3 +248,30 @@ def rename_agent(
|
|
|
248
248
|
return
|
|
249
249
|
|
|
250
250
|
raise ValueError(f"agent {old_nick!r} not found in config")
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def remove_agent(
|
|
254
|
+
path: str | Path,
|
|
255
|
+
nick: str,
|
|
256
|
+
) -> None:
|
|
257
|
+
"""Remove an agent from config entirely.
|
|
258
|
+
|
|
259
|
+
Operates on raw YAML to preserve backend-specific fields on other
|
|
260
|
+
agents that the typed schema would strip.
|
|
261
|
+
Raises ValueError if the agent is not found.
|
|
262
|
+
"""
|
|
263
|
+
path = Path(path)
|
|
264
|
+
if not path.exists():
|
|
265
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
266
|
+
|
|
267
|
+
with open(path) as f:
|
|
268
|
+
raw = yaml.safe_load(f) or {}
|
|
269
|
+
|
|
270
|
+
agents = raw.get("agents", [])
|
|
271
|
+
for i, agent_raw in enumerate(agents):
|
|
272
|
+
if agent_raw.get("nick") == nick:
|
|
273
|
+
agents.pop(i)
|
|
274
|
+
with open(path, "w") as f:
|
|
275
|
+
yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
|
|
276
|
+
return
|
|
277
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
@@ -248,3 +248,30 @@ def rename_agent(
|
|
|
248
248
|
return
|
|
249
249
|
|
|
250
250
|
raise ValueError(f"agent {old_nick!r} not found in config")
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def remove_agent(
|
|
254
|
+
path: str | Path,
|
|
255
|
+
nick: str,
|
|
256
|
+
) -> None:
|
|
257
|
+
"""Remove an agent from config entirely.
|
|
258
|
+
|
|
259
|
+
Operates on raw YAML to preserve backend-specific fields on other
|
|
260
|
+
agents that the typed schema would strip.
|
|
261
|
+
Raises ValueError if the agent is not found.
|
|
262
|
+
"""
|
|
263
|
+
path = Path(path)
|
|
264
|
+
if not path.exists():
|
|
265
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
266
|
+
|
|
267
|
+
with open(path) as f:
|
|
268
|
+
raw = yaml.safe_load(f) or {}
|
|
269
|
+
|
|
270
|
+
agents = raw.get("agents", [])
|
|
271
|
+
for i, agent_raw in enumerate(agents):
|
|
272
|
+
if agent_raw.get("nick") == nick:
|
|
273
|
+
agents.pop(i)
|
|
274
|
+
with open(path, "w") as f:
|
|
275
|
+
yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
|
|
276
|
+
return
|
|
277
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
@@ -238,6 +238,58 @@ per-file (no list to search through).
|
|
|
238
238
|
- `test_start_refuses_archived_server` -- verify error message
|
|
239
239
|
- `test_start_all_skips_archived` -- verify `--all` only starts active agents
|
|
240
240
|
|
|
241
|
+
## Agent Deletion and Create-Overwrite
|
|
242
|
+
|
|
243
|
+
### Problem
|
|
244
|
+
|
|
245
|
+
Once an agent is archived, there's no way to recreate it with a different
|
|
246
|
+
backend or model. `culture agent create` blocks with "already exists in config"
|
|
247
|
+
because the archived entry is still present. Users must manually edit
|
|
248
|
+
`agents.yaml` to change an agent's harness.
|
|
249
|
+
|
|
250
|
+
### Delete Command
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
culture agent delete <nick> [--config PATH]
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Removes an agent from config entirely. Stops the agent if running.
|
|
257
|
+
|
|
258
|
+
### Create Overwrites Archived Agents
|
|
259
|
+
|
|
260
|
+
`culture agent create` now detects when the matching agent is archived and
|
|
261
|
+
automatically replaces it:
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
$ culture agent archive spark-daria
|
|
265
|
+
Agent archived: spark-daria
|
|
266
|
+
|
|
267
|
+
$ culture agent create --server spark --nick daria --agent acp
|
|
268
|
+
Replacing archived agent 'spark-daria'
|
|
269
|
+
Agent created: spark-daria
|
|
270
|
+
...
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Non-archived agents still block `create` with the existing error. This is the
|
|
274
|
+
primary mechanism for moving an agent to a different harness or model.
|
|
275
|
+
|
|
276
|
+
### Config Layer
|
|
277
|
+
|
|
278
|
+
```python
|
|
279
|
+
def remove_agent(path, nick):
|
|
280
|
+
"""Remove an agent from config entirely. Raises ValueError if not found."""
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Added to all backend config files (`claude`, `acp`, `codex`, `copilot`) and
|
|
284
|
+
`packages/agent-harness/config.py`. Uses raw YAML manipulation to preserve
|
|
285
|
+
backend-specific fields (e.g. `acp_command`) on other agents.
|
|
286
|
+
|
|
287
|
+
### Protocol Details
|
|
288
|
+
|
|
289
|
+
No new protocol changes. Delete and create-overwrite are CLI/config operations
|
|
290
|
+
only, consistent with the existing archiving scope (CLI-only, no federation
|
|
291
|
+
concern).
|
|
292
|
+
|
|
241
293
|
## Verification
|
|
242
294
|
|
|
243
295
|
1. Create test agents: `culture agent create --nick test1 && culture agent create --nick test2`
|
|
@@ -246,3 +246,30 @@ def rename_agent(
|
|
|
246
246
|
return
|
|
247
247
|
|
|
248
248
|
raise ValueError(f"agent {old_nick!r} not found in config")
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def remove_agent(
|
|
252
|
+
path: str | Path,
|
|
253
|
+
nick: str,
|
|
254
|
+
) -> None:
|
|
255
|
+
"""Remove an agent from config entirely.
|
|
256
|
+
|
|
257
|
+
Operates on raw YAML to preserve backend-specific fields on other
|
|
258
|
+
agents that the typed schema would strip.
|
|
259
|
+
Raises ValueError if the agent is not found.
|
|
260
|
+
"""
|
|
261
|
+
path = Path(path)
|
|
262
|
+
if not path.exists():
|
|
263
|
+
raise ValueError(f"agent {nick!r} not found in config")
|
|
264
|
+
|
|
265
|
+
with open(path) as f:
|
|
266
|
+
raw = yaml.safe_load(f) or {}
|
|
267
|
+
|
|
268
|
+
agents = raw.get("agents", [])
|
|
269
|
+
for i, agent_raw in enumerate(agents):
|
|
270
|
+
if agent_raw.get("nick") == nick:
|
|
271
|
+
agents.pop(i)
|
|
272
|
+
with open(path, "w") as f:
|
|
273
|
+
yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
|
|
274
|
+
return
|
|
275
|
+
raise ValueError(f"agent {nick!r} not found in config")
|