clawbot
53a824c01b
Complete IRC numerics module and move to pkg/irc/ (refs #52 )
...
check / check (push) Successful in 2m18s
- Add all missing numeric reply codes from RFC 1459 and RFC 2812
- Move irc package from internal/irc/ to pkg/irc/ for external use
- Update all imports throughout the codebase
- Added: trace replies (200-209), stats replies (211-219, 242-243),
admin replies (256-259), service replies (234-235), WHOWAS (314, 369),
list start (321), version (351), links (364-365), info (371, 374),
oper/rehash/service (381-383), time/users (391-395),
invite/except lists (346-349), unique ops (325),
and all missing error codes (406-415, 422-424, 436-437, 443-446,
463-467, 472, 476-478, 481, 483-485, 491, 501-502)
2026-03-10 10:06:57 -07:00
946f208ac2
feat: implement IRC numerics batch 2 — connection registration, channel ops, user queries ( #59 )
...
check / check (push) Successful in 5s
## Summary
Implements the remaining important/commonly-used IRC numeric reply codes, as requested in [issue #52 ](#52 ).
### Connection Registration (001-005)
- **002 RPL_YOURHOST** — "Your host is <server>, running version <ver>"
- **003 RPL_CREATED** — "This server was created <date>"
- **004 RPL_MYINFO** — "<server> <version> <usermodes> <chanmodes>"
- **005 RPL_ISUPPORT** — CHANTYPES=#, NICKLEN=32, CHANMODES, NETWORK=neoirc, CASEMAPPING=ascii
All sent automatically after RPL_WELCOME during session creation/login.
### Server Statistics (251-255)
- **251 RPL_LUSERCLIENT** — user count
- **252 RPL_LUSEROP** — operator count
- **254 RPL_LUSERCHANNELS** — channel count
- **255 RPL_LUSERME** — local client count
Sent during connection registration and available via LUSERS command.
### Channel Operations
- **MODE command** — query channel modes (324 RPL_CHANNELMODEIS + 329 RPL_CREATIONTIME) and user modes (221 RPL_UMODEIS)
- **NAMES command** — query channel member list (reuses 353/366)
- **LIST command** — list all channels with member counts (322 RPL_LIST + 323 end)
### User Queries
- **WHOIS command** — 311 RPL_WHOISUSER, 312 RPL_WHOISSERVER, 319 RPL_WHOISCHANNELS, 318 RPL_ENDOFWHOIS
- **WHO command** — 352 RPL_WHOREPLY, 315 RPL_ENDOFWHO
### Database Additions
- `GetChannelCount()` — total channel count for LUSERS
- `ListAllChannelsWithCounts()` — channels with member counts for LIST
- `GetChannelCreatedAt()` — channel creation time for RPL_CREATIONTIME
- `GetSessionCreatedAt()` — session creation time
### Other Changes
- Added `StartTime` to `Globals` struct for RPL_CREATED
- Updated README with comprehensive documentation of all new commands and numerics
- Updated roadmap to reflect implemented features
`docker build .` passes (lint, tests, build all green).
closes [#52 ](#52 )
<!-- session: agent:sdlc-manager:subagent:1f3dcab8-ad6a-4c4c-af72-34a617640c9d -->
Co-authored-by: clawbot <clawbot@noreply.git.eeqj.de >
Co-authored-by: clawbot <clawbot@git.eeqj.de >
Reviewed-on: #59
Co-authored-by: clawbot <sneak+clawbot@sneak.cloud >
Co-committed-by: clawbot <sneak+clawbot@sneak.cloud >
2026-03-10 00:53:46 +01:00
47fb089969
fix: IRC SPA cleanup — /motd, /query, Firefox / key, default MOTD ( #58 )
...
check / check (push) Successful in 1m0s
## Summary
Fixes IRC client SPA issues reported in [issue #57 ](#57 ).
## Changes
### Server-side
- **Default MOTD**: Added figlet-style ASCII art MOTD for "neoirc" as the default when no MOTD is configured via environment/config
- **MOTD command handler**: Added `MOTD` case to `dispatchCommand` so clients can re-request the MOTD at any time (proper IRC behavior)
### SPA (web client)
- **`/motd` command**: Sends MOTD request to server, displays 375/372/376 numerics in server window
- **`/query nick [message]`**: Opens a DM tab with the specified user, optionally sends a message
- **`/clear`**: Clears messages in the current tab
- **Firefox `/` key fix**: Added global `keydown` listener that captures `/` when input is not focused, preventing Firefox quick search and redirecting focus to the input element. Also auto-focuses input on SPA init.
- **MOTD on resumed sessions**: When restoring from a saved token, the MOTD is re-requested so it always appears in the server window
- **Updated `/help`**: Shows all new commands with descriptions
- **Login screen MOTD styling**: Improved for ASCII art display (monospace, proper line height)
## Testing
- `docker build .` passes (includes `make check` with tests, lint, fmt-check)
- All existing tests pass with no modifications
closes #57
<!-- session: agent:sdlc-manager:subagent:7c880fec-f818-49ff-a548-2d3c26758bb6 -->
Co-authored-by: user <user@Mac.lan guest wan>
Reviewed-on: #58
Co-authored-by: clawbot <clawbot@noreply.example.org >
Co-committed-by: clawbot <clawbot@noreply.example.org >
2026-03-09 23:00:34 +01:00
2da7f11484
Rename app from chat to neoirc, binary to neoircd ( closes #46 ) ( #47 )
...
check / check (push) Successful in 2m24s
Complete rename of the application from `chat` to `neoirc` with binary name `neoircd`.
closes #46
## Changes
- **Go module path**: `git.eeqj.de/sneak/chat` → `git.eeqj.de/sneak/neoirc`
- **Server binary**: `chatd` → `neoircd`
- **CLI binary**: `chat-cli` → `neoirc-cli`
- **Cmd directories**: `cmd/chatd` → `cmd/neoircd`, `cmd/chat-cli` → `cmd/neoirc-cli`
- **Go package**: `chatapi` → `neoircapi`
- **Makefile**: binary name, build targets, docker image tag, clean target
- **Dockerfile**: binary paths, user/group names (`chat` → `neoirc`), ENTRYPOINT
- **`.gitignore`/`.dockerignore`**: artifact names
- **All Go imports and doc comments**
- **Default server name**: `chat` → `neoirc`
- **Web client**: localStorage keys (`chat_token`/`chat_channels` → `neoirc_token`/`neoirc_channels`), page title, default server display name
- **Schema files**: all `$id` URLs and example hostnames
- **README.md**: project name, all binary references, examples, directory tree
- **AGENTS.md**: build command reference
- **Test fixtures**: app name and channel names
Docker build passes. All tests pass.
<!-- session: agent:sdlc-manager:subagent:a4b8dbd3-a7c8-4fad-8239-bb5a64a9b3d6 -->
Co-authored-by: clawbot <clawbot@noreply.eeqj.de >
Reviewed-on: #47
Co-authored-by: clawbot <clawbot@noreply.example.org >
Co-committed-by: clawbot <clawbot@noreply.example.org >
2026-03-07 14:43:58 +01:00