Liking cljdoc? Tell your friends :D

hive.connectors.addon

IAddon hive.connectors. Construction is pure. initialize! validates the config and starts the digest scheduler; shutdown! stops it.

The scheduler is one daemon thread that wakes every :digest/tick-seconds, reads the persisted state, and posts the daily digest when it is due (the local hour reached, today not posted). Due-ness comes from the state file, so a restart never posts twice and a host that was down at the hour posts when it returns.

Config: manifest :addon/config, then config.edn :addons {"hive.connectors" {:digest/channel "#general" ..}}. See hive.connectors.digest.config for every key.

IAddon `hive.connectors`. Construction is pure. `initialize!` validates the
config and starts the digest scheduler; `shutdown!` stops it.

The scheduler is one daemon thread that wakes every :digest/tick-seconds,
reads the persisted state, and posts the daily digest when it is due (the
local hour reached, today not posted). Due-ness comes from the state file,
so a restart never posts twice and a host that was down at the hour posts
when it returns.

Config: manifest `:addon/config`, then config.edn
`:addons {"hive.connectors" {:digest/channel "#general" ..}}`. See
hive.connectors.digest.config for every key.
raw docstring

hive.connectors.digest

The daily digest, end to end. Collect a window of hive-agi activity (merged pull requests from GitHub; releases and news from RSS or Atom feeds, the hive-store release feed by default), compose it, render it, and post it to Slack once a day: the digest as the message, and a Markdown copy in its thread for pasting into ClojureVerse, Reddit or Discord.

Every effect arrives in deps, so the pipeline runs against stubs: :merged-prs! (fn [window]) -> GitHub search hits :fetch-text! (fn [url]) -> feed XML :post! (fn [text opts]) -> {:ok :ts :channel} | {:ok false :error} :read-state (fn []) -> state map :write-state! (fn [state])

The daily digest, end to end. Collect a window of hive-agi activity
(merged pull requests from GitHub; releases and news from RSS or Atom
feeds, the hive-store release feed by default), compose it, render it,
and post it to Slack once a day: the digest as the message, and a
Markdown copy in its thread for pasting into ClojureVerse, Reddit or
Discord.

Every effect arrives in `deps`, so the pipeline runs against stubs:
  :merged-prs!  (fn [window]) -> GitHub search hits
  :fetch-text!  (fn [url]) -> feed XML
  :post!        (fn [text opts]) -> {:ok :ts :channel} | {:ok false :error}
  :read-state   (fn []) -> state map
  :write-state! (fn [state])
raw docstring

hive.connectors.digest.announce

The release roundup, end to end: read every public library of the Maven group (Clojars artifact API for downloads and sibling dependencies, Maven metadata for the release date, GitHub for which repositories are public), sort it into tiers, render it, and post it to the announcement channel at most once per ISO week, with the raw text in a thread for Clojurians.

Effects arrive in deps, on top of the digest's: :list-artifacts! (fn [group]) -> artifact names :artifact-info! (fn [group artifact]) -> Clojars artifact JSON :public-repos! (fn [org]) -> {repo-name description} :fetch-text! (fn [url]) -> Maven metadata XML :post! :read-state :write-state!

The release roundup, end to end: read every public library of the Maven
group (Clojars artifact API for downloads and sibling dependencies, Maven
metadata for the release date, GitHub for which repositories are public),
sort it into tiers, render it, and post it to the announcement channel at
most once per ISO week, with the raw text in a thread for Clojurians.

Effects arrive in `deps`, on top of the digest's:
  :list-artifacts!  (fn [group]) -> artifact names
  :artifact-info!   (fn [group artifact]) -> Clojars artifact JSON
  :public-repos!    (fn [org]) -> {repo-name description}
  :fetch-text!      (fn [url]) -> Maven metadata XML
  :post! :read-state :write-state!
raw docstring

hive.connectors.digest.boundary

Effects for the digest: GitHub search, feed fetches, Slack, the state file, and secrets. Each fn does one effect and returns plain data.

Effects for the digest: GitHub search, feed fetches, Slack, the state
file, and secrets. Each fn does one effect and returns plain data.
raw docstring

hive.connectors.digest.catalog

Pure. The public libraries of a Maven group, sorted for an announcement: tiers by maturity, the releases since the last roundup, and how the core libraries depend on one another.

A library record: {:name :version :published Instant :downloads long :deps #{sibling names} :description}

Pure. The public libraries of a Maven group, sorted for an announcement:
tiers by maturity, the releases since the last roundup, and how the core
libraries depend on one another.

A library record: {:name :version :published Instant :downloads long
                   :deps #{sibling names} :description}
raw docstring

hive.connectors.digest.compose

Pure. One window of raw hive activity -> one digest value. Rendering lives in hive.connectors.digest.render.

Pure. One window of raw hive activity -> one digest value. Rendering lives
in hive.connectors.digest.render.
raw docstring

hive.connectors.digest.config

Pure. Raw addon config -> digest settings with defaults, or the list of problems. Only :digest/* keys are read.

:digest/enabled? post on schedule (default true) :digest/channel Slack channel name or id (default #updates) :digest/hour local hour the post is due (0-23, default 9) :digest/zone time zone id (default America/Bahia) :digest/org GitHub organization (default hive-agi) :digest/maven-group Maven group whose new releases lead the post, each with its changelog (default io.github.hive-agi; nil turns the section off) :digest/maven-repo repository holding its metadata (default Clojars) :digest/feeds ["https://.." {:feed/url .. :feed/id .. :feed/role :release|:news}] default: the hive-store release feed, as :release :digest/slack-token {:env "SLACK_BOT_TOKEN" :command ["pass" "show" ".."]} :digest/github-token {:env "GITHUB_TOKEN" :command ["gh" "auth" "token"]} :digest/title :digest/tagline :digest/links [[label url] ..] :digest/per-repo :digest/total item caps for the post :digest/default-hours :digest/max-hours window bounds :digest/copy-paste-thread? reply with the Markdown copy :digest/state-file :digest/tick-seconds :digest/initial-delay-ms

Pure. Raw addon config -> digest settings with defaults, or the list of
problems. Only :digest/* keys are read.

  :digest/enabled?        post on schedule (default true)
  :digest/channel         Slack channel name or id (default #updates)
  :digest/hour            local hour the post is due (0-23, default 9)
  :digest/zone            time zone id (default America/Bahia)
  :digest/org             GitHub organization (default hive-agi)
  :digest/maven-group     Maven group whose new releases lead the post, each
                          with its changelog (default io.github.hive-agi;
                          nil turns the section off)
  :digest/maven-repo      repository holding its metadata (default Clojars)
  :digest/feeds           ["https://.." {:feed/url .. :feed/id .. :feed/role :release|:news}]
                          default: the hive-store release feed, as :release
  :digest/slack-token     {:env "SLACK_BOT_TOKEN" :command ["pass" "show" ".."]}
  :digest/github-token    {:env "GITHUB_TOKEN" :command ["gh" "auth" "token"]}
  :digest/title :digest/tagline :digest/links [[label url] ..]
  :digest/per-repo :digest/total          item caps for the post
  :digest/default-hours :digest/max-hours window bounds
  :digest/copy-paste-thread?              reply with the Markdown copy
  :digest/state-file :digest/tick-seconds :digest/initial-delay-ms
raw docstring

hive.connectors.digest.feed

Pure. Parse an RSS 2.0, RSS 1.0 or Atom document into items, through the hardened parser in hive.connectors.digest.xml.

Pure. Parse an RSS 2.0, RSS 1.0 or Atom document into items, through the
hardened parser in hive.connectors.digest.xml.
raw docstring

hive.connectors.digest.item

Pure. Classify a merged pull request by its title, the way the hive repos write titles: Conventional Commits, plain sentences, and staging promotions. Decide which items a public daily post lists.

Pure. Classify a merged pull request by its title, the way the hive repos
write titles: Conventional Commits, plain sentences, and staging
promotions. Decide which items a public daily post lists.
raw docstring

hive.connectors.digest.main

The digest and the release roundup from a shell, without a running hive:

clojure -M:digest preview print today's Slack text and Markdown copy clojure -M:digest post [--force] post the digest, once a day clojure -M:digest announce-preview print the release roundup clojure -M:digest announce [--force] post the roundup, once per ISO week, only when something was released clojure -M:digest status settings and persisted state

--channel <name|id> overrides the channel of a post or announce.

Settings are the same as the addon's: config.edn (HIVE_MCP_CONFIG, else ~/.config/hive-mcp/config.edn) under :addons "hive.connectors". Secrets come from SLACK_BOT_TOKEN and GITHUB_TOKEN when set, which is how a Kubernetes CronJob runs it. The state file is shared with the addon, so nothing is posted twice for the same day or week.

The digest and the release roundup from a shell, without a running hive:

  clojure -M:digest preview                print today's Slack text and Markdown copy
  clojure -M:digest post [--force]         post the digest, once a day
  clojure -M:digest announce-preview       print the release roundup
  clojure -M:digest announce [--force]     post the roundup, once per ISO week,
                                           only when something was released
  clojure -M:digest status                 settings and persisted state

`--channel <name|id>` overrides the channel of a post or announce.

Settings are the same as the addon's: config.edn (HIVE_MCP_CONFIG, else
~/.config/hive-mcp/config.edn) under :addons "hive.connectors". Secrets
come from SLACK_BOT_TOKEN and GITHUB_TOKEN when set, which is how a
Kubernetes CronJob runs it. The state file is shared with the addon, so
nothing is posted twice for the same day or week.
raw docstring

hive.connectors.digest.maven

Pure. Maven repository metadata -> the release it records. Clojars stamps lastUpdated when a version is deployed, so it dates the newest release.

Pure. Maven repository metadata -> the release it records. Clojars stamps
`lastUpdated` when a version is deployed, so it dates the newest release.
raw docstring

hive.connectors.digest.render

Pure. A digest value -> text in one chat dialect. Two dialects ship: Slack mrkdwn (the post itself, which copies cleanly into another Slack workspace such as Clojurians) and Markdown (ClojureVerse, Reddit, Discord, GitHub discussions).

Pure. A digest value -> text in one chat dialect. Two dialects ship:
Slack mrkdwn (the post itself, which copies cleanly into another Slack
workspace such as Clojurians) and Markdown (ClojureVerse, Reddit, Discord,
GitHub discussions).
raw docstring

hive.connectors.digest.roundup

Pure. A catalog -> the release roundup, in Slack mrkdwn, kept to about twenty lines: the post for #announcements, and the raw text that pastes into Clojurians with "Format messages with markup" on.

Pure. A catalog -> the release roundup, in Slack mrkdwn, kept to about
twenty lines: the post for #announcements, and the raw text that pastes
into Clojurians with "Format messages with markup" on.
raw docstring

hive.connectors.digest.schedule

Pure. When today's digest is due, and which window of time it covers.

Pure. When today's digest is due, and which window of time it covers.
raw docstring

hive.connectors.digest.text

Pure text helpers for the digest, over hive-system.pattern. Every pattern is named here once; call sites name what they look for.

Pure text helpers for the digest, over hive-system.pattern. Every pattern
is named here once; call sites name what they look for.
raw docstring

hive.connectors.digest.xml

Pure. A hardened DOM parser and the few element helpers the digest reads feeds and Maven metadata with. DOCTYPEs are refused, so a hostile document cannot expand entities or read local files.

Pure. A hardened DOM parser and the few element helpers the digest reads
feeds and Maven metadata with. DOCTYPEs are refused, so a hostile
document cannot expand entities or read local files.
raw docstring

hive.connectors.github

GitHub connector implementing IConnector protocol.

Uses the official Java SDK (kohsuke/github-api) for:

  • Issue management (CRUD, comments, labels)
  • Pull request operations (list, comment, review status)
  • Webhook handling for real-time events
  • OAuth/PAT authentication
GitHub connector implementing IConnector protocol.

Uses the official Java SDK (kohsuke/github-api) for:
- Issue management (CRUD, comments, labels)
- Pull request operations (list, comment, review status)
- Webhook handling for real-time events
- OAuth/PAT authentication
raw docstring

hive.connectors.protocols

Core protocols for hive-connectors.

These protocols define the contract for external service integrations, following the IKGStore pattern from hive-mcp.

Core protocols for hive-connectors.

These protocols define the contract for external service integrations,
following the IKGStore pattern from hive-mcp.
raw docstring

hive.connectors.slack

Slack connector using official Java SDK. Sends hivemind events to Slack channels.

Slack connector using official Java SDK.
Sends hivemind events to Slack channels.
raw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close