Skip to content

v0.12.0

Choose a tag to compare

@seibe seibe released this 21 Apr 17:16
· 650 commits to main since this release
d6ed6b7

Added

  • Slack MCP tools for agents. Agents (Claude / Codex / Gemini) can now list Slack channels (slack_list_channels) and post messages (slack_post_message) through an agent-scoped MCP endpoint. Pagination is capped so large workspaces don't exhaust Slack's Tier 2 rate limit.
  • Slack DM file attachments. Files sent to the bot via DM are downloaded to the shared upload directory and surfaced to the agent with a [Attached files] block. Failed downloads are reported via [File download errors] instead of being silently dropped.
  • Embedding model selector. Configure the Gemini embedding model from Global Settings. Saved models are persisted in a dedicated settings table; existing embeddings are cleared automatically when the effective model changes.
  • Configurable send key. Choose whether Enter sends (with Shift+Enter for newline) or the other way around, from Global Settings.
  • KOJO_LOG_LEVEL env var (debug / info / warn / error) — set log level without --dev.
  • Code copy button on fenced code blocks, with a fallback for non-secure contexts / older browsers.

Fixed

  • Single newlines in Markdown now render as <br> (via remark-breaks).
  • Japanese IME composition Enter no longer triggers submit in agent chat, session input, and related forms.
  • Group DM agent display names update in real time after a rename.
  • Group DM long member lists truncate to "A, B +N" when there are four or more members.
  • Default embedding model is now gemini-embedding-001 (the old text-embedding-004 is retired).

Improved

  • Group DM style switcher is now an icon button with a popover instead of a <select>, reclaiming horizontal space.
  • MCP handler no longer logs request or response bodies — only method / status / latency / byte counts — to avoid leaking Slack data.
  • Slack attachments saved to the shared temp dir are now 0600 and bounded by an enforced 20 MB cap (partial downloads are cleaned up).
  • slackListChannelsHandler split into pure helpers (parseListChannelsArgs, matchChannel, listSlackChannels) with full unit coverage.
  • GlobalSettings split into three hooks + three presentational sections.
  • Embedding requests use the shared Gemini HTTP client (60 s timeout) instead of http.DefaultClient.

Requirements

  • Go 1.25+
  • Node 22+ for building the web UI
  • Tailscale for the default (tsnet) listener; use --local to bind to 127.0.0.1 instead

追加

  • Slack MCP ツール: エージェント (Claude / Codex / Gemini) から Slack チャンネル一覧取得 (slack_list_channels) とメッセージ投稿 (slack_post_message) が可能に。大規模ワークスペースで Slack Tier 2 レートリミットを枯渇させないようページネーションを制限。
  • Slack DM のファイル添付対応: DM 経由で送られたファイルを共有アップロードディレクトリにダウンロードし、[Attached files] ブロックとしてエージェントに渡す。失敗時は [File download errors] で通知 (以前は無言で落ちていた)。
  • Embedding モデル選択: Global Settings から Gemini embedding モデルを切り替え可能に。専用の settings テーブルに保存され、モデル変更時は次元数差異に備え既存 embedding を自動クリア。
  • 送信キー切り替え: Enter で送信 (Shift+Enter で改行) / 逆パターンを Global Settings で選択可能。
  • KOJO_LOG_LEVEL 環境変数 (debug / info / warn / error) — --dev なしでログレベル変更可能。
  • フェンス付きコードブロックにコピーボタン。非 secure context / 旧ブラウザ向けに execCommand fallback 付き。

修正

  • Markdown の単一改行が <br> として描画されるように (remark-breaks)。
  • 日本語 IME 変換確定の Enter がエージェントチャット・セッション入力などで送信/実行を誤発火する問題を修正。
  • グループ DM のエージェント表示名がリネーム後にリアルタイム反映。
  • グループ DM のメンバー名が 4 人以上で "A, B +N" に省略表示。
  • デフォルト embedding モデルを gemini-embedding-001 に変更 (廃止された text-embedding-004 の置き換え)。

改善

  • グループ DM のスタイル切替を <select> からアイコンボタン + ポップオーバーに変更 (横幅圧迫解消)。
  • MCP ハンドラのリクエスト/レスポンスボディログ出力を削除 (method / status / latency / bytes のみ)。Slack のトークンやチャンネル内容が漏れないように。
  • 共有 temp ディレクトリに保存される Slack 添付ファイルを 0600 に、20 MB 上限を実効化 (部分ダウンロードは削除)。
  • slackListChannelsHandler を純粋ヘルパー (parseListChannelsArgs / matchChannel / listSlackChannels) に分割しユニットテスト完備。
  • GlobalSettings を 3 hook + 3 section に分割。
  • Embedding リクエストを http.DefaultClient から共有 Gemini HTTP client (60 s timeout) に変更。

要件

  • Go 1.25+
  • Web UI ビルドに Node 22+
  • デフォルト (tsnet) listener 使用時は Tailscale が必要。--local で 127.0.0.1 にバインドすることも可能。