Repository navigation
v0.10.0
🚀 What's New
v0.10.0 adds Coolhand.public_content_service, a read-only client for the Coolhand help center that needs no API key, and redacts credentials in the url: you pass to forward_webhook.
✨ New: Read the Coolhand Help Center
SDK users and agents can now search and read the same articles served at coolhandlabs.com/help and /updates, programmatically.
search_help_articles(query:, category:, page:, per_page:)returns aCoolhand::HelpArticleSearchResultwitharticlesandpagination.queryis a relevance search,categoryrestricts to one section by slug, and a blank value counts as omitted.get_help_article(slug)returns one article with its full markdownbodyandtoc. A blank slug raisesCoolhand::Errorbefore any request, and an unknown one raisesCoolhand::HttpErrorwithstatus404.list_help_categorieslists the sections an article can be filed under.- No API key required. With none configured, no
X-API-Keyheader is sent, and anonymous callers are limited to 30 requests per minute per IP. A configuredconfig.api_keyis sent and lifts the limit. A key the server rejects raises a 401Coolhand::HttpError; it is not retried anonymously. - Like the other read methods, these raise where the logging methods log and return
nil.
help_center = Coolhand.public_content_service
result = help_center.search_help_articles(query: 'match rate', per_page: 5)
article = help_center.get_help_article(result.articles.first[:slug]) # full markdown :body
categories = help_center.list_help_categoriesRead-only: creating, updating and archiving articles is not wrapped. See Reading the Help Center.
🔒 Security Hardening
forward_webhooknow redacts credentials in aurl:you supply. Userinfo and sensitive query parameters (for exampletoken=) are replaced with[REDACTED]before the log is sent, the same way intercepted request URLs already are. If you pass aurl:containing such values, they now appear redacted in Coolhand.
⚠️ Heads-up When Upgrading
- Nothing breaks. Existing read services still require an API key, and the only behavior change is the
forward_webhookURL redaction above.
📌 Known Follow-ups
Still open from earlier release reviews: #141 response-body size cap, #142 response-body redaction, #145 absolute-URL req.path matching, #146 remaining test gaps, #120 body-credential redaction beyond Azure, #122–#123 webhook behavior, #124 forward_webhook header filtering (the unsanitized url: part is fixed in this release; forwarding of non-HTTP Rack env keys is not), #125 streaming capture, #127 redaction gaps.