• v1.23.0 b71000543d

    v1.23.0
    All checks were successful
    CI / build-and-test (push) Successful in 2m29s
    CI / docker-build (push) Successful in 43s
    Stable

    joeyr released this 2026-09-24 23:36:51 -05:00 | 49 commits to main since this release

    Added

    • Follow-up questions remember the conversation. /aufhocker query-chat
      and /aufhocker espnff mcp used to start from nothing on every question, so
      "what about next week?" had no idea what came before it. Now a question
      asked within an hour of your previous one is sent with the questions and
      answers before it. Each person gets their own conversation, per channel and
      per command. new:True on either command starts over, and so does an hour
      of silence or a conversation reaching 20 questions (every follow-up re-sends
      the whole thing, so it cannot grow forever).

      A follow-up adds only what was said in the channel since the previous
      question, rather than re-reading the last hour. Passing context: on a
      follow-up still pulls that window, because asking for it is asking for it.

      Conversations live in a new conversation_turns table and are deleted as a
      whole once their last question is older than the memory window. Set
      CONVERSATION_MEMORY_MINUTES in .env.config (default 60; 0 turns
      memory off and brings back the old behaviour).

    • Follow-ups are cached, so they stay cheap. Each conversation request
      marks the end of the new question as a prompt-cache breakpoint, so the next
      follow-up reads every earlier turn at about a tenth of the normal input
      price. The cache lasts PROMPT_CACHE_TTL (default 1h, matched to the
      memory window; 5m is the other option). Saving to the 1-hour cache costs
      twice the normal input price once, so a question that never gets a
      follow-up costs a little more than before, and every follow-up costs much
      less. The cache only hits if the replayed turns are byte-for-byte what was
      sent before, so each turn is stored exactly as it went out. The
      claude/api success line now logs cacheReadInputTokens, the number that
      shows whether it is working.

    • Public answers become shared context. Pressing 📢 Make Public now also
      records the answer, and every public answer in a channel is context for
      everyone's next question there. query-chat sees them interleaved with the
      chat. espnff mcp sees them and nothing else: it still never reads the
      chat, and its prompt treats them as possibly out of date, with the fantasy
      tools as the source of truth. Private answers never leave the asker's own
      conversation. Public answers sit in a new public_answers table and follow
      RETENTION_DAYS like chat. A long answer is trimmed to 1,500 characters in
      context so one answer cannot crowd out the rest of the history.

    • /aufhocker help, plus /aufhocker lol help and /aufhocker d2 help
      alongside the existing espnff help. There was no way to find out what the
      bot could do from inside Discord except typing /aufhocker and reading
      one-line descriptions. The general help lists every command that is turned
      on (lol and d2 only appear when enabled) and points at each group's own
      help. The group helps list their commands, show admin-only commands only to
      admins, and answer even while the feature is off, saying so, since every
      other command in the group refuses then. espnff help now also mentions
      follow-ups and that it reads public answers.

    Changed

    • README corrected. The usage section still showed /aufhocker query:<question>, which has not been the command for a long time (it is
      /aufhocker query-chat query:<question>), and did not mention espnff at
      all. Both are fixed, and follow-ups, public answers, help and the two new
      settings are documented.
    Downloads