DeepSeek Harness 時雨堂 fork 変更情報
翻译
独自変更
以下はすべて「プロンプト・ツールスキーマ・session log を変えない」範囲に収まります。
1. 日本語 UI(language pack)
packages/client/locale-ja
jaを language pack として登録し、出荷済みの各名前空間に日本語辞書を持つ(辞書 60 個)。 キーの欠落・余剰・改名はビルドで落ち、未収録の名前空間はenへフォールバックするpackages/bundle/web-appから読み込み対象として有効化- フォントは upstream の
ui-theme(text / code / terminal のフォント族・字号、General 設定の フォント行)をそのまま使い、fork 独自のフォントプラグインは持たない base.cssの既定スタックだけを locale 中立にし、CJK フォント族を固定しない (ja ページでブラウザーが日本語字形を選ぶ)
2. composer の git ブランチチップ
packages/api/workspace-git、packages/client/ui-git-branch
- Host 側の
workspaceGitRemote 名前空間が、Session のワークスペースのチェックアウトを答える (Agent を activate せず、git読み取りは subprocess provider 経由) - 返すのは 3 分岐の union: ブランチ名 / detached HEAD の短縮 commit id / リポジトリ外なら
none。 見つかった場合はチェックアウトの root、linked worktree のディレクトリ名、originが github.com を指す場合の repository slug と URL も返す - ブラウザー側は
owner/repo:branch (worktree)、detached ではowner/repo@abc1234 (worktree)と描く - 環境情報であり、session state でもモデルリクエストでもない
3. フラットな Session 行のワークスペース名
packages/client/ui-workspace
- In one list のフラット表示で、Session 行に所有ワークスペース名を足す
deriveFlatが Workspace の表示名を各SessionNodeへ射影し、行はタイトルの上の 11px 三次色の行として描く。空のラベルは 未分類- 行の高さは 32px → 45px。並び順も Session の所属も変えない
4. Ollama Cloud の同梱プロバイダーカタログ
packages/llm/llm-pi-ai(src/bundled-catalog.ts)
- pi-ai が持たない経路を既定値付きで提供する。
ollama-cloudの endpoint・プロトコル・ モデルごとのコンテキスト長・出力上限・入力モダリティ・推論レベルを保持する - 収録モデル: DeepSeek V4.1 Flash / V4 Pro、Gemma 4 31B、GLM 5.2 / 5.3 / 5.3 Flash、 GPT-OSS 120B / 20B、Kimi K2.6 / K2.7 Code / K3、MiniMax M2.7 / M3、Mistral Large 3、 Nemotron 3 Nano 30B / Super / Ultra
catalogModels()とdiscoverModels()は設置済み経路と同じように答え、catalogProvider()はundefinedを返したまま(バンドルはプロトコル実装を持たない)- プロファイルが
api/baseURLを名指しすればそちらが勝つ
5. Ollama Cloud / OpenCode Go の時間帯切り替え
packages/llm/llm-pi-ai(src/peak.ts)
- モデルエントリに
peak(ローカル時刻の窓のリスト)を宣言し、通常時間帯とピーク時間帯で 別プロバイダーを使える。Ollama Cloud を昼、OpenCode Go を夜、という運用がこれで成立する (Ollama Cloud 側は 4 の同梱カタログ、切り替え先は pi-ai 設置済みカタログのopencode-go) - 窓は IANA
timeZone付きの包含from/ 排他to。toがfromより前なら日跨ぎ。 設定順にマッチするので、後ろのエントリでより狭い区間を指定できる daysで窓を曜日に限定できる。判定は窓が開始する日で行うので、平日限定の21:00-03:00は月曜の夜から土曜の未明まで(月曜01:00は日曜の窓なので対象外、 土曜01:00は金曜の窓なので対象)。省略時は毎日- 現行のデプロイは
days: [mon, tue, wed, thu, fri]を指定する。Ollama Cloud の低峰は 「平日 UTC 12:00–18:00 の外側+週末終日」で、21:00-03:00Asia/Tokyo はその平日ピークと 一致するため、週末は OpenCode Go へ逃がさず Ollama Cloud のまま使う - 候補は pi-ai の設置済みカタログから解決し、priority 順に試す。
apiKeyEnvを窓ごとに持てる (候補が設定済みルートなら、そちらのapiKeyEnvを継承する) - 切り替えは adapter の中だけで起き、報告される provider・model id・session log は設定された 経路のまま。モデルピッカーのグループは 1 つのままで、モデル変更通知も出ない
- カタログは
LlmModelInfo.routingで窓の提供元を運び、Web のモデル選択はそのプロバイダー名を 出して自動切り替え中であることを示す
6. 検索プロバイダー
packages/web/web-search-ollama
POST /api/web_searchを叩く検索 backend。OLLAMA_CLOUD_API_KEYで認証する- 生成 answer は返らないので結果に
contentは付かない(引用可能な source のみ) - URL の無いエントリは捨てるので、要求より少ない source が返ることがある
- endpoint と結果件数は Web 検索設定ページから編集できる live setting
- Web 検索設定ページは検索プロバイダーの選択で、DeepSeek 検索 API も並ぶ。選択すると
web.searchProviderとweb.fetchProviderを同じ書き込みで設定し、離れると fetch の指定を 消してデプロイ既定へ戻す
7. モデル選択のプロバイダー表示
packages/client/ui-model-selection、packages/client/ui-settings-models
- root メニューは現在のプロバイダーを Model / Effort の上に選択不可の行として出す
- トリガーはプロバイダー名・モデル名・推論レベルを並べて描く
- カタログが解決できない選択は従来どおりの代替表示にまとめる
- ピーク窓が有効な間は、そのプロバイダー名に「(自動)」を付けて描く。曜日限定の窓は 対象外の曜日にこの表示を出さない
8. メッセージ時刻とタイムゾーン設定
packages/client/ui-chat
- メッセージの時刻をアクション行から切り離し、メッセージの下に説明行として表示する。 アイコンは従来どおりホバーで現れ、時刻は常に見える
- Settings → General にタイムスタンプのタイムゾーン(端末 / JST / UTC)を追加し、
ui-chat.clockTimeZoneに保存する - 時刻は常に
YYYY-MM-DDTHH:mm:ss。固定タイムゾーンは2026-01-01T10:10:10 (JST)のように 括弧で自分を名乗る
9. Session の作業ディレクトリ変更
packages/session/working-directory
- 既存プロセスが元のディレクトリを保持したまま、Session の作業ディレクトリを変更できる
- 選択したディレクトリは replay を跨いで残り、ユーザーコンテキストに現れる
- ディレクトリが消えていた場合は、元のプロジェクトがまだあればそこへ戻す
10. Web サーバーのインスタンス別永続状態
packages/util/home-paths、packages/bundle/web-app、packages/boot/app-boot
dsh --profile web --instanceを付けると、明示--portから導出した名前で、共有しては いけない永続状態を名前空間化する$DSH_HOME/instances//sessionsと$DSH_HOME/instances//storagesになる- フラグ無しでは
dshInstancePathがdshHomePathと同じに解決するので、既存の$DSH_HOME/sessionsレイアウトは変わらない - profile・credential・settings・attachment は共有のまま
- 1 プロセス 1 JS スレッドの制約の下で、1 つの
$DSH_HOME上に複数サーバーを並べるための変更
11. 公式 DeepSeek API の Session Log 送信は opt-in
packages/session/session-log-deepseek
enabledの既定はfalse。公式 DeepSeek API のリクエストにdsh_session_logを付けず、session-log-deepseek/delivery-acceptedも記録しない- 有効化は Settings → General のトグル、または profile の
cordis.patch.ymlでsession-log-deepseekにenabled: true - リクエストバイトの話で、モデルが読む内容は変えない
评论
?
参与讨论