Skip to content

v0.10.0

Choose a tag to compare

@mikecarroll mikecarroll released this 21 Oct 21:48
· 15 commits to main since this release
6326bea

🚀 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 a Coolhand::HelpArticleSearchResult with articles and pagination. query is a relevance search, category restricts to one section by slug, and a blank value counts as omitted.
  • get_help_article(slug) returns one article with its full markdown body and toc. A blank slug raises Coolhand::Error before any request, and an unknown one raises Coolhand::HttpError with status 404.
  • list_help_categories lists the sections an article can be filed under.
  • No API key required. With none configured, no X-API-Key header is sent, and anonymous callers are limited to 30 requests per minute per IP. A configured config.api_key is sent and lifts the limit. A key the server rejects raises a 401 Coolhand::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_categories

Read-only: creating, updating and archiving articles is not wrapped. See Reading the Help Center.


🔒 Security Hardening

  • forward_webhook now redacts credentials in a url: you supply. Userinfo and sensitive query parameters (for example token=) are replaced with [REDACTED] before the log is sent, the same way intercepted request URLs already are. If you pass a url: 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_webhook URL 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.


🔗 Resources