agentirc-cli 0.13.0__tar.gz → 0.13.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.
Files changed (201) hide show
  1. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/CHANGELOG.md +10 -0
  2. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/PKG-INFO +1 -1
  3. agentirc_cli-0.13.1/agentirc/__init__.py +1 -0
  4. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/irc_transport.py +5 -1
  5. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/irc_transport.py +5 -1
  6. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/agent_runner.py +42 -24
  7. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/daemon.py +21 -2
  8. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/irc_transport.py +5 -1
  9. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/irc_transport.py +5 -1
  10. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/pyproject.toml +1 -1
  11. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/uv.lock +1 -1
  12. agentirc_cli-0.13.0/agentirc/__init__.py +0 -1
  13. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/.claude/skills/pr-review/SKILL.md +0 -0
  14. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/.github/workflows/pages.yml +0 -0
  15. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/.github/workflows/publish.yml +0 -0
  16. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/.github/workflows/tests.yml +0 -0
  17. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/.gitignore +0 -0
  18. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/.markdownlint-cli2.yaml +0 -0
  19. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/.pr_agent.toml +0 -0
  20. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/CLAUDE.md +0 -0
  21. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/CNAME +0 -0
  22. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/Gemfile +0 -0
  23. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/Gemfile.lock +0 -0
  24. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/LICENSE +0 -0
  25. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/README.md +0 -0
  26. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/_config.yml +0 -0
  27. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/_sass/color_schemes/anthropic.scss +0 -0
  28. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/_sass/custom/custom.scss +0 -0
  29. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/cli.py +0 -0
  30. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/__init__.py +0 -0
  31. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/__init__.py +0 -0
  32. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/__main__.py +0 -0
  33. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/agent_runner.py +0 -0
  34. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/config.py +0 -0
  35. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/daemon.py +0 -0
  36. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/ipc.py +0 -0
  37. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/irc_transport.py +0 -0
  38. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/message_buffer.py +0 -0
  39. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/skill/SKILL.md +0 -0
  40. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/skill/__init__.py +0 -0
  41. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/skill/irc_client.py +0 -0
  42. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/socket_server.py +0 -0
  43. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/supervisor.py +0 -0
  44. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/claude/webhook.py +0 -0
  45. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/__init__.py +0 -0
  46. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/agent_runner.py +0 -0
  47. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/config.py +0 -0
  48. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/daemon.py +0 -0
  49. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/ipc.py +0 -0
  50. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/message_buffer.py +0 -0
  51. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/skill/SKILL.md +0 -0
  52. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/skill/__init__.py +0 -0
  53. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/skill/irc_client.py +0 -0
  54. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/socket_server.py +0 -0
  55. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/supervisor.py +0 -0
  56. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/codex/webhook.py +0 -0
  57. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/__init__.py +0 -0
  58. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/agent_runner.py +0 -0
  59. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/config.py +0 -0
  60. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/daemon.py +0 -0
  61. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/ipc.py +0 -0
  62. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/message_buffer.py +0 -0
  63. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/skill/SKILL.md +0 -0
  64. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/skill/__init__.py +0 -0
  65. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/skill/irc_client.py +0 -0
  66. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/socket_server.py +0 -0
  67. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/supervisor.py +0 -0
  68. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/copilot/webhook.py +0 -0
  69. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/__init__.py +0 -0
  70. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/config.py +0 -0
  71. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/ipc.py +0 -0
  72. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/message_buffer.py +0 -0
  73. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/skill/SKILL.md +0 -0
  74. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/skill/__init__.py +0 -0
  75. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/skill/irc_client.py +0 -0
  76. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/socket_server.py +0 -0
  77. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/supervisor.py +0 -0
  78. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/clients/opencode/webhook.py +0 -0
  79. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/learn_prompt.py +0 -0
  80. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/observer.py +0 -0
  81. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/pidfile.py +0 -0
  82. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/protocol/__init__.py +0 -0
  83. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/protocol/commands.py +0 -0
  84. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/protocol/extensions/federation.md +0 -0
  85. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/protocol/extensions/history.md +0 -0
  86. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/protocol/message.py +0 -0
  87. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/protocol/protocol-index.md +0 -0
  88. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/protocol/replies.py +0 -0
  89. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/__init__.py +0 -0
  90. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/__main__.py +0 -0
  91. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/channel.py +0 -0
  92. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/client.py +0 -0
  93. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/config.py +0 -0
  94. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/ircd.py +0 -0
  95. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/remote_client.py +0 -0
  96. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/server_link.py +0 -0
  97. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/skill.py +0 -0
  98. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/skills/__init__.py +0 -0
  99. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/agentirc/server/skills/history.py +0 -0
  100. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/agent-client.md +0 -0
  101. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/agent-harness-spec.md +0 -0
  102. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/ci.md +0 -0
  103. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/cli.md +0 -0
  104. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/claude/configuration.md +0 -0
  105. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/claude/context-management.md +0 -0
  106. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/claude/irc-tools.md +0 -0
  107. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/claude/overview.md +0 -0
  108. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/claude/setup.md +0 -0
  109. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/claude/supervisor.md +0 -0
  110. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/claude/webhooks.md +0 -0
  111. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/codex/configuration.md +0 -0
  112. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/codex/context-management.md +0 -0
  113. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/codex/irc-tools.md +0 -0
  114. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/codex/overview.md +0 -0
  115. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/codex/setup.md +0 -0
  116. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/codex/supervisor.md +0 -0
  117. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/codex/webhooks.md +0 -0
  118. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/copilot/configuration.md +0 -0
  119. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/copilot/context-management.md +0 -0
  120. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/copilot/irc-tools.md +0 -0
  121. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/copilot/overview.md +0 -0
  122. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/copilot/setup.md +0 -0
  123. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/copilot/supervisor.md +0 -0
  124. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/copilot/webhooks.md +0 -0
  125. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/opencode/configuration.md +0 -0
  126. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/opencode/context-management.md +0 -0
  127. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/opencode/irc-tools.md +0 -0
  128. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/opencode/overview.md +0 -0
  129. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/opencode/setup.md +0 -0
  130. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/opencode/supervisor.md +0 -0
  131. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/clients/opencode/webhooks.md +0 -0
  132. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/codex-backend.md +0 -0
  133. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/copilot-backend.md +0 -0
  134. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/design.md +0 -0
  135. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/docs-site.md +0 -0
  136. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/getting-started.md +0 -0
  137. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/grow-your-agent.md +0 -0
  138. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/layer1-core-irc.md +0 -0
  139. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/layer2-attention.md +0 -0
  140. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/layer3-skills.md +0 -0
  141. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/layer4-federation.md +0 -0
  142. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/layer5-agent-harness.md +0 -0
  143. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/opencode-backend.md +0 -0
  144. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/publishing.md +0 -0
  145. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/resources/github-copilot-sdk-instructions.md +0 -0
  146. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/server-architecture.md +0 -0
  147. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
  148. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
  149. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
  150. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
  151. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/01-pair-programming.md +0 -0
  152. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/02-code-review-ensemble.md +0 -0
  153. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/03-cross-server-delegation.md +0 -0
  154. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/04-knowledge-propagation.md +0 -0
  155. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/05-the-observer.md +0 -0
  156. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/06-cross-server-ops.md +0 -0
  157. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/07-supervisor-intervention.md +0 -0
  158. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/08-apps-as-agents.md +0 -0
  159. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/09-research-swarm.md +0 -0
  160. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases/10-grow-your-agent.md +0 -0
  161. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/docs/use-cases-index.md +0 -0
  162. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/index.md +0 -0
  163. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/README.md +0 -0
  164. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/config.py +0 -0
  165. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/daemon.py +0 -0
  166. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/ipc.py +0 -0
  167. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/message_buffer.py +0 -0
  168. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/skill/SKILL.md +0 -0
  169. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/skill/irc_client.py +0 -0
  170. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/socket_server.py +0 -0
  171. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/packages/agent-harness/webhook.py +0 -0
  172. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
  173. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/plugins/claude-code/skills/irc/SKILL.md +0 -0
  174. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/plugins/codex/skills/agentirc-irc/SKILL.md +0 -0
  175. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/__init__.py +0 -0
  176. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/conftest.py +0 -0
  177. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_agent_runner.py +0 -0
  178. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_channel.py +0 -0
  179. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_codex_daemon.py +0 -0
  180. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_connection.py +0 -0
  181. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_copilot_daemon.py +0 -0
  182. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_daemon.py +0 -0
  183. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_daemon_config.py +0 -0
  184. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_daemon_ipc.py +0 -0
  185. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_discovery.py +0 -0
  186. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_federation.py +0 -0
  187. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_history.py +0 -0
  188. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_integration_layer5.py +0 -0
  189. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_ipc.py +0 -0
  190. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_irc_transport.py +0 -0
  191. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_mentions.py +0 -0
  192. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_message.py +0 -0
  193. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_message_buffer.py +0 -0
  194. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_messaging.py +0 -0
  195. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_modes.py +0 -0
  196. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_opencode_daemon.py +0 -0
  197. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_skill_client.py +0 -0
  198. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_skills.py +0 -0
  199. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_socket_server.py +0 -0
  200. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_supervisor.py +0 -0
  201. {agentirc_cli-0.13.0 → agentirc_cli-0.13.1}/tests/test_webhook.py +0 -0
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/).
6
6
 
7
+ ## [0.13.1] - 2026-03-30
8
+
9
+
10
+ ### Fixed
11
+
12
+ - Fix OpenCode agent crash (exit code -1) caused by 30s timeout on system prompt session/prompt call
13
+ - Capture stderr from opencode subprocess for debugging
14
+ - Add _running guard to busy-wait loops to prevent hang on process death
15
+ - Wrap _start_agent_runner with error handling so runner failures schedule retry instead of crashing daemon
16
+
7
17
  ## [0.13.0] - 2026-03-29
8
18
 
9
19
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentirc-cli
3
- Version: 0.13.0
3
+ Version: 0.13.1
4
4
  Summary: IRC protocol chatrooms for AI agents (and humans allowed)
5
5
  Project-URL: Homepage, https://github.com/OriNachum/agentirc
6
6
  Author: Ori Nachum
@@ -0,0 +1 @@
1
+ __version__ = "0.13.1"
@@ -82,11 +82,15 @@ class IRCTransport:
82
82
  async def send_who(self, target: str) -> None:
83
83
  await self._send_raw(f"WHO {target}")
84
84
 
85
- async def _send_raw(self, line: str) -> None:
85
+ async def send_raw(self, line: str) -> None:
86
+ """Send a raw IRC line. Public for commands like HISTORY."""
86
87
  if self._writer:
87
88
  self._writer.write(f"{line}\r\n".encode())
88
89
  await self._writer.drain()
89
90
 
91
+ async def _send_raw(self, line: str) -> None:
92
+ await self.send_raw(line)
93
+
90
94
  async def _read_loop(self) -> None:
91
95
  buf = ""
92
96
  try:
@@ -82,11 +82,15 @@ class IRCTransport:
82
82
  async def send_who(self, target: str) -> None:
83
83
  await self._send_raw(f"WHO {target}")
84
84
 
85
- async def _send_raw(self, line: str) -> None:
85
+ async def send_raw(self, line: str) -> None:
86
+ """Send a raw IRC line. Public for commands like HISTORY."""
86
87
  if self._writer:
87
88
  self._writer.write(f"{line}\r\n".encode())
88
89
  await self._writer.drain()
89
90
 
91
+ async def _send_raw(self, line: str) -> None:
92
+ await self.send_raw(line)
93
+
90
94
  async def _read_loop(self) -> None:
91
95
  buf = ""
92
96
  try:
@@ -38,6 +38,7 @@ class OpenCodeAgentRunner:
38
38
  self._prompt_queue: asyncio.Queue[str] = asyncio.Queue()
39
39
  self._task: asyncio.Task | None = None
40
40
  self._reader_task: asyncio.Task | None = None
41
+ self._stderr_task: asyncio.Task | None = None
41
42
  self._stopping = False
42
43
  self._request_id = 0
43
44
  self._pending: dict[int, asyncio.Future] = {}
@@ -68,13 +69,14 @@ class OpenCodeAgentRunner:
68
69
  "opencode", "acp",
69
70
  stdin=asyncio.subprocess.PIPE,
70
71
  stdout=asyncio.subprocess.PIPE,
71
- stderr=asyncio.subprocess.DEVNULL,
72
+ stderr=asyncio.subprocess.PIPE,
72
73
  limit=1024 * 1024, # 1MB line buffer
73
74
  env=isolated_env,
74
75
  )
75
76
 
76
- # Start reading responses
77
+ # Start reading responses and stderr
77
78
  self._reader_task = asyncio.create_task(self._read_loop())
79
+ self._stderr_task = asyncio.create_task(self._stderr_loop())
78
80
 
79
81
  # Initialize with ACP protocol
80
82
  resp = await self._send_request("initialize", {
@@ -102,30 +104,19 @@ class OpenCodeAgentRunner:
102
104
  self._running = True
103
105
  logger.info("OpenCode session started: %s", self._session_id)
104
106
 
105
- # Send system prompt as the first turn so all subsequent turns
106
- # are conditioned on it (ACP has no dedicated system instructions field)
107
- if self.system_prompt:
108
- self._busy = True
109
- resp = await self._send_request("session/prompt", {
110
- "sessionId": self._session_id,
111
- "prompt": [{"type": "text", "text": self.system_prompt}],
112
- })
113
- # Wait for turn to finish before accepting user prompts
114
- if resp.get("result", {}).get("stopReason"):
115
- self._busy = False
116
- self._accumulated_text = ""
117
- else:
118
- while self._busy:
119
- await asyncio.sleep(0.1)
120
-
121
107
  # Start the prompt processing loop
122
108
  self._task = asyncio.create_task(self._prompt_loop())
123
109
 
110
+ # Queue system prompt as the first turn so all subsequent turns
111
+ # are conditioned on it (ACP has no dedicated system instructions field).
112
+ # Queued rather than awaited to avoid blocking start() on LLM completion.
113
+ if self.system_prompt:
114
+ await self.send_prompt(self.system_prompt)
115
+
124
116
  if initial_prompt:
125
117
  await self.send_prompt(initial_prompt)
126
118
  except Exception:
127
- shutil.rmtree(self._isolated_home, ignore_errors=True)
128
- self._isolated_home = None
119
+ await self.stop()
129
120
  raise
130
121
 
131
122
  async def stop(self) -> None:
@@ -147,6 +138,13 @@ class OpenCodeAgentRunner:
147
138
  except asyncio.CancelledError:
148
139
  pass
149
140
 
141
+ if self._stderr_task:
142
+ self._stderr_task.cancel()
143
+ try:
144
+ await self._stderr_task
145
+ except asyncio.CancelledError:
146
+ pass
147
+
150
148
  if self._process:
151
149
  try:
152
150
  self._process.terminate()
@@ -179,7 +177,7 @@ class OpenCodeAgentRunner:
179
177
  self._request_id += 1
180
178
  return self._request_id
181
179
 
182
- async def _send_request(self, method: str, params: dict) -> dict:
180
+ async def _send_request(self, method: str, params: dict, timeout: float = 30) -> dict:
183
181
  """Send a JSON-RPC request and wait for the response."""
184
182
  if not self._process or not self._process.stdin:
185
183
  raise ConnectionError("ACP server not running")
@@ -196,7 +194,7 @@ class OpenCodeAgentRunner:
196
194
  await self._process.stdin.drain()
197
195
 
198
196
  try:
199
- return await asyncio.wait_for(future, timeout=30)
197
+ return await asyncio.wait_for(future, timeout=timeout)
200
198
  except (asyncio.TimeoutError, asyncio.CancelledError):
201
199
  self._pending.pop(req_id, None)
202
200
  if not future.done():
@@ -263,9 +261,29 @@ class OpenCodeAgentRunner:
263
261
 
264
262
  self._running = False
265
263
 
264
+ # Cancel companion tasks so they don't outlive the process
265
+ for task in (self._task, self._stderr_task):
266
+ if task and not task.done():
267
+ task.cancel()
268
+
266
269
  if not self._stopping and self.on_exit:
267
270
  await self.on_exit(returncode)
268
271
 
272
+ async def _stderr_loop(self) -> None:
273
+ """Log stderr output from the opencode process."""
274
+ if not self._process or not self._process.stderr:
275
+ return
276
+ try:
277
+ while True:
278
+ line = await self._process.stderr.readline()
279
+ if not line:
280
+ break
281
+ text = line.decode("utf-8", errors="replace").rstrip()
282
+ if text:
283
+ logger.warning("opencode stderr: %s", text)
284
+ except (asyncio.CancelledError, ConnectionError):
285
+ pass
286
+
269
287
  async def _handle_notification(self, msg: dict) -> None:
270
288
  """Handle ACP server notifications."""
271
289
  method = msg.get("method", "")
@@ -321,7 +339,7 @@ class OpenCodeAgentRunner:
321
339
  resp = await self._send_request("session/prompt", {
322
340
  "sessionId": self._session_id,
323
341
  "prompt": [{"type": "text", "text": text}],
324
- })
342
+ }, timeout=120)
325
343
 
326
344
  # Check if response itself signals turn completion
327
345
  result = resp.get("result", {})
@@ -338,7 +356,7 @@ class OpenCodeAgentRunner:
338
356
  self._busy = False
339
357
 
340
358
  # Wait for turn to complete (via notifications)
341
- while self._busy:
359
+ while self._busy and self._running:
342
360
  await asyncio.sleep(0.1)
343
361
 
344
362
  except Exception:
@@ -131,7 +131,16 @@ class OpenCodeDaemon:
131
131
 
132
132
  # 6. Optionally start the OpenCode agent runner
133
133
  if not self.skip_opencode:
134
- await self._start_agent_runner()
134
+ try:
135
+ await self._start_agent_runner()
136
+ except Exception:
137
+ logger.exception(
138
+ "Failed to start agent runner for %s, scheduling retry",
139
+ self.agent.nick,
140
+ )
141
+ self._agent_runner = None
142
+ self._crash_times.append(time.time())
143
+ asyncio.create_task(self._delayed_restart())
135
144
 
136
145
  # 7. Sleep scheduler background task
137
146
  self._sleep_task = asyncio.create_task(self._sleep_scheduler())
@@ -241,6 +250,8 @@ class OpenCodeDaemon:
241
250
  on_exit=self._on_agent_exit,
242
251
  on_message=self._on_agent_message,
243
252
  )
253
+ # Absorb the system prompt response without relaying to IRC
254
+ self._mention_targets.append(None)
244
255
  await self._agent_runner.start()
245
256
  logger.info("OpenCodeAgentRunner started for %s", self.agent.nick)
246
257
 
@@ -366,7 +377,15 @@ class OpenCodeDaemon:
366
377
  async def _delayed_restart(self) -> None:
367
378
  await asyncio.sleep(CRASH_RESTART_DELAY)
368
379
  if not self._circuit_open and self._transport is not None:
369
- await self._start_agent_runner()
380
+ try:
381
+ await self._start_agent_runner()
382
+ except Exception:
383
+ logger.exception(
384
+ "Failed to restart agent runner for %s",
385
+ self.agent.nick,
386
+ )
387
+ # Record as a crash so the circuit breaker can track it
388
+ await self._on_agent_exit(-1)
370
389
 
371
390
  # ------------------------------------------------------------------
372
391
  # Supervisor callbacks
@@ -82,11 +82,15 @@ class IRCTransport:
82
82
  async def send_who(self, target: str) -> None:
83
83
  await self._send_raw(f"WHO {target}")
84
84
 
85
- async def _send_raw(self, line: str) -> None:
85
+ async def send_raw(self, line: str) -> None:
86
+ """Send a raw IRC line. Public for commands like HISTORY."""
86
87
  if self._writer:
87
88
  self._writer.write(f"{line}\r\n".encode())
88
89
  await self._writer.drain()
89
90
 
91
+ async def _send_raw(self, line: str) -> None:
92
+ await self.send_raw(line)
93
+
90
94
  async def _read_loop(self) -> None:
91
95
  buf = ""
92
96
  try:
@@ -83,11 +83,15 @@ class IRCTransport:
83
83
  async def send_who(self, target: str) -> None:
84
84
  await self._send_raw(f"WHO {target}")
85
85
 
86
- async def _send_raw(self, line: str) -> None:
86
+ async def send_raw(self, line: str) -> None:
87
+ """Send a raw IRC line. Public for commands like HISTORY."""
87
88
  if self._writer:
88
89
  self._writer.write(f"{line}\r\n".encode())
89
90
  await self._writer.drain()
90
91
 
92
+ async def _send_raw(self, line: str) -> None:
93
+ await self.send_raw(line)
94
+
91
95
  async def _read_loop(self) -> None:
92
96
  buf = ""
93
97
  try:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentirc-cli"
3
- version = "0.13.0"
3
+ version = "0.13.1"
4
4
  description = "IRC protocol chatrooms for AI agents (and humans allowed)"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -4,7 +4,7 @@ requires-python = ">=3.12"
4
4
 
5
5
  [[package]]
6
6
  name = "agentirc-cli"
7
- version = "0.13.0"
7
+ version = "0.13.1"
8
8
  source = { editable = "." }
9
9
  dependencies = [
10
10
  { name = "anthropic" },
@@ -1 +0,0 @@
1
- __version__ = "0.13.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes