IRCv3 Support
Comprehensive implementation status of IRC protocol features in repartee, covering RFC 2812 core protocol and IRCv3 capability extensions.
Capability Negotiation
repartee implements the full IRCv3 capability negotiation framework including CAP LS 302 with multiline parsing, CAP REQ/ACK/NAK, and CAP NEW/DEL for runtime capability changes.
| Feature | Status | Notes |
|---|
CAP LS 302 | Done | Multiline parsing, field3/field4 handling |
CAP REQ/ACK/NAK | Done | Request + detect acceptance |
CAP END | Done | Properly closes negotiation |
CAP NEW/DEL | Done | Runtime capability changes via cap-notify |
Tier 1 -- Must Have
| Capability | Status | Spec | Notes |
|---|
multi-prefix | Done | 3.1 | All mode prefixes per user in NAMES |
extended-join | Done | 3.1 | JOIN includes account + realname |
server-time | Done | 3.2 | @time tag used as message timestamp |
account-tag | Done | 3.2 | User account in message tags |
cap-notify | Done | 3.2 | Server-side capability change notifications |
away-notify | Done | 3.1 | Real-time away status changes |
account-notify | Done | 3.1 | Account login/logout notifications |
chghost | Done | 3.2 | Real-time ident/hostname changes |
| SASL EXTERNAL | Done | 3.1 | CertFP-based authentication via client TLS certificate |
| SASL SCRAM-SHA-256 | Done | 3.1 | RFC 5802/7677 challenge-response with server signature verification |
| SASL mechanism selection | Done | -- | Auto-detect best: EXTERNAL > SCRAM-SHA-256 > PLAIN |
Tier 2 -- High Value
| Capability | Status | Spec | Notes |
|---|
echo-message | Done | 3.2 | Server echoes own messages back; local echo suppressed |
invite-notify | Done | 3.2 | Channel members see invites |
batch | Done | 3.2 | NETSPLIT/NETJOIN produce summary messages |
userhost-in-names | Done | 3.2 | nick!user@host parsing in NAMES |
message-tags | Done | 3.2 | Tags extracted, stored in buffer and DB |
Tier 3 -- Nice to Have
| Capability | Status | Notes |
|---|
monitor | Not Started | Nick online/offline tracking |
labeled-response | Not Started | Match responses to requests |
msgid | Not Started | Message deduplication IDs |
reply | Not Started | Message threading via +draft/reply |
setname | Not Started | Real-time realname changes |
RFC 2812 -- Core Protocol
Connection Registration
| Feature | Status | Notes |
|---|
| PASS | Done | Server password sent before registration |
| NICK | Done | Nickname setting + ERR_NICKNAMEINUSE retry |
| USER | Done | Username/realname registration |
| OPER | Done | IRC operator login |
| QUIT | Done | Disconnect with message |
| USER MODE | Done | +i, +w, etc. |
Channel Operations
| Feature | Status | Notes |
|---|
| JOIN | Done | Multiple channels, keys |
| PART | Done | Leave with reason |
| CHANNEL MODE | Done | +beiklmnostRIv and prefix modes |
| TOPIC | Done | Get/set, RPL_TOPIC/RPL_TOPICWHOTIME |
| NAMES | Done | RPL_NAMREPLY with prefix parsing, multi-prefix, userhost-in-names |
| LIST | Done | Channel listing |
| INVITE | Done | Invite user + notification |
| KICK | Done | Kick with reason |
Messaging & Queries
| Feature | Status | Notes |
|---|
| PRIVMSG | Done | Channel + private, CTCP ACTION |
| NOTICE | Done | Server + user notices |
| WHO / WHOX | Done | Basic WHO (352) + WHOX (354) with account tracking |
| WHOIS | Done | Full multi-line WHOIS display |
| WHOWAS | Done | Offline user lookup |
| AWAY | Done | Set/unset + RPL_AWAY display |
| WALLOPS | Done | Wall message display |
CTCP
| Feature | Status | Notes |
|---|
| ACTION | Done | Send + receive |
| VERSION | Done | Auto-response |
| PING | Done | Auto-response |
| TIME | Done | Auto-response |
| FINGER | Done | Auto-response |
| SOURCE | Done | Auto-response |
ISUPPORT (005)
| Feature | Status | Notes |
|---|
| Token collection | Done | Raw tokens stored on Connection |
| Structured parsing | Done | PREFIX, CHANMODES, NETWORK, STATUSMSG, WHOX, EXTBAN, CASEMAPPING |
| Behavior adaptation | Done | Updated on each RPL_ISUPPORT, NETWORK drives label |
Custom Extensions
| Feature | Status | Notes |
|---|
| WHOX | Done | Extended WHO with field selectors, token matching, account field. Auto-detect via ISUPPORT WHOX token. Auto-WHO on channel join populates NickEntry. |
| Extban | Done | $a:account -- account-based bans/exempts/invites. /ban -a account shorthand. ISUPPORT EXTBAN awareness. |
Skipped
| Capability | Reason |
|---|
metadata / metadata-notify | Rarely deployed |
sts | Strict Transport Security -- out of scope for now |
zcrypt | Niche, rarely used |
Note: All new protocol handling includes tests. Message tags propagate to the scripting API and storage layer. The capability negotiation framework is extensible for future additions.