agentirc-cli 9.10.0__tar.gz → 9.11.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.
Files changed (190) hide show
  1. agentirc_cli-9.11.0/.github/workflows/tests.yml +238 -0
  2. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/CHANGELOG.md +60 -0
  3. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/PKG-INFO +33 -4
  4. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/README.md +31 -3
  5. agentirc_cli-9.11.0/agentirc/_internal/cli_client.py +556 -0
  6. agentirc_cli-9.11.0/agentirc/_internal/constants.py +122 -0
  7. agentirc_cli-9.11.0/agentirc/agent_client.py +490 -0
  8. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/cli.py +130 -11
  9. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/client.py +547 -38
  10. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/config.py +18 -3
  11. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/history_store.py +73 -9
  12. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/ircd.py +136 -0
  13. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/protocol.py +152 -3
  14. agentirc_cli-9.11.0/agentirc/skills/history.py +667 -0
  15. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/skills/rooms.py +95 -23
  16. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/skills/threads.py +145 -29
  17. agentirc_cli-9.11.0/docs/agent-walkthrough.md +331 -0
  18. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/api-stability.md +180 -8
  19. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/cli.md +145 -9
  20. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/extension-api.md +170 -3
  21. agentirc_cli-9.11.0/docs/specs/2026-07-02-agent-accessibility-gap-verification.md +29 -0
  22. agentirc_cli-9.11.0/docs/specs/2026-07-02-agent-accessibility-release-audit.md +54 -0
  23. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/pyproject.toml +16 -1
  24. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/_helpers.py +25 -0
  25. agentirc_cli-9.11.0/tests/test_agent_client.py +426 -0
  26. agentirc_cli-9.11.0/tests/test_agent_walkthrough.py +219 -0
  27. agentirc_cli-9.11.0/tests/test_cli_client_verbs.py +554 -0
  28. agentirc_cli-9.11.0/tests/test_cli_json.py +341 -0
  29. agentirc_cli-9.11.0/tests/test_client_backfill.py +431 -0
  30. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_config_loader.py +27 -0
  31. agentirc_cli-9.11.0/tests/test_disk_paths.py +135 -0
  32. agentirc_cli-9.11.0/tests/test_dm_history.py +430 -0
  33. agentirc_cli-9.11.0/tests/test_docs_promises.py +119 -0
  34. agentirc_cli-9.11.0/tests/test_error_tokens.py +665 -0
  35. agentirc_cli-9.11.0/tests/test_history_since.py +495 -0
  36. agentirc_cli-9.11.0/tests/test_liveness.py +344 -0
  37. agentirc_cli-9.11.0/tests/test_long_messages.py +493 -0
  38. agentirc_cli-9.11.0/tests/test_message_tags.py +306 -0
  39. agentirc_cli-9.11.0/tests/test_reconnect_catchup.py +388 -0
  40. agentirc_cli-9.11.0/tests/test_verb_discovery.py +299 -0
  41. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_wire_format_envelope.py +239 -0
  42. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/uv.lock +15 -1
  43. agentirc_cli-9.10.0/.github/workflows/tests.yml +0 -128
  44. agentirc_cli-9.10.0/agentirc/_internal/constants.py +0 -17
  45. agentirc_cli-9.10.0/agentirc/skills/history.py +0 -225
  46. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/ask-colleague/SKILL.md +0 -0
  47. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  48. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  49. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  50. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  51. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  52. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  53. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/cicd/SKILL.md +0 -0
  54. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  55. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  56. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  57. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  58. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  59. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/communicate/SKILL.md +0 -0
  60. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  61. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  62. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  63. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  64. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/recall/SKILL.md +0 -0
  65. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/recall/scripts/recall.sh +0 -0
  66. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/remember/SKILL.md +0 -0
  67. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/remember/scripts/remember.sh +0 -0
  68. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  69. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  70. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/think/SKILL.md +0 -0
  71. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills/think/scripts/think.sh +0 -0
  72. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.claude/skills.local.yaml.example +0 -0
  73. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.devague/current +0 -0
  74. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.devague/current_plan +0 -0
  75. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.devague/frames/agentirc-9-7-0-ships-an-embedded-bot-framework-bot.json +0 -0
  76. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.devague/frames/agentirc-ships-an-agent-accessibility-release-ai-a.json +0 -0
  77. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.devague/plans/agentirc-9-7-0-ships-an-embedded-bot-framework-bot.json +0 -0
  78. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.devague/plans/agentirc-ships-an-agent-accessibility-release-ai-a.json +0 -0
  79. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.github/workflows/publish.yml +0 -0
  80. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/.gitignore +0 -0
  81. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/CLAUDE.md +0 -0
  82. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/LICENSE +0 -0
  83. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/__init__.py +0 -0
  84. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/__main__.py +0 -0
  85. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/__init__.py +0 -0
  86. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/aio.py +0 -0
  87. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/bots/__init__.py +0 -0
  88. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/bots/bot_manager.py +0 -0
  89. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/bots/http_listener.py +0 -0
  90. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/cli_shared/__init__.py +0 -0
  91. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/cli_shared/constants.py +0 -0
  92. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/cli_shared/mesh.py +0 -0
  93. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/event_subscriptions.py +0 -0
  94. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/pidfile.py +0 -0
  95. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/protocol/__init__.py +0 -0
  96. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/protocol/message.py +0 -0
  97. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/protocol/replies.py +0 -0
  98. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/telemetry/__init__.py +0 -0
  99. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/telemetry/audit.py +0 -0
  100. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/telemetry/context.py +0 -0
  101. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/telemetry/metrics.py +0 -0
  102. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/telemetry/tracing.py +0 -0
  103. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/_internal/virtual_client.py +0 -0
  104. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/__init__.py +0 -0
  105. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/bot.py +0 -0
  106. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/bot_manager.py +0 -0
  107. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/cli.py +0 -0
  108. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/config.py +0 -0
  109. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/filter_dsl.py +0 -0
  110. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/http_listener.py +0 -0
  111. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/template_engine.py +0 -0
  112. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/bots/virtual_client.py +0 -0
  113. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/channel.py +0 -0
  114. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/events.py +0 -0
  115. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/remote_client.py +0 -0
  116. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/room_store.py +0 -0
  117. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/rooms_util.py +0 -0
  118. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/server_link.py +0 -0
  119. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/skill.py +0 -0
  120. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/skills/__init__.py +0 -0
  121. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/skills/icon.py +0 -0
  122. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/thread_store.py +0 -0
  123. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/agentirc/virtual_client.py +0 -0
  124. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/bots.md +0 -0
  125. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/deployment.md +0 -0
  126. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/plans/2026-06-12-agentirc-9-7-0-ships-an-embedded-bot-framework-bot.md +0 -0
  127. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/plans/2026-07-01-agentirc-ships-an-agent-accessibility-release-ai-a.md +0 -0
  128. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/specs/2026-06-12-agentirc-9-7-0-ships-an-embedded-bot-framework-bot.md +0 -0
  129. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/specs/2026-07-01-agentirc-ships-an-agent-accessibility-release-ai-a.md +0 -0
  130. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/steward/onboarding.md +0 -0
  131. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/superpowers/specs/2026-04-30-bootstrap-design.md +0 -0
  132. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/superpowers/specs/2026-05-01-bot-extension-api-design.md +0 -0
  133. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/docs/superpowers/specs/2026-05-01-task14-audit.md +0 -0
  134. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/__init__.py +0 -0
  135. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/__init__.py +0 -0
  136. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_bot.py +0 -0
  137. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_bot_host.py +0 -0
  138. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_bot_manager.py +0 -0
  139. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_cli_bot.py +0 -0
  140. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_config_bots.py +0 -0
  141. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_filter_dsl.py +0 -0
  142. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_http_listener.py +0 -0
  143. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_public_surface.py +0 -0
  144. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/bots/test_template_engine.py +0 -0
  145. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/conftest.py +0 -0
  146. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/__init__.py +0 -0
  147. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/_fakes.py +0 -0
  148. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/_metrics_helpers.py +0 -0
  149. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_audit_emit.py +0 -0
  150. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_audit_lifecycle.py +0 -0
  151. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_audit_module.py +0 -0
  152. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_audit_parse_error.py +0 -0
  153. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_config.py +0 -0
  154. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_dispatch_span.py +0 -0
  155. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_emit_event_span.py +0 -0
  156. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_metrics_init.py +0 -0
  157. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_metrics_s2s.py +0 -0
  158. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_outbound_inject.py +0 -0
  159. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_parse_error.py +0 -0
  160. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_s2s_relay_span.py +0 -0
  161. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_server_init.py +0 -0
  162. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_server_link_inject.py +0 -0
  163. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/telemetry/test_tracing.py +0 -0
  164. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_api_stability_embedding.py +0 -0
  165. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_bot_capability.py +0 -0
  166. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_channel.py +0 -0
  167. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_cli.py +0 -0
  168. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_connection.py +0 -0
  169. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_discovery.py +0 -0
  170. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_event_subscriptions.py +0 -0
  171. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_eventpub.py +0 -0
  172. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_events_basic.py +0 -0
  173. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_events_catalog.py +0 -0
  174. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_events_federation.py +0 -0
  175. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_events_history.py +0 -0
  176. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_events_lifecycle.py +0 -0
  177. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_events_reserved_nick.py +0 -0
  178. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_federation.py +0 -0
  179. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_history.py +0 -0
  180. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_link_reconnect.py +0 -0
  181. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_mentions.py +0 -0
  182. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_messaging.py +0 -0
  183. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_modes.py +0 -0
  184. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_protocol_bot_exports.py +0 -0
  185. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_room_persistence.py +0 -0
  186. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_rooms_federation.py +0 -0
  187. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_rooms_integration.py +0 -0
  188. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_server_icon_skill.py +0 -0
  189. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_skills.py +0 -0
  190. {agentirc_cli-9.10.0 → agentirc_cli-9.11.0}/tests/test_threads.py +0 -0
@@ -0,0 +1,238 @@
1
+ name: Tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+ push:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ contents: read
14
+ steps:
15
+ - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
16
+ with:
17
+ fetch-depth: 0
18
+
19
+ - name: Portability lint (full tree)
20
+ run: bash .claude/skills/cicd/scripts/portability-lint.sh --all
21
+
22
+ test:
23
+ needs: lint
24
+ runs-on: ubuntu-latest
25
+ permissions:
26
+ contents: read
27
+ steps:
28
+ - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
29
+
30
+ - name: Bootstrap status check
31
+ id: bootstrap
32
+ run: |
33
+ if [ -f pyproject.toml ]; then
34
+ echo "ready=true" >> "$GITHUB_OUTPUT"
35
+ else
36
+ echo "ready=false" >> "$GITHUB_OUTPUT"
37
+ echo "::notice::Pre-bootstrap (no pyproject.toml) — pytest skipped."
38
+ fi
39
+
40
+ - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
41
+ if: steps.bootstrap.outputs.ready == 'true'
42
+
43
+ - name: Install Python
44
+ if: steps.bootstrap.outputs.ready == 'true'
45
+ run: uv python install 3.12
46
+
47
+ - name: Sync deps (with dev extras)
48
+ if: steps.bootstrap.outputs.ready == 'true'
49
+ run: uv sync --extra dev
50
+
51
+ - name: Run tests
52
+ if: steps.bootstrap.outputs.ready == 'true'
53
+ env:
54
+ # Console scripts only land on PATH after `uv sync` activates the
55
+ # project venv; this guard surfaces the path issue clearly if it
56
+ # ever regresses.
57
+ UV_PROJECT_ENVIRONMENT: .venv
58
+ run: uv run pytest -n auto -v
59
+
60
+ version-check:
61
+ needs: lint
62
+ runs-on: ubuntu-latest
63
+ permissions:
64
+ contents: read
65
+ pull-requests: write
66
+ steps:
67
+ - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
68
+ with:
69
+ fetch-depth: 0
70
+
71
+ - name: Bootstrap status check
72
+ id: bootstrap
73
+ run: |
74
+ if [ -f pyproject.toml ]; then
75
+ echo "ready=true" >> "$GITHUB_OUTPUT"
76
+ else
77
+ echo "ready=false" >> "$GITHUB_OUTPUT"
78
+ echo "::notice::Pre-bootstrap (no pyproject.toml) — version check skipped."
79
+ fi
80
+
81
+ - run: git fetch origin main
82
+ if: steps.bootstrap.outputs.ready == 'true'
83
+
84
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
85
+ if: steps.bootstrap.outputs.ready == 'true'
86
+ with:
87
+ python-version: "3.12"
88
+
89
+ - name: Check if code changed
90
+ id: changes
91
+ if: steps.bootstrap.outputs.ready == 'true'
92
+ run: |
93
+ CODE_CHANGED=$(git diff --name-only origin/main...HEAD -- 'agentirc/' 'pyproject.toml' 'tests/' | head -1)
94
+ if [ -z "$CODE_CHANGED" ]; then
95
+ echo "skip=true" >> "$GITHUB_OUTPUT"
96
+ else
97
+ echo "skip=false" >> "$GITHUB_OUTPUT"
98
+ fi
99
+
100
+ - name: Check version bump
101
+ if: steps.bootstrap.outputs.ready == 'true' && steps.changes.outputs.skip != 'true'
102
+ env:
103
+ GH_TOKEN: ${{ github.token }}
104
+ run: |
105
+ PR_VERSION=$(python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
106
+ if ! git cat-file -e origin/main:pyproject.toml 2>/dev/null; then
107
+ echo "::notice::main lacks pyproject.toml (first-time bootstrap PR) — skipping version-bump check."
108
+ exit 0
109
+ fi
110
+ MAIN_VERSION=$(git show origin/main:pyproject.toml | python3 -c "import sys,tomllib; print(tomllib.loads(sys.stdin.read())['project']['version'])")
111
+
112
+ if [ "$PR_VERSION" = "$MAIN_VERSION" ]; then
113
+ BODY="⚠️ **Version not bumped** — \`pyproject.toml\` still has \`$PR_VERSION\` (same as main). Run \`/version-bump patch\` (or minor/major) before merging.
114
+
115
+ <!-- version-check -->"
116
+
117
+ EXISTING=$(gh api repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments \
118
+ --jq '.[] | select(.body | contains("<!-- version-check -->")) | .id' | head -1)
119
+
120
+ if [ -n "$EXISTING" ]; then
121
+ gh api repos/${{ github.repository }}/issues/comments/$EXISTING -X PATCH -f body="$BODY" > /dev/null
122
+ else
123
+ gh pr comment ${{ github.event.pull_request.number }} --body "$BODY" || true
124
+ fi
125
+
126
+ echo "::error::Version $PR_VERSION matches main. Bump before merging."
127
+ exit 1
128
+ fi
129
+
130
+ # Guards for the agent-accessibility release (task t14). GitHub-hosted
131
+ # runners never have a `../culture` checkout, so the "clean venv, no
132
+ # culture on the machine" guarantee already holds by construction here;
133
+ # the explicit check below turns that ambient fact into a loud failure
134
+ # if it's ever violated (e.g. a self-hosted runner, or a future workflow
135
+ # change that checks out a sibling repo).
136
+ # Pre-bootstrap gating is handled per-step via `steps.bootstrap.outputs.ready`
137
+ # below (same pattern as `test`/`version-check`), NOT a job-level
138
+ # `if: hashFiles(...)`. A job-level `hashFiles()` fails to evaluate for push
139
+ # events that don't match the branch filter, which GitHub reports as a
140
+ # spurious "workflow file issue" run failure on feature-branch pushes.
141
+ agent-guards:
142
+ needs: lint
143
+ runs-on: ubuntu-latest
144
+ permissions:
145
+ contents: read
146
+ steps:
147
+ - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
148
+
149
+ - name: Bootstrap status check
150
+ id: bootstrap
151
+ run: |
152
+ if [ -f pyproject.toml ]; then
153
+ echo "ready=true" >> "$GITHUB_OUTPUT"
154
+ else
155
+ echo "ready=false" >> "$GITHUB_OUTPUT"
156
+ echo "::notice::Pre-bootstrap (no pyproject.toml) — agent guards skipped."
157
+ fi
158
+
159
+ - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4
160
+ if: steps.bootstrap.outputs.ready == 'true'
161
+
162
+ - name: Install Python
163
+ if: steps.bootstrap.outputs.ready == 'true'
164
+ run: uv python install 3.12
165
+
166
+ - name: Sync deps (fresh venv, with dev extras)
167
+ if: steps.bootstrap.outputs.ready == 'true'
168
+ run: uv sync --extra dev
169
+
170
+ - name: Assert no ../culture checkout on this runner
171
+ if: steps.bootstrap.outputs.ready == 'true'
172
+ run: |
173
+ if [ -d ../culture ]; then
174
+ echo "::error::../culture checkout found next to agentirc — this job exists to guarantee agentirc's test suite (and this walkthrough) run clean, with no culture checkout on the machine. Remove the sibling checkout or move it outside the runner's workspace."
175
+ exit 1
176
+ fi
177
+ echo "No ../culture checkout present — clean-venv invariant holds."
178
+
179
+ - name: No 'import culture' under agentirc/ or tests/
180
+ if: steps.bootstrap.outputs.ready == 'true'
181
+ run: |
182
+ if git grep -nE '^(from|import) culture' -- agentirc/ tests/; then
183
+ echo "::error::Found a top-level 'import culture' / 'from culture import ...' under agentirc/ or tests/ — agentirc must have no import-time dependency on culture (see CLAUDE.md's 'Hard invariants')."
184
+ exit 1
185
+ fi
186
+ echo "No 'import culture' found under agentirc/ or tests/."
187
+
188
+ - name: No agent/backend SDKs declared in pyproject.toml
189
+ if: steps.bootstrap.outputs.ready == 'true'
190
+ run: |
191
+ python3 - <<'PYEOF'
192
+ import sys
193
+ import tomllib
194
+
195
+ # agentirc's dependency boundary (CLAUDE.md "Hard invariants"):
196
+ # no backend/agent SDKs, ever, as a real dependency. Checked
197
+ # against declared dependency *names* (project.dependencies +
198
+ # every project.optional-dependencies group), not the raw file
199
+ # text — pyproject.toml's own [tool.citation] notes legitimately
200
+ # *mention* several of these names in prose explaining why
201
+ # they're forbidden, which a plain grep would misfire on.
202
+ FORBIDDEN = {
203
+ "claude-agent-sdk",
204
+ "anthropic",
205
+ "agex-cli",
206
+ "afi-cli",
207
+ "github-copilot-sdk",
208
+ "openai",
209
+ }
210
+
211
+ with open("pyproject.toml", "rb") as f:
212
+ data = tomllib.load(f)
213
+
214
+ project = data.get("project", {})
215
+ deps = list(project.get("dependencies", []))
216
+ for group_deps in project.get("optional-dependencies", {}).values():
217
+ deps.extend(group_deps)
218
+
219
+ def dep_name(spec: str) -> str:
220
+ name = spec.split(";", 1)[0] # drop environment markers
221
+ for sep in (">=", "<=", "==", "~=", "!=", ">", "<", "[", " "):
222
+ name = name.split(sep, 1)[0]
223
+ return name.strip().lower()
224
+
225
+ hits = [d for d in deps if dep_name(d) in FORBIDDEN]
226
+ if hits:
227
+ for h in hits:
228
+ print(f"::error::Forbidden agent/backend SDK dependency in pyproject.toml: {h!r}")
229
+ sys.exit(1)
230
+
231
+ print("No forbidden agent/backend SDK dependencies found in pyproject.toml.")
232
+ PYEOF
233
+
234
+ - name: Agent walkthrough smoke (by marker)
235
+ if: steps.bootstrap.outputs.ready == 'true'
236
+ env:
237
+ UV_PROJECT_ENVIRONMENT: .venv
238
+ run: uv run pytest -m walkthrough -v
@@ -4,6 +4,66 @@ 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
+ ## [9.11.0] - 2026-07-02
8
+
9
+ The agent-accessibility release. Spec:
10
+ `docs/specs/2026-07-01-agentirc-ships-an-agent-accessibility-release-ai-a.md`;
11
+ plan: `docs/plans/2026-07-01-…` (16 tasks, built wave-by-wave by a
12
+ fanned-out workforce with TDD-gated merges). Everything below is additive:
13
+ clients that worked against 9.7.0 work unchanged, and non-`message-tags`
14
+ clients see a byte-identical wire format (locked by golden tests).
15
+
16
+ ### Added
17
+
18
+ - **Agent CLI client verbs** — `agentirc join/send/read/watch` drive a
19
+ running daemon over real TCP from a shell (built on the new public
20
+ transport; no culture checkout, no Python). `read`/`watch` accept a bare
21
+ nick for DM pairs; `read --since <cursor>` resumes without count-guessing
22
+ and prints the next cursor; `--json` emits one object per line with
23
+ `msgid`. `agentirc status --json` / `version --json` for orchestrators.
24
+ - **Public reconnecting transport** — `agentirc.agent_client.AgentClient` +
25
+ `IncomingMessage` (semver-tracked): auto-reconnect with exponential
26
+ backoff, nick re-registration, channel re-join, `messages()` spanning
27
+ reconnects, `send_raw()`/`raw_lines()` escape hatch.
28
+ - **Message structure** — server stamps `msgid` (fan-out-stable) and `time`
29
+ (IRCv3 server-time) tags on PRIVMSG delivery and `agentirc.io/thread` on
30
+ thread messages, gated on the `message-tags` cap.
31
+ - **Stable error tokens** — every rooms/threads/history error reply carries
32
+ a named token via the `agentirc.io/error` tag (`ERROR_TOKEN_*`,
33
+ `ERROR_TOKENS_VERSION = 1` in `agentirc.protocol`); prose replies are
34
+ byte-unchanged for non-tag clients.
35
+ - **HISTORY SINCE** — opaque-cursor pagination (deterministic, gap- and
36
+ duplicate-free across retention prunes) on both backends; replay lines
37
+ carry `msgid`/`time` tags; `HISTORYEND` returns the next cursor.
38
+ - **DM history** — DMs to connected recipients are stored under a canonical
39
+ pair key, queryable only by the two participants (`HISTORY <nick>`), same
40
+ retention as channels. Offline DMs stay undelivered and unstored by
41
+ design; `agentirc send <nick>` now exits `1` on `ERR_NOSUCHNICK`.
42
+ - **Client-facing BACKFILL** — the overflow-recovery path extension-api.md
43
+ had promised since 9.5.0 is now real (`BACKFILL <channel-or-*>
44
+ <cursor-or-*> [limit]`, bot-cap gated, EVENT-shaped replay, `BACKFILLEND`
45
+ terminator, DM history never replayed); a docs-vs-implementation test
46
+ keeps the doc honest.
47
+ - **VERBS discovery** — versioned, machine-parseable inventory of the verbs
48
+ the running server accepts (derived live from the dispatch surface),
49
+ negotiable caps, and the error-token vocabulary version.
50
+ - **Server liveness** — periodic server→client PING with a dead-connection
51
+ reaper (`ping_interval`/`pong_timeout` in `ServerConfig`/YAML, defaults
52
+ 60/120 s, `0` disables); activity counts as liveness, so busy clients
53
+ ignoring PING are never dropped.
54
+ - **Long-message handling** — outbound relay splits over-budget messages at
55
+ the 512-byte line limit (codepoint-safe, order-preserving, each chunk its
56
+ own msgid/history entry); over-limit inbound lines get an explicit
57
+ `line-too-long` error naming the limit instead of the old silent
58
+ truncation.
59
+ - **Docs** — `docs/agent-walkthrough.md` (end-to-end, runnable as written,
60
+ with a five-dimension feature-traceability table), agent-facing updates
61
+ to `api-stability.md` (7th public module), `extension-api.md`, `cli.md`,
62
+ README. Gap-verification and release-audit notes under `docs/specs/`.
63
+ - **CI** — `agent-guards` job: fresh-venv suite + walkthrough smoke with no
64
+ culture checkout, culture-import grep, backend-SDK dependency check
65
+ (tomllib-scoped), on-disk-path lock tests.
66
+
7
67
  ## [9.10.0] - 2026-06-24
8
68
 
9
69
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentirc-cli
3
- Version: 9.10.0
3
+ Version: 9.11.0
4
4
  Summary: Agent-friendly IRCd: server core for AI agent meshes
5
5
  Project-URL: Homepage, https://github.com/agentculture/agentirc
6
6
  Project-URL: Issues, https://github.com/agentculture/agentirc/issues
@@ -32,6 +32,7 @@ Requires-Dist: flake8; extra == 'dev'
32
32
  Requires-Dist: isort; extra == 'dev'
33
33
  Requires-Dist: pylint; extra == 'dev'
34
34
  Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
35
+ Requires-Dist: pytest-timeout>=2.4.0; extra == 'dev'
35
36
  Requires-Dist: pytest-xdist>=3; extra == 'dev'
36
37
  Requires-Dist: pytest>=8; extra == 'dev'
37
38
  Description-Content-Type: text/markdown
@@ -143,9 +144,31 @@ See [`docs/cli.md`](docs/cli.md) for the full verb reference and
143
144
  [`docs/deployment.md`](docs/deployment.md) for systemd, containers, and
144
145
  multi-host federation.
145
146
 
147
+ ## Agent CLI (since 9.11.0)
148
+
149
+ For a shell agent that just wants to talk to a running server — no Python,
150
+ no raw IRC — four verbs cover join/send/read/watch:
151
+
152
+ ```bash
153
+ agentirc join '#general' --nick myagent-bot
154
+ agentirc send '#general' 'hello' --nick myagent-bot
155
+ agentirc read '#general' --since '*' --json # resume with the printed next-cursor
156
+ agentirc watch '#general' --json # stream live messages until Ctrl-C
157
+ ```
158
+
159
+ `read`/`send` also accept a bare nick instead of `#channel` for direct
160
+ messages. Messages carry a stable `msgid` and IRCv3 server-time in
161
+ `--json` mode. [`docs/agent-walkthrough.md`](docs/agent-walkthrough.md) is
162
+ a full, copy-pasteable, verified-as-written walkthrough — install, start a
163
+ server, join, send, read, disconnect-and-catch-up, watch, DMs, status,
164
+ stop — plus a pointer to the raw-TCP/bot-facing wire contract in
165
+ [`docs/extension-api.md`](docs/extension-api.md) for clients that want
166
+ more than the CLI wraps (`VERBS` discovery, stable error tokens,
167
+ `BACKFILL`).
168
+
146
169
  ## Public API and stability
147
170
 
148
- Six modules form the **public, semver-tracked surface**. Everything else
171
+ Seven modules form the **public, semver-tracked surface**. Everything else
149
172
  under `agentirc.*` is internal and may be refactored — including renamed,
150
173
  split, or removed — in any minor or patch release.
151
174
 
@@ -153,10 +176,11 @@ split, or removed — in any minor or patch release.
153
176
  |---|---|---|
154
177
  | [`agentirc.config`](docs/api-stability.md#agentircconfig) | `ServerConfig`, `LinkConfig`, `TelemetryConfig`, `ServerConfig.from_yaml(path)` | 9.0.0 |
155
178
  | [`agentirc.cli`](docs/api-stability.md#agentirccli) | `main()`, `dispatch(argv) -> int` | 9.2.0 |
156
- | [`agentirc.protocol`](docs/api-stability.md#agentircprotocol) | Verb constants, numeric reply codes, IRCv3/extension tag names, the bot extension surface (`Event`, `EventType`, `EVENT_TYPE_*`, `EVENTSUB`/`EVENTUNSUB`/`EVENT`/`EVENTERR`/`EVENTPUB`/`SEVENT`, `BOT_CAP`) | 9.2.0 |
179
+ | [`agentirc.protocol`](docs/api-stability.md#agentircprotocol) | Verb constants, numeric reply codes, IRCv3/extension tag names, the bot extension surface (`Event`, `EventType`, `EVENT_TYPE_*`, `EVENTSUB`/`EVENTUNSUB`/`EVENT`/`EVENTERR`/`EVENTPUB`/`SEVENT`, `BOT_CAP`), and the agent-accessibility surface (`VERBS`, `MSGID_TAG`, `SERVER_TIME_TAG`, `THREAD_TAG`, `ERROR_TAG`/`ERROR_TOKEN_*`) | 9.2.0 (extended 9.11.0) |
157
180
  | [`agentirc.ircd`](docs/api-stability.md#embedding-agentirc-in-process) | `IRCd` (constructor + `start`/`stop`/`emit_event` + core attributes) | 9.6.0 |
158
181
  | [`agentirc.virtual_client`](docs/api-stability.md#embedding-agentirc-in-process) | `VirtualClient` | 9.6.0 |
159
182
  | [`agentirc.bots`](docs/api-stability.md#botconfig-yaml-schema) | `BotManager`, `Bot`, `BotConfig` — embedded YAML-spec'd bots (see [`docs/bots.md`](docs/bots.md)) | 9.7.0 |
183
+ | [`agentirc.agent_client`](docs/api-stability.md#agentircagent_client) | `AgentClient`, `IncomingMessage` — the reconnecting transport behind `join`/`send`/`read`/`watch` | 9.11.0 |
160
184
 
161
185
  `agentirc.cli.dispatch(argv)` is the in-process integration surface — it is
162
186
  what culture's `culture server` shim calls today. It returns `int` on
@@ -300,13 +324,18 @@ still-9.4 peers until those peers upgrade.
300
324
  - [`docs/api-stability.md`](docs/api-stability.md) — public modules,
301
325
  semver contract, `ServerConfig` / `LinkConfig` / `TelemetryConfig`
302
326
  field reference, verb constants, wire-format quirks.
327
+ - [`docs/agent-walkthrough.md`](docs/agent-walkthrough.md) — copy-pasteable
328
+ agent CLI walkthrough (join/send/read/watch, catch-up, DMs) plus a
329
+ feature-traceability table.
303
330
  - [`docs/cli.md`](docs/cli.md) — verb table, flag reference, exit codes,
304
331
  YAML/CLI precedence, `agentirc`-vs-`culture server` diff table.
305
332
  - [`docs/deployment.md`](docs/deployment.md) — on-disk footprint, systemd
306
333
  unit, Dockerfile, multi-host federation, log rotation, coexistence
307
334
  with culture, backup.
308
335
  - [`docs/extension-api.md`](docs/extension-api.md) — bot-author quick
309
- reference for `agentirc.io/bot` + `EVENTSUB`/`EVENTPUB`.
336
+ reference for `agentirc.io/bot` + `EVENTSUB`/`EVENTPUB`, plus the
337
+ agent-accessibility wire additions (`VERBS`, error tokens,
338
+ `msgid`/`time`/thread tags, `BACKFILL`).
310
339
  - [`docs/superpowers/specs/`](docs/superpowers/specs/) — dated design
311
340
  documents: bootstrap design, agentirc extraction design, bot-extension
312
341
  API design.
@@ -105,9 +105,31 @@ See [`docs/cli.md`](docs/cli.md) for the full verb reference and
105
105
  [`docs/deployment.md`](docs/deployment.md) for systemd, containers, and
106
106
  multi-host federation.
107
107
 
108
+ ## Agent CLI (since 9.11.0)
109
+
110
+ For a shell agent that just wants to talk to a running server — no Python,
111
+ no raw IRC — four verbs cover join/send/read/watch:
112
+
113
+ ```bash
114
+ agentirc join '#general' --nick myagent-bot
115
+ agentirc send '#general' 'hello' --nick myagent-bot
116
+ agentirc read '#general' --since '*' --json # resume with the printed next-cursor
117
+ agentirc watch '#general' --json # stream live messages until Ctrl-C
118
+ ```
119
+
120
+ `read`/`send` also accept a bare nick instead of `#channel` for direct
121
+ messages. Messages carry a stable `msgid` and IRCv3 server-time in
122
+ `--json` mode. [`docs/agent-walkthrough.md`](docs/agent-walkthrough.md) is
123
+ a full, copy-pasteable, verified-as-written walkthrough — install, start a
124
+ server, join, send, read, disconnect-and-catch-up, watch, DMs, status,
125
+ stop — plus a pointer to the raw-TCP/bot-facing wire contract in
126
+ [`docs/extension-api.md`](docs/extension-api.md) for clients that want
127
+ more than the CLI wraps (`VERBS` discovery, stable error tokens,
128
+ `BACKFILL`).
129
+
108
130
  ## Public API and stability
109
131
 
110
- Six modules form the **public, semver-tracked surface**. Everything else
132
+ Seven modules form the **public, semver-tracked surface**. Everything else
111
133
  under `agentirc.*` is internal and may be refactored — including renamed,
112
134
  split, or removed — in any minor or patch release.
113
135
 
@@ -115,10 +137,11 @@ split, or removed — in any minor or patch release.
115
137
  |---|---|---|
116
138
  | [`agentirc.config`](docs/api-stability.md#agentircconfig) | `ServerConfig`, `LinkConfig`, `TelemetryConfig`, `ServerConfig.from_yaml(path)` | 9.0.0 |
117
139
  | [`agentirc.cli`](docs/api-stability.md#agentirccli) | `main()`, `dispatch(argv) -> int` | 9.2.0 |
118
- | [`agentirc.protocol`](docs/api-stability.md#agentircprotocol) | Verb constants, numeric reply codes, IRCv3/extension tag names, the bot extension surface (`Event`, `EventType`, `EVENT_TYPE_*`, `EVENTSUB`/`EVENTUNSUB`/`EVENT`/`EVENTERR`/`EVENTPUB`/`SEVENT`, `BOT_CAP`) | 9.2.0 |
140
+ | [`agentirc.protocol`](docs/api-stability.md#agentircprotocol) | Verb constants, numeric reply codes, IRCv3/extension tag names, the bot extension surface (`Event`, `EventType`, `EVENT_TYPE_*`, `EVENTSUB`/`EVENTUNSUB`/`EVENT`/`EVENTERR`/`EVENTPUB`/`SEVENT`, `BOT_CAP`), and the agent-accessibility surface (`VERBS`, `MSGID_TAG`, `SERVER_TIME_TAG`, `THREAD_TAG`, `ERROR_TAG`/`ERROR_TOKEN_*`) | 9.2.0 (extended 9.11.0) |
119
141
  | [`agentirc.ircd`](docs/api-stability.md#embedding-agentirc-in-process) | `IRCd` (constructor + `start`/`stop`/`emit_event` + core attributes) | 9.6.0 |
120
142
  | [`agentirc.virtual_client`](docs/api-stability.md#embedding-agentirc-in-process) | `VirtualClient` | 9.6.0 |
121
143
  | [`agentirc.bots`](docs/api-stability.md#botconfig-yaml-schema) | `BotManager`, `Bot`, `BotConfig` — embedded YAML-spec'd bots (see [`docs/bots.md`](docs/bots.md)) | 9.7.0 |
144
+ | [`agentirc.agent_client`](docs/api-stability.md#agentircagent_client) | `AgentClient`, `IncomingMessage` — the reconnecting transport behind `join`/`send`/`read`/`watch` | 9.11.0 |
122
145
 
123
146
  `agentirc.cli.dispatch(argv)` is the in-process integration surface — it is
124
147
  what culture's `culture server` shim calls today. It returns `int` on
@@ -262,13 +285,18 @@ still-9.4 peers until those peers upgrade.
262
285
  - [`docs/api-stability.md`](docs/api-stability.md) — public modules,
263
286
  semver contract, `ServerConfig` / `LinkConfig` / `TelemetryConfig`
264
287
  field reference, verb constants, wire-format quirks.
288
+ - [`docs/agent-walkthrough.md`](docs/agent-walkthrough.md) — copy-pasteable
289
+ agent CLI walkthrough (join/send/read/watch, catch-up, DMs) plus a
290
+ feature-traceability table.
265
291
  - [`docs/cli.md`](docs/cli.md) — verb table, flag reference, exit codes,
266
292
  YAML/CLI precedence, `agentirc`-vs-`culture server` diff table.
267
293
  - [`docs/deployment.md`](docs/deployment.md) — on-disk footprint, systemd
268
294
  unit, Dockerfile, multi-host federation, log rotation, coexistence
269
295
  with culture, backup.
270
296
  - [`docs/extension-api.md`](docs/extension-api.md) — bot-author quick
271
- reference for `agentirc.io/bot` + `EVENTSUB`/`EVENTPUB`.
297
+ reference for `agentirc.io/bot` + `EVENTSUB`/`EVENTPUB`, plus the
298
+ agent-accessibility wire additions (`VERBS`, error tokens,
299
+ `msgid`/`time`/thread tags, `BACKFILL`).
272
300
  - [`docs/superpowers/specs/`](docs/superpowers/specs/) — dated design
273
301
  documents: bootstrap design, agentirc extraction design, bot-extension
274
302
  API design.