Skip to content

Releases: growilabs/growi

v8.0.7

Choose a tag to compare

@github-actions github-actions released this 07 Oct 15:41

🚀 Improvement

  • imprv: Use isRevisionOfPage for the existing revision/page checks (#12054) @yuki-takei
    • Replaces four hand-written "does this revision belong to this page?" comparisons (revision fetch, page export, comment list, revision diff) with the shared isRevisionOfPage helper. No behavior change; the check now lives in one place so it cannot drift.
    • 版(revision)が対象ページのものかを手書きで比較していた 4 か所(版の取得・ページのエクスポート・コメント一覧・版の差分)を、共通ヘルパー isRevisionOfPage に置き換えました。挙動は変わらず、判定を 1 か所に集約して食い違いを防ぎます。

🐛 Bug Fixes

  • fix(page): Reject empty or non-member user groups when creating or updating group-restricted pages (#12050) @yuki-takei
    • グループ限定ページの作成・更新時に、空のユーザーグループや自分が所属していないユーザーグループの指定を拒否するよう修正
  • fix(page): Keep /user and the top page public even when changed through the grant API (#12051) @yuki-takei
    • grant API 経由で変更されても /user とトップページが公開のまま保たれるよう修正
  • fix(app): Ensure the user home page exists when user creation/activation completes (#12017) @yuki-takei
    • ユーザーの作成・有効化が完了した時点でユーザーホームページが必ず存在するよう修正

🧰 Maintenance

  • support(ci): push slackbot-proxy release image to Artifact Registry (#12033) @yuki-takei
    • The slackbot-proxy release workflow was still pushing to the retired Container Registry host (asia.gcr.io), so releases failed with a permission error. It now pushes to Artifact Registry (asia-docker.pkg.dev), which Cloud Run actually references.
    • slackbot-proxy のリリース workflow が廃止済みの Container Registry(asia.gcr.io)へ push していて権限エラーで失敗していたため、Cloud Run が参照している Artifact Registry(asia-docker.pkg.dev)へ push するよう修正しました。
  • ci(slackbot-proxy): use Workload Identity Federation for Google Cloud auth (#12039) @yuki-takei
    • Switches the slackbot-proxy release workflow from a long-lived service account key to keyless OIDC login via Workload Identity Federation. The job now also runs only for merged PRs, so closing a PR without merging no longer triggers a failing release run.
    • slackbot-proxy のリリース workflow の Google Cloud 認証を、長期有効なサービスアカウントキーから Workload Identity 連携(キー不要の OIDC ログイン)に切り替えました。あわせて job がマージ済み PR のときだけ動くようにし、マージせず閉じた PR で失敗する問題も防ぎます。
  • ci(deps): Bump @opentelemetry/instrumentation-mongoose from 0.63.0 to 0.67.0 (#12038) @dependabot[bot]
  • ci(deps): Bump compression from 1.7.4 to 1.8.2 (#12037) @dependabot[bot]
  • ci(deps): Bump katex from 0.16.47 to 0.18.2 (#12036) @dependabot[bot]

v8.0.6

Choose a tag to compare

@github-actions github-actions released this 05 Oct 14:15

🐛 Bug Fixes

  • fix: dedupe @types/node so .next symlinks survive pnpm deploy (v8.0.5 SSR failure) (#12010) @yuki-takei
    • @types/node の重複を解消し、pnpm deploy 後も .next のシンボリックリンクが維持されるように修正(v8.0.5 の SSR 失敗の修正)。

v8.0.5

Choose a tag to compare

@github-actions github-actions released this 05 Oct 12:16

🚀 Improvement

  • imprv(comment): Add GET /_api/v3/comments (#12000) @yuki-takei
    • A new GET /_api/v3/comments API returns regular comments and inline comments (including replies and resolved ones) in one request, and the page view now uses it. The page comment count now includes inline comments and replies; the old comments.get API is deprecated and GET /_api/v3/inline-comments has been removed.
    • 通常コメントとインラインコメント(返信・解決済みを含む)を 1 回で取得できる GET /_api/v3/comments API が追加され、画面の表示もこの API を使うようになりました。ページのコメント件数にインラインコメントと返信も数えるようになり、旧 API comments.get は非推奨、GET /_api/v3/inline-comments は廃止されました。
  • imprv(inline-comment): Move the creation UI to the cursor edge and collapse resolved comments by default (#11989) @yuki-takei
    • The inline comment button and input form now appear at the cursor-side edge of the selection, and resolved inline comments are collapsed by default in the comment list with a short preview. You can expand them one by one or all at once from the menu, and on narrow screens the comment actions are grouped into a menu.
    • インラインコメントの作成ボタンと入力フォームが選択範囲のカーソル側の端に表示されるようになり、コメント一覧では解決済みのインラインコメントが既定で折りたたまれ、本文の一部をプレビュー表示するようになりました。1 件ずつ、またはメニューから一括で展開でき、狭い画面ではコメントの操作がメニューにまとめられます。
  • imprv(sidebar): Hide single-viewer count and zero comment count in history (#11995) @yuki-takei
    • In the sidebar's Recent Changes, the viewer count is now hidden when only one person (the author) has viewed the page, and the comment count is hidden when there are no comments.
    • サイドバーの履歴(Recent Changes)で、閲覧者が 1 人(作成者のみ)のときは閲覧者数を、コメントが 0 件のときはコメント数を表示しないようになりました。
  • imprv(ui): comment button, lsx list wrap, and footer author avatar (#11940) @yuki-takei
    • Small layout fixes: the comment button icon is now centered, long titles in $lsx lists wrap with proper indentation and badges, and the author avatar in the page footer is aligned with the surrounding text.
    • 細かなレイアウトを改善しました。コメントボタンのアイコンが中央に揃い、$lsx の一覧で長いタイトルが折り返したときのインデントやバッジの位置が整い、ページフッターの作成者アバターが周囲のテキストと揃うようになりました。

🐛 Bug Fixes

  • fix(slacbot-proxy): Fix slackbot-proxy failures on Slack Enterprise Grid installs (#11904) @ryota-t0401
    • Slack Enterprise Grid にインストールした場合に slackbot-proxy が失敗する問題を修正。
  • fix: Show access token expiration date (#11984) @ryota-t0401
    • アクセストークンの有効期限が表示されるように修正。
  • fix(growi-vault): Propagate recursive page delete to vault_instructions (#11978) @yuki-takei
    • ページを配下ごと削除したときに vault_instructions にも削除が反映されるように修正。

🧰 Maintenance

  • chore(i18n): apply translation-only updates from POEditor (#11943) @growi-i18n-pr-publisher[bot]
    • Applies translation updates pulled from POEditor (one Korean string retranslated).
    • POEditor から取り込んだ翻訳の更新を反映しました(韓国語の文言 1 件を再翻訳)。
  • chore(i18n): review structural updates from POEditor (#11935) @growi-i18n-pr-publisher[bot]
    • Syncs translation files with POEditor, removing unused keys from the Japanese, Chinese, and French translations.
    • POEditor と翻訳ファイルを同期し、日本語・中国語・フランス語の翻訳から使われていないキーを削除しました。
  • support(i18n): Mint i18n sync tokens from two GitHub Apps at runtime, no stored PATs (#11920) @yuki-takei
    • The community translation sync workflow now issues short-lived tokens from two GitHub Apps on each run instead of storing personal access tokens, keeping human review required for merges.
    • コミュニティ翻訳の同期ワークフローが、個人アクセストークンを保存せず、実行のたびに 2 つの GitHub App から短期間のトークンを発行する方式に変わりました。マージには引き続き人のレビューが必要です。
  • ci(deps): bump next from 16.2.6 to 16.3.3 (#11888) @dependabot[bot]
  • ci(deps): bump js-yaml from 4.3.1 to 4.3.2 (#11887) @dependabot[bot]
  • ci(deps): bump qs from 6.15.2 to 6.16.0 (#11854) @dependabot[bot]

v8.0.4

Choose a tag to compare

@github-actions github-actions released this 14 Sep 10:12

💎 Features

  • feat: Add inline comments on page body text selections (#11844) @yuki-takei
    • You can now select any text in a page body and attach a comment to that selection. The commented range is highlighted, supports threaded replies and mentions, can be marked as resolved, and the highlight is restored after reloads and (best-effort) after the body is edited. Inline comments are not exposed to share-link viewers.
    • ページ本文の任意のテキストを選択し、その範囲にコメントを付けられるようになりました。コメント対象はハイライト表示され、返信スレッドやメンション、解決済みマークに対応し、リロード後や本文編集後(ベストエフォート)もハイライトが復元されます。共有リンクの閲覧者にはインラインコメントは表示されません。
  • feat: UI for advanced search filters (#11597) @arvid-e
    • The search page now has a filter panel and chips UI so you can narrow results by author, editor, group, and tag without typing search syntax. Applied filters appear as removable chips and are reflected in the URL.
    • 検索ページにフィルターパネルとチップ UI が追加され、検索構文を入力しなくても作成者・更新者・グループ・タグで結果を絞り込めるようになりました。適用中のフィルターは削除可能なチップとして表示され、URL にも反映されます。

🚀 Improvement

  • imprv(lsx): Add tag-based filtering to $lsx (#11883) @yuki-takei
    • $lsx now accepts a tag option to list only pages that have the specified tag(s). Multiple comma-separated tags are combined with AND, and the option works together with the existing path prefix, depth, filter, except, num, sort, and reverse options.
    • $lsx に tag オプションが追加され、指定したタグを持つページだけを一覧できるようになりました。カンマ区切りで複数タグを指定すると AND 条件になり、既存のパス指定や depth / filter / except / num / sort / reverse オプションと組み合わせて使えます。

🐛 Bug Fixes

  • fix(turbo): generate vendor-styles.prebuilt files before component tests (#11882) @yuki-takei
    • コンポーネントテストの前に vendor-styles.prebuilt ファイルを生成するように修正。
  • fix: Preserve inline style and class on rendered headings (#11894) @yuki-takei
    • 描画された見出しのインライン style と class 属性が保持されるように修正。
  • fix: Read-only users could publish/unpublish pages (#11895) @yuki-takei
    • 読み取り専用ユーザーがページの公開・非公開を切り替えられてしまう問題を修正。
  • fix(vault): Stop sending required revisionId as empty string (#11878) @yuki-takei
    • 必須パラメータの revisionId を空文字列で送信しないように修正。

🧰 Maintenance

  • support(i18n): Add community translation pipeline via POEditor (#11874) @yuki-takei
    • Adds a community translation pipeline using POEditor, so contributors can translate GROWI's UI without a GitHub account or PR workflow. Source strings are pushed to POEditor and translations are pulled back automatically; translation-only updates are auto-approved after passing the i18n lint gate, while key additions/removals still require human review.
    • POEditor を使ったコミュニティ翻訳パイプラインを追加しました。GitHub アカウントや PR の知識がなくても GROWI の UI 翻訳に貢献できます。原文は POEditor へ自動反映され、訳文は自動で取り込まれます。訳文のみの更新は i18n lint を通過すれば自動承認され、キーの追加・削除を伴う変更は引き続き人によるレビューが必要です。

v8.0.3

Choose a tag to compare

@github-actions github-actions released this 07 Sep 08:48

💎 Features

  • feat(editor): Add slash command to the Markdown editor (#11838) @Ryosei-Fukushima
    • Typing / in the Markdown editor now opens a command menu; keep typing to filter, then pick with the keyboard or a click to insert headings (H1–H3), bullet / numbered / task lists, quotes, code blocks and tables without reaching for the toolbar.
    • Markdown エディタで / を入力するとコマンドメニューが開き、続けて文字を打つと候補が絞り込まれ、キーボードまたはクリックで見出し(H1〜H3)・箇条書き・番号付きリスト・チェックボックス・引用・コードブロック・テーブルを挿入できるようになった。ページ本文とコメント欄の両方で使え、既存の絵文字補完(:)や @ メンション補完と共存する。

🚀 Improvement

  • imprv(news): Render GROWI news as Markdown (#11608) @ryotaro-nagahara
    • GROWI news entries can now be written in Markdown, so headings, tables, links and images including animated GIFs render properly. News is drawn by a dedicated renderer with a narrowed sanitize schema rather than the wiki renderer.
    • GROWI のニュース本文を Markdown で記述できるようになり、見出し・テーブル・リンク・画像(アニメーション GIF を含む)が表示できる。外部から配信されるコンテンツのため、描画には Wiki のレンダラを流用せず、許可範囲を絞った専用レンダラを使う。
  • imprv: Refactoring for extracting shared page-access check for attachment retrieval (#11813) @yuki-takei
    • The two attachment retrieval routes each carried a verbatim copy of the "can this viewer access the attachment's owning page?" check; both now delegate to one shared function while keeping their own response formats. Internal refactoring with no behavior change.
    • 添付ファイル取得の 2 つのルートに重複していた「閲覧者がその添付の属するページにアクセスできるか」の判定を、共通の関数へ切り出した。応答の形式は各ルートのまま維持しており、内部実装の整理で挙動の変更はない。

🐛 Bug Fixes

  • fix: Clean pages automatically using cron job (#11513) @arvid-e
    • cron ジョブによってページの自動クリーンアップが行われるよう修正。
  • fix(page-bulk-export): Embed attachment images in exported PDFs (RELAY mode) (#11859) @yuki-takei
    • ページの一括エクスポートで、RELAY モード時に出力される PDF へ添付画像を埋め込むよう修正。
  • fix: Enforce access control on revision-by-id and attachment-by-id apiv3 routes (#11810) @yuki-takei
    • apiv3 の revision / attachment を id で取得するルートに、アクセス制御を適用するよう修正。

@growi/pluginkit@1.2.8

Choose a tag to compare

@github-actions github-actions released this 27 Aug 12:21
bc7ff50

Patch Changes

  • Updated dependencies [211f493]:
    • @growi/core@3.0.0

    • 依存パッケージ @growi/core を 3.0.0 に更新。

@growi/core@3.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 12:21
bc7ff50

Major Changes

  • #11513 211f493 Thanks @arvid-e! - Rename IPage.ttlTimestamp to IPage.wipExpiredAt and change its meaning

    WIP page expiry is no longer enforced by a MongoDB TTL index (which deleted pages without running application code, leaving descendantCount inflated and empty placeholder pages orphaned). It is now application-driven, so the stored value changed meaning as well as name:

    • old ttlTimestamp — the instant the page was made WIP; the TTL index supplied the duration via expireAfterSeconds.
    • new wipExpiredAt — the absolute instant the page expires, computed up front.

    BREAKING: consumers reading or writing IPage.ttlTimestamp must switch to wipExpiredAt and must not treat it as "when the page became WIP". A GROWI-side migration converts existing stored values.

    • IPage.ttlTimestamp を IPage.wipExpiredAt にリネームし、意味も変更。WIP ページの失効を MongoDB の TTL インデックス任せ(descendantCount の不整合や空の孤立ページが残る原因)ではなくアプリケーション側で制御するようになり、値は「WIP になった時刻」から「あらかじめ算出した絶対的な失効時刻」に変わった(破壊的変更: 参照・書き込み側は wipExpiredAt への移行が必要。既存データは GROWI 側のマイグレーションで変換される)。

v8.0.2

Choose a tag to compare

@github-actions github-actions released this 25 Aug 14:10

💎 Features

  • No changes

  • feat(g2g-transfer): Add a migration mode that replaces the destination and keeps its admins able to sign in (#11695) @yuki-takei

    • G2G transfer now offers a migration mode that replaces the destination's data instead of merging into it, so group-published pages keep their permissions when moving into an already-initialized GROWI.
    • 初期セットアップ済みの GROWI へ G2G 転送するとデータが混ざり、グループ公開ページが誰にも見えなくなる問題に対し、移行先を置き換える「引っ越しモード」を追加。移行先の管理者アカウントとアクセストークンは引き継がれるためログイン不能にならず、転送前に削除される件数と警告を提示して明示的な確認を求める。

🐛 Bug Fixes

  • fix(file-uploader): Restore update button on FileUploadSetting for GROWI.cloud (#11771) @yuki-takei
    • GROWI.cloud 環境でファイルアップロード設定の更新ボタンが表示されない問題を修正。
  • fix(g2g-transfer): Extend G2G unique-conflict detection to externalaccounts/externalusergroups (#11749) @yuki-takei
    • G2G 転送のユニーク制約の衝突検知を externalaccounts / externalusergroups にも拡張。
  • fix: Guard array length before indexing in POST /pages/delete (#11768) @yuki-takei
    • POST /pages/delete で配列の要素を参照する前に長さを検証するよう修正。
  • fix: Unify not-found/forbidden responses to a uniform 404 for write-action page routes (#11762) @yuki-takei
    • ページの書き込み系ルートで、存在しない場合と権限が無い場合の応答を一律 404 に統一。
  • fix(attachment): Enforce page-viewer permission for guest requests too (#11756) @yuki-takei
    • 添付ファイルの取得で、ゲストからのリクエストにもページの閲覧権限を適用するよう修正。
  • fix(NextLink): decide client-side routing from an explicit route list (#11747) @yuki-takei
    • NextLink のクライアントサイドルーティングの判定を、明示的なルート一覧に基づいて行うよう修正。
  • fix(page-bulk-export): ERR_MODULE_NOT_FOUND on production builds (#11729) @yuki-takei
    • ページの一括エクスポートで、本番ビルド時に ERR_MODULE_NOT_FOUND が発生する問題を修正。
  • fix: SelectGroupModal uses list-group with checkbox rows (#11701) @yuki-takei
    • SelectGroupModal の表示を、チェックボックス付きの list-group 形式に修正。
  • fix: Reduce SSR payload on admin/ai, admin/vault, admin/app by dropping preloadAllLang (#11697) @yuki-takei
    • 管理画面の AI / Vault / アプリ設定で preloadAllLang を廃止し、SSR のペイロードを削減。
  • fix: Report a conflict when deleting a page with a stale revisionId (#11684) @yuki-takei
    • 古い revisionId でページを削除しようとした場合に、競合として通知するよう修正。
  • fix: Report a conflict when renaming a page with a stale revisionId (#11680) @yuki-takei
    • 古い revisionId でページをリネームしようとした場合に、競合として通知するよう修正。
  • fix: Links to pages with non-ASCII paths reload the whole document (#11687) @yuki-takei
    • 非 ASCII のパスを持つページへのリンクで、ドキュメント全体が再読み込みされる問題を修正。
  • fix: Page created at a path with a leftover redirect was not reachable at that path (#11683) @yuki-takei
    • リダイレクト設定が残ったパスに作成したページへ、そのパスでアクセスできない問題を修正。

🧰 Maintenance

  • support: Prisma page-tag-relation model (#11691) @mizozobu
    • Replaces the Mongoose-based PageTagRelation model with Prisma, moving page-tag lookups in page create/delete, the tag routes and search indexing onto the Prisma client. Internal refactoring with no user-visible change.
    • ページとタグの関連(PageTagRelation)モデルを Mongoose から Prisma へ置き換え、ページの作成・削除・タグ関連 API・検索インデックスからの参照を Prisma 経由に変更。内部実装の変更でユーザー体験に変化はない。
  • support: Publish vault-manager and pdf-converter images from master via changesets (#11679) @yuki-takei
    • Moves the vault-manager and pdf-converter Docker image releases onto the same changesets flow as @growi/core / @growi/pluginkit. Publishing is now triggered by a push to master and gated on a stable version plus a missing release tag, replacing the manual release/*/current branch workflow.
    • vault-manager と pdf-converter の Docker image リリースを @growi/core / @growi/pluginkit と同じ changesets の流れに統一。release/*/current ブランチへの手動 PR 運用をやめ、master への push を起点に「安定版であること」「リリースタグが未作成であること」の 2 条件で公開を判定する。

v8.0.1

Choose a tag to compare

@github-actions github-actions released this 10 Aug 11:39

💎 Features

  • feat: Audit Log fuzzy search by username (#11621) @Appleple47
    • The admin Audit Log can now be filtered by fuzzy (partial-match) search on usernames, making it easier to find a specific user's activity.
    • 管理画面の監査ログをユーザー名のあいまい(部分一致)検索で絞り込めるようになり、特定ユーザーの操作履歴を探しやすくなりました。
  • feat: Syntax highlighting view in admin custom (#11453) @mariko-h
    • The admin Custom CSS / Script / Noscript settings now use a code editor with syntax highlighting, line numbers, and dark-mode support instead of a plain textarea.
    • 管理画面のカスタム CSS / スクリプト / Noscript の編集欄が、シンタックスハイライト・行番号・ダークモード対応を備えたコードエディタになりました。

🚀 Improvement

  • imprv(mastra): Focus the chat prompt input when the chat sidebar opens (#11527) @miya
    • When the AI chat sidebar opens (starting a new chat or selecting a recent thread), the prompt input is focused automatically so you can start typing right away.
    • AI チャットのサイドバーを開いたとき(新規チャット作成時や Recent Items のスレッド選択時)に入力欄へ自動でフォーカスが当たり、すぐに入力を始められるように改善。

🐛 Bug Fixes

  • fix(comment): Make /comments.update respond so editing leaves edit mode (#11641) @yuki-takei
    • コメントの /comments.update がレスポンスを返すようにし、編集後に編集モードから抜けられるよう修正。
  • fix(drawio): Fix math, shapes, menu contrast and DRAWIO_URI on self-hosted instances (#11633) @yuki-takei
    • drawio の数式・図形・メニューのコントラスト表示、およびセルフホスト環境での DRAWIO_URI の問題を修正。
  • fix(g2g-transfer): Fix expiring keys, overwritten destination records and silent partial imports (#11658) @yuki-takei
    • G2G 移行における鍵の期限切れ、移行先レコードの上書き、および気づかれないまま一部だけインポートされる問題を修正。
  • fix(g2g-transfer): Abort G2G transfer before import when unique-constraint conflicts exist (#11643) @yuki-takei
    • ユニーク制約の競合がある場合、インポートを始める前に G2G 移行を中断するよう修正。
  • fix(g2g-transfer): Prevent auth bypass and path traversal in the transfer receiver (#11631) @yuki-takei
    • G2G 移行の受信側における認証バイパスとパストラバーサルを防止。
  • fix(vault): Reject requests for objects outside the requester's view (#11604) @yuki-takei
    • GROWI Vault で、リクエスト元の閲覧範囲外にあるオブジェクトへのリクエストを拒否するよう修正。
  • fix(vault): Recover a bootstrap whose runner is gone (#11599) @yuki-takei
    • GROWI Vault で、runner が失われた bootstrap を復旧できるよう修正。
  • fix(vault): Shrink the clone transfer and fix the sparse-checkout recipe (#11605) @yuki-takei
    • GROWI Vault の clone 転送量を削減し、sparse-checkout の手順を修正。
  • fix(vault-manager): Prevent clone checkouts from failing due to long page names (#11603) @yuki-takei
    • 長いページ名が原因で clone のチェックアウトが失敗する問題を修正。
  • fix: Replace dead Slack invite link with a single redirect page (#11626) @yuki-takei
    • リンク切れになっていた Slack 招待リンクを、単一のリダイレクトページ経由に置き換え。
  • fix: Restore native "Choose File" button styling outside .tw-root (#11613) @yuki-takei
    • .tw-root の外側でネイティブの「ファイルを選択」ボタンのスタイルが崩れていた問題を修正。
  • fix: Bookmark folder authorization and bookmark display restriction (#11478) @arvid-e
    • ブックマークフォルダの認可とブックマークの表示制限を修正。

🧰 Maintenance

  • ci(deps-dev): bump vite from 6.4.2 to 6.4.3 (#11533) @dependabot[bot]
  • ci(deps): bump mermaid from 11.15.0 to 11.16.1 (#11662) @dependabot[bot]
  • ci(deps): bump js-yaml from 4.2.0 to 4.3.1 (#11663) @dependabot[bot]
  • chore(app): remove orphaned openai:serviceType / openai:apiKey config keys (#11652) @yuki-takei
    • Removes the dead openai:serviceType / openai:apiKey config keys; AI provider configuration is now handled entirely by AI_PROVIDERS / AI_PROVIDER_API_KEYS, so setting the old keys had no effect.
    • どこからも参照されなくなった openai:serviceType / openai:apiKey 設定キーを削除。AI プロバイダーの設定は AI_PROVIDERS / AI_PROVIDER_API_KEYS に一本化されており、旧キーを設定しても効果がなかったため。
  • support(contributors): Add Allan Wirth as a contributor (#11647) @yuki-takei
    • Adds Allan Wirth to the contributors list.
    • コントリビューターの一覧に Allan Wirth さんを追加。

v8.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 10:42

💎 Features

  • feat(ai): AI agent using Mastra (#10327) @miya
    • Introduces an AI agent built on the Mastra framework.
    • Mastra を基盤とした AI エージェントを導入。
  • feat(ai): Support multiple AI providers and cross-provider model selection (#11394) @miya
    • Admins can now configure OpenAI, Anthropic, Google, and Azure OpenAI simultaneously with per-provider enable/disable, and users can pick models across providers in chat.
    • 管理者が OpenAI / Anthropic / Google / Azure OpenAI を同時に設定・有効/無効切替でき、ユーザーはチャットでプロバイダー横断のモデル選択が可能に。
  • feat(ai): Show official AI provider & model names in the UI (#11432) @miya
    • AI provider and model names in the chat and admin UI now show official display names (e.g. "OpenAI", "GPT-4o") instead of internal IDs.
    • AI のプロバイダー名・モデル名を、内部 ID ではなく公式の表示名(例: OpenAI、GPT-4o)で表示するよう改善。
  • feat: GROWI Vault (#11092) @yuki-takei
    • Adds GROWI Vault, a read-only Git interface that exposes each user's authorized wiki pages as a git-clonable repository.
    • 各ユーザーが閲覧権限を持つ Wiki ページを Git リポジトリとして clone できる、読み取り専用の新機能「GROWI Vault」を追加。
  • feat: Agentic search engine for suggest-path (#11293) @tomoyuki-t-weseek
    • Replaces the suggest-path recommendation engine with a Mastra-based agentic search that iterates queries against page content, and retires the old features/openai integration entirely.
    • パス提案(suggest-path)機能を、検索を繰り返しながら精度を高める Mastra ベースの agentic 検索エンジンに刷新し、旧 features/openai 連携を全廃。
  • feat: Page Markdown endpoint (.md URL / Accept: text/markdown) with navigation footer (#11439) @yuki-takei
    • Adds an HTTP endpoint returning each page's content as Markdown (via .md URL or Accept: text/markdown) with a navigation footer, so AI agents can fetch page content in one GET without running JavaScript.
    • 各ページの内容を Markdown 形式で返す HTTP エンドポイント(.md URL / Accept: text/markdown)を追加。AI エージェントが JavaScript を実行せずに 1 回の GET でページ本文と近傍ナビゲーションを取得できるように。
  • feat(activity): Capture attachment snapshots for ADD/DOWNLOAD actions (#11433) @yuki-takei
    • Extends audit-log snapshot capture to attachment ADD and DOWNLOAD actions, so admins can track who added or downloaded which attachment on which page.
    • 監査ログのスナップショット記録を添付ファイルの追加・ダウンロード操作にも拡張し、いつ誰がどの添付を追加・ダウンロードしたかを追跡可能に。
  • feat(activity-log): Activity Log with action-keyed snapshot union (incl. activities Prisma migration) (#11393) @yuki-takei
    • Makes attachment deletions (direct and cascade) traceable in the audit log by freezing file details into a snapshot at delete time, alongside a migration of the activities model to Prisma.
    • 添付ファイルの削除(直接削除・カスケード削除)を監査ログで追跡可能にし、削除直前の情報をスナップショットとして保存。あわせて activities モデルを Prisma に移行。
  • feat(news): Switch news delivery settings from admin page (#11091) @ryotaro-nagahara
    • Lets admins toggle news delivery on/off from the GROWI admin page via a DB-backed setting, replacing the previous environment-variable-only control.
    • ニュース配信の ON/OFF を管理画面から切替可能にし、従来の環境変数のみによる制御を廃止。

🚀 Improvement

  • imprv: Lazy-load passport strategy SDKs and ldapjs (#11480) @yuki-takei
    • Lazy-loads authentication strategy SDKs (openid-client, ldapjs, passport-saml, etc.) so disabled auth strategies no longer load their dependencies at boot, reducing memory footprint.
    • 認証ストラテジーの SDK 群(openid-client、ldapjs、passport-saml など)を遅延読み込みにし、無効な認証方式の依存が起動時に読み込まれないようにしてメモリ使用量を削減。
  • imprv: Lazy-load mail transports to keep nodemailer/aws-sdk out of boot (#11479) @yuki-takei
    • Lazy-loads mail transport libraries (nodemailer, aws-sdk) so they no longer load at boot when mail is not configured, further reducing startup memory usage.
    • メール送信用ライブラリ(nodemailer、aws-sdk)を遅延読み込みにし、メール未設定時は起動時にロードされないようにしてメモリ使用量をさらに削減。
  • imprv: Warm up Prisma connection at boot (#11481) @yuki-takei
    • Connects the Prisma client at boot instead of on the first query, so connection failures and the engine's memory cost surface immediately rather than on the first user request.
    • Prisma クライアントの接続を起動時に確立するよう変更し、接続失敗やメモリコストが最初のリクエストではなく起動時点で判明するように改善。
  • imprv(activity-log): Activity Log snapshot detail viewer (formatted attachment-removal view + raw fallback) (#11440) @yuki-takei
    • Adds an admin UI to view the audit-log snapshot details captured for attachment deletions, with a formatted view for attachments and a raw fallback for other actions.
    • 監査ログの管理画面に、添付削除操作で記録されたスナップショット詳細を表示する機能を追加。添付には整形表示、その他の操作には raw 表示で対応。
  • imprv(activity-log): Activity Log recording gate (lazy fail-safe) — skip persisting out-of-gate updates (#11421) @yuki-takei
    • Skips persisting audit-log rows for operations determined not to require logging, reducing write load in multi-tenant deployments like GROWI.cloud.
    • 記録対象外と判定された操作の監査ログ行を書き込まないようにし、GROWI.cloud のようなマルチテナント環境での書き込み負荷を削減。

🐛 Bug Fixes

  • fix: Build safeRedirect target from app:siteUrl behind a reverse proxy (#11248) (#11489) @yuki-takei
    • リバースプロキシ配下で safeRedirect のリダイレクト先を app:siteUrl から構築するよう修正。
  • fix(drawio): Preserve and render all pages of a multi-page diagram (#11524) @yuki-takei
    • drawio の複数ページ図で、全ページを保持・描画するよう修正。
  • fix(import): Derive export archive list from server state via SWR (#11511) @yuki-takei
    • インポート機能のエクスポートアーカイブ一覧を SWR 経由でサーバー状態から取得するよう修正。
  • fix(import): Surface import-settings build errors to the admin UI (#11520) @yuki-takei
    • インポート設定のビルドエラーを管理画面に表示するよう修正。

🧰 Maintenance

  • support(search): Drop Elasticsearch 7 support (#11490) @yuki-takei
    • Drops Elasticsearch 7 support entirely; GROWI now supports only ES8 and ES9.
    • Elasticsearch 7 のサポートを完全に廃止し、ES8/ES9 のみをサポート対象に。
  • support: Opt-in jemalloc allocator (JEMALLOC_ENABLED) to release glibc's retained native memory (#11411) @yuki-takei
    • Adds an opt-in JEMALLOC_ENABLED flag that switches the memory allocator to jemalloc, cutting retained native memory by about 70% in load testing.
    • オプトインの JEMALLOC_ENABLED フラグを追加し、メモリアロケータを jemalloc に切替可能に。負荷試験でネイティブメモリの保持量を約 70% 削減。
  • support: Migrate to ESM (#11309) @yuki-takei
    • Migrates the GROWI monorepo to native ESM, removing CJS server output and legacy transpilePackages workarounds, and enforces a no-extension import convention via CI.
    • GROWI モノレポをネイティブ ESM へ全面移行し、サーバーの CJS 出力や旧 transpilePackages 対応を撤廃。拡張子なし import 規約を CI で恒久的に強制。
  • support: Reduce memory consumption for the GROWI server (#11208) @yuki-takei
    • Ships three confirmed memory fixes (MongoDB connection pool limits, a trimmed OpenTelemetry instrumentation set, and a defensive timer), reducing retained RSS growth by about 84% in testing.
    • MongoDB 接続プール上限・OpenTelemetry 計装の絞り込み・タイマーの防御的処理という 3 つの確認済み修正により、メモリ保持量の増加を試験環境で約 84% 削減。
  • ci(deps): bump body-parser from 1.20.3 to 1.20.6 (#11504) @dependabot[bot]