Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,9 @@ AGENT_EVENT_BUS_ICON=/path/to/icon.png agent-event-bus

# Disable Tailscale auth (for testing/local dev)
AGENT_EVENT_BUS_AUTH_DISABLED=1 agent-event-bus

# CLI session attribution (used by hooks)
AGENT_EVENT_BUS_SESSION_ID=abc123 agent-event-bus-cli publish ...
```

Notifications: Uses terminal-notifier if installed (`brew install terminal-notifier`), falls back to osascript.
Expand Down
10 changes: 7 additions & 3 deletions src/agent_event_bus/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,10 @@ def cmd_publish(args):
}
if args.channel:
arguments["channel"] = args.channel
if args.session_id:
arguments["session_id"] = args.session_id
# Use explicit --session-id, fall back to env var
session_id = args.session_id or os.environ.get("AGENT_EVENT_BUS_SESSION_ID")
if session_id:
arguments["session_id"] = session_id

result = call_tool("publish_event", arguments, url=args.url, debug=args.debug)
print(json.dumps(result, indent=2))
Expand Down Expand Up @@ -341,7 +343,9 @@ def main():
p_publish.add_argument("--type", required=True, help="Event type")
p_publish.add_argument("--payload", required=True, help="Event payload")
p_publish.add_argument("--channel", default="all", help="Target channel")
p_publish.add_argument("--session-id", help="Your session ID")
p_publish.add_argument(
"--session-id", help="Your session ID (default: $AGENT_EVENT_BUS_SESSION_ID)"
)
p_publish.set_defaults(func=cmd_publish)

# events
Expand Down
33 changes: 33 additions & 0 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,39 @@ def test_publish_with_channel(self, mock_call):
assert call_args["channel"] == "repo:my-repo"
assert call_args["session_id"] == "abc123"

@patch("agent_event_bus.cli.call_tool")
@patch.dict("os.environ", {"AGENT_EVENT_BUS_SESSION_ID": "env-session-123"})
def test_publish_session_id_from_env(self, mock_call):
"""Test publish uses session_id from env var when not provided."""
mock_call.return_value = {"event_id": 1}

args = Namespace(
type="test_event", payload="hello", channel=None, session_id=None, url=None, debug=False
)
cli.cmd_publish(args)

call_args = mock_call.call_args[0][1]
assert call_args["session_id"] == "env-session-123"

@patch("agent_event_bus.cli.call_tool")
@patch.dict("os.environ", {"AGENT_EVENT_BUS_SESSION_ID": "env-session-123"})
def test_publish_explicit_session_id_overrides_env(self, mock_call):
"""Test explicit --session-id overrides env var."""
mock_call.return_value = {"event_id": 1}

args = Namespace(
type="test_event",
payload="hello",
channel=None,
session_id="explicit-123",
url=None,
debug=False,
)
cli.cmd_publish(args)

call_args = mock_call.call_args[0][1]
assert call_args["session_id"] == "explicit-123"


class TestCmdEvents:
"""Tests for events command."""
Expand Down