DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Plugin 1tempo — DSH Plugin for DeepSeek Harness
← Plugins
P

dsh-plugin-1tempo

Plugin 1tempo

MiL-Bridge: convert a request into MiL with Sarashina, review it, then hand it to the model dsh is running (TUI and Web UI)

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:puyokura/dsh-1tempo#18744604b1b47f614f92bdedeb12d7ff3fd8927a
READMECompatibilityVersions

Compatibility and provenance

Plugin 1tempo is published as dsh-plugin-1tempo and currently resolves to version 0.1.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
10/15/2026

Versions

0.1.1stable
10/15/2026

Related plugins

Loading related plugins…

Latest
0.1.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/15/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in models-usage.

Whale Widgetdsh-whale-widgetDeepSeek balance whale widget in the bottom-right corner of the DSH Web interface: balance/today’s usage/peak-off-peak pricing, customizable bubble click sequence (text/balance/today/peak-off-peak/image/random phrases and parallel weighted selection), per-line styles and fonts, floating quick editinUsage@linxin666/dsh-usageUsage statistics plugin for the dsh web GUI: per-provider balance and coding-plan quota detection plus a live token usage ledger, with a compact price glance card above the sidebar's Settings rowClient Ui Model Capabilities@linxin666/dsh-client-ui-model-capabilitiesPer-model capability declarations (image input and reasoning efforts) for custom pi-ai providers, edited in place on the Models settings cards; writes the official llm-pi-ai settings namespace, no DSH source changes.Cost Meterdsh-cost-meterDeepSeek Harness session cost statistics plugin: current session cost, today’s charges, historical records, and synchronization with official pricing; supports multi-provider, multi-model price calculation (built-in pricing catalog for 170+ model IDs with automatic matching); queries and displays su

README

1tempo

曖昧な依頼文を MiL へ変換し、承認してから dsh で選択中のモデルへ渡す dsh プラグイン。

/onetempo 3Dモデルを作って
  ↓ sarashina が MiL へ変換(mil-spec を system に渡す)
  ↓ 原文と MiL を表示し、承認(必要なら修正)
  ↓ 承認済みの MiL を、dsh で選択中のモデルへ渡す
  • 確定設計: architecture.md
  • dsh への要望(会話へ書く API): dsh-feature-request.md
  • 企画の原案・質疑応答・実測レポート(proposal.md / qa-record.md / preflight-report-*.md)はローカル記録のため、この公開リポジトリには含めていない。本文中の preflight-report-run*.md はその記録のファイル名を示す。

何をするか

  1. /onetempo が起動したときだけ動く。通常の依頼文には反応しない。
  2. 依頼文を Sarashina API に送り、MiL へ変換する。
  3. 原文と MiL を表示し、承認を求める。承認前に編集もできる。
  4. 承認された MiL を、dsh の選択モデルへ 利用者のメッセージとして 渡す(source.kind: 'user')。dsh は source.kind === 'user' のメッセージだけを利用者の行として扱い、/rewind の戻り先にもする(それ以外はコンテキスト行になり、会話に出ない)。変換の来歴はプラグインの storage ログと通知に残す。
  5. 原文・MiL・逆翻訳・変換モデル・呼び出し回数・承認有無を dsh の storage に記録する。storage が使えない場合は「ログ: 保存できませんでした(理由)」と出し、保存したように見せない(セッション内の記録だけを保持する)。

必要なもの

  • dsh(@deepseek-harness-tui/dsh-tui が入ったプロファイル)
  • Node.js 24 以降(テストと測定ツールで確認)
  • SARASHINA_API_KEY(Sarashina で発行。無償ベータ、Google ログイン、事前申し込み不要)

キーの指定方法は以下のいずれか(優先順位順):

  1. ~/.dsh/.credentials.yaml(dsh 標準の認証情報ファイル、推奨)
  2. 環境変数 SARASHINA_API_KEY(.env を使う場合は node --env-file=.env)
# 測定ツールの例(~/.dsh/.credentials.yaml にキーがあれば --env-file 不要)
node tools/preflight-decode.mjs --dry

使い方

/onetempo [mini|nano] [back] <依頼文>
引数意味
mini / nano変換モデルの上書き。sarashina3-mini(6 RPM) / sarashina3-nano(60 RPM、既定)
back逆翻訳(MiL を自然語へ戻したもの)も表示する。省略時は設定の既定
<依頼文>変換対象。フラグの後に来た文字列をそのまま使う

引数なしの /onetempo は使い方を表示する。

名前について: プロジェクト名は 1tempo だが、コマンドと識別子は onetempo。dsh のコマンド名とプラグイン所有の設定名前空間は /^[a-z][a-z0-9_-]*$/(英小文字で始まる)に一致する必要があり、当初案の 1tempo は数字始まりのため拒否される(実測: command name "1tempo" must match ... / invalid TUI settings-section namespace: 1tempo)。表示名(1tempo、設定セクションの見出し、source.plugin)は 1tempo のまま。

表示と承認

  • 変換結果は 通知欄 に出る。200 セル以内に収まる形に整形する(1tempo: 送信しました… / MiL: <送信する MiL> / 逆翻訳・ログ行)。
    • dsh はプラグインのコマンド結果を channel.notify(cleanRenderText(text, COMMAND_RESULT_CELLS = 200)) で通知欄に描く。200 セルを超えた分は … で切られるため、先頭を MiL にし、続く注記は予算内の分だけ載せる(プラグイン側では切り詰めない)
    • 長い MiL の全文は承認ダイアログの初期値(490 セルまで)で読める
  • 会話に出るのは送信メッセージの本文だけ(content)。本文は MiL のみ。
    • content は「会話に表示されるテキスト」と「モデルが読むテキスト」を兼ねる。dsh に両者を分ける欄は無い(実測: tools/inspect-session-log.mjs --grep で agent/inbox/spliced に本文が入ることを確認)。そのため原文を会話に出すと、そのままモデルにも渡る
    • includeOriginalInMessage: true にすると本文が「依頼: <原文>」→「MiL: …」になる。会話の行が自分の言葉で始まり /rewind で識別しやすいが、MiL の圧縮効果は失われる。既定は false
    • source は { kind: 'user' } のみ(form を付けない)。dsh は isHuman = sourceKind === 'user' の一点で利用者とプラグインを区別し(dsh-adapter/trajectory/projection.js)、/rewind も同じ条件で戻り先を選ぶ(sessionTree.js)。plugin:1tempo のままだと context 行になり会話に出ず、form を付けると行ごと消える(どちらも実機で確認)。代償: セッションログ上は「利用者が送った」記録になる。変換の来歴は storage ログと通知に残す(qa-record.md §6.22)
    • 会話へ任意の行を足す API は無い。プラグインのコマンド結果は通知に回り(200 セル上限)、session.append でログ専用イベントを足すこともできない(ignorable を付けられない)。「会話にだけ原文を出す」要望は dsh-feature-request.md の提案 6(入力欄へ本文を入れる API)にまとめた
  • 承認は 編集ダイアログ 1 つだけ。MiL がダイアログの初期値として表示されるので、その場で読んで確認できる。
    • そのまま Enter → 送信
    • 本文を編集して Enter → 修正した MiL を送信
    • Esc / Ctrl+C → 送信を取り消す(未編集の MiL を勝手に送らない)
    • dialogTimeoutMs(既定 3 分)を過ぎた場合も取り消す
  • 確認ダイアログ(「この MiL を送信しますか」)は 2026-10-14 に廃止した。コマンドの出力はハンドラの終了後に出るため、その時点では MiL が画面に無く、見えないまま承認させることになっていた。
  • MiL が 490 セルを超える場合は編集ダイアログを開かず、表示のみ行う。
  • MiL が質問のみで内容を持たない場合は、その旨を注記に出す(依頼の要件が落ちていないかを確認するため)。
  • 変換に失敗したときは、設定 failureMode に従う(既定は「原文をそのまま送るか確認」。自動送信はしない)。
  • ダイアログ下部の操作ヒント(Enter to confirm · Esc to cancel など)は dsh のダイアログ部品が描くもので、プラグインからは消せない。消すにはダイアログを使わない方式(会話で完結する 2 段階)へ変える必要がある。

インストール(dsh への登録)

このリポジトリは dsh の bundle パッケージとして作ってある(package.json の dsh.bundle.patch → cordis.patch.yml)。したがって、展開も手作業の設定も不要で、dsh のプラグイン管理から spec を指定するだけで入る。

1. Web UI の Plugins ページから(推奨)

サイドバーの Plugins ページで追加先に次を入れて Install する。

github:puyokura/dsh-1tempo
  • dsh のプラグイン管理(@deepseek-ai/dsh-plugin-manager)が pnpm add でこのリポジトリをプロファイルへ入れ、bundle を既定で有効化し、同梱の cordis.patch.yml の行を適用する。手で cordis.patch.yml を編集する必要はない。
  • プロファイルが HMR 有効(patchReload: live)ならその場で反映される。無効なら dsh を再起動する。
  • 削除も同じページから行える(pnpm remove 相当)。

エージェント経由なら plugin_manager ツールの install_bundle に同じ spec を渡す(Creator 系プリセットで有効。実行には danger-full-access か承認が要る)。

2. プロファイルへ CLI で入れる(bundle 方式)

Web UI を使わない場合(サーバー上で動かす、ヘッドレスなど)は同じ操作を CLI で行う。

cd ~/.dsh/profiles/<プロファイル名>
pnpm add github:puyokura/dsh-1tempo

次に package.json の dsh.profile.bundles の末尾へ "dsh-plugin-1tempo" を足す。pnpm add だけでは bundle は有効にならず、この 1 行が Install ボタンの仕事にあたる。

      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-plugin-1tempo"
      ],
  • 反映は patchReload: live なら即時、そうでなければ dsh を再起動する。
  • 戻すときは pnpm remove dsh-plugin-1tempo と bundles からの削除。
  • サーバー側の Web UI で使う場合、SARASHINA_API_KEY はそのサーバーの ~/.dsh/.credentials.yaml に置く。プラグインはコマンド実行時にキーを読むため、置いた時点で有効になる(再起動は不要)。

3. プロファイルのパッチへ直接書く(手動・従来の方法)

プロファイルのパッチ(例: ~/.dsh/profiles/dsh-tui/cordis.patch.yml)の insert: に 1 行追加する。

    - id: onetempo
      name: <このリポジトリの絶対パス>/index.mjs
      config:
        model: sarashina3-nano
        specPreamble: off
  • name は index.mjs の絶対パス。Windows ではスラッシュ区切りで書く(例: C:/Users/you/1tempo-pulgin/index.mjs)。
  • id は設定画面が設定セクションを引く名前空間になる。/^[a-z][a-z0-9_-]*$/ に一致する必要がある(1tempo は不可)。
  • config は省略可能。省略時は下記の既定値が使われる。
  • bundle として入れたプロファイルに、この手動の行を足さない(同じ id: onetempo が二重になる)。すでに手動の行があるプロファイルへ bundle を入れるときは、先に手動の行を消す。
  • 読み込みに失敗すると dsh の起動がロールバックする。戻すときはこの 4 行を削除する。

Web UI(プロファイル web)

同じ手順(上記 1 か 2)を web プロファイルへ行う。手動で入れる場合だけ、insert: 行を ~/.dsh/profiles/web/cordis.patch.yml に置く。プラグインはどちらのホストでも動く(接点は実行時に選ばれる)。

用途TUI(dsh-tui)Web UI
コマンド登録ctx.tuiPluginHost(帰属つき)。無ければ ctx.commandsctx.commands(コアが提供。結果テキストは会話のコマンドカードに出て、複数行は展開表示になる)
確認・編集ctx.tuiDialogs.input(初期値つき)ctx.userQuestions.ask の自由記述。初期値の欄が無いので、現在の MiL は detail に出る。空のまま送ると、その MiL をそのまま使う
中止Esc / Ctrl+C / タイムアウト質問の取り消し、または dialogTimeoutMs での打ち切り
ログctx.tuiPluginStorage(~/.dsh-tui/plugin-storage/、grant が必要)ctx.storageDomain(~/.dsh/storages/tempo_bridge.json、grant 不要)
  • TUI 固有の 3 サービス(tuiPluginHost / tuiDialogs / tuiPluginStorage)は Web ホストに存在しない。ctx.storageDomain は逆に TUI ホストに mount されていない(実測 2026-10-15)。
  • どちらの対話接点も無い構成では、MiL を表示するだけで送信しない(未確認の送信を避ける)。

設定

config または設定セクション(/settings)で変更する。未知の値は警告つきで既定に落ちる。

キー既定意味
modelsarashina3-nano変換モデル(sarashina3-mini / sarashina3-nano)
backtranslateoffalways で逆翻訳も表示(追加で 1 回呼び出す)
atSymbolext:送信前に @ を置換する ASCII 記号。@ と空白と先頭 # は使えない
failureModeconfirmconfirm(原文送信を確認) / abort(常に中止)
specPreambleoffoff(MiL のみ送る) / prepend(定義行を前置。原典の運用と同じ)
includeFrozenExampletrue形式の見本と依頼の見本を変換指示に同梱する
stripSpecClausestrue変換結果から、定義と逐語一致する節を除去する
replyLanguageSectionEnabledfalsesystem prompt に返答言語の指示を足す
replyLanguageSection(日本語で返す旨の 1 文)上を有効にしたときの文面
convertInstruction(同梱の既定文)変換の指示文(見本はこの後ろに付く)
backtranslateInstruction(同梱の既定文)逆翻訳の指示文
temperature0再現性のため 0 に固定
seed20261014ベストエフォートの決定性
maxCompletionTokens20001〜8000
retryWaitsMs[10000, 20000, 40000]429・一時サーバーエラー(5xx)・転送失敗の再試行間隔(最大 3 回)
requestTimeoutMs600001 呼び出しの上限
dialogTimeoutMs180000承認・編集ダイアログの上限。明示しないとホスト既定の 30 秒で勝手に取り消される
minIntervalMs

specPreamble の使い分け(実測に基づく指針)

prepend は定義行を MiL の前に置く。原典の使用例(例A)と同じ運用で、対象モデルが MiL を知らない場合に復号が安定する。代わりにペイロードが定義行の分だけ長くなる。off は軽く、MiL のみを送る。

どちらも復号テストに合格している(preflight-report-run6-off.md / preflight-report-run7-prepend.md。ローカル記録)。対象モデルが MiL を初めて見る場合は prepend、すでに文脈がある場合やトークンを抑えたい場合は off を目安にする。

記法(MiL)と本プラグインの立場

MiL は @AM09_21 が CC0 1.0 で公開した記法。本プラグインは仕様を改良も公式化もしない。

  • 定義本体: https://x.com/AM09_21/status/2103233036817170460
  • 精密化: https://x.com/AM09_21/status/2103282758231707887
  • @ 衝突の報告: https://x.com/AM09_21/status/2103290587374096573

仕様の写しと、本プラグイン独自の追加規則は mil-spec/ にある。

ファイル用途
mil-spec/prompt-v0-snapshot-2026-09-25.txt変換呼び出しの system に渡す定義行のみ
mil-spec/v0-snapshot-2026-09-25.md出典・引用・読み取れる規則・未取得の記録(人向け。モデルには渡さない)
mil-spec/reference-style.txt原典で実際に使われていた本文の形(転記)と合成例
mil-spec/examples-v0.txt依頼 → MiL の見本(本プラグインが作成。原典には依頼の変換例が無い)
mil-spec/author-examples.md原典の使用例の転記と、そこから読み取れること

本プラグイン独自の規則(原典には無い。mil-spec/v0-snapshot-2026-09-25.md §4):

  • 送信直前にトークン先頭の @ を ext: へ置換し、復元しない(dsh が @ をファイルメンションとして展開するため)。
  • 返答言語の指示を system prompt に足せる(既定は無効)。

開発

node --test "tests/*.test.mjs"     # 173 件
パス内容
index.mjsプラグイン本体(name / inject / apply、コマンド引数の解釈、変換フロー、ダイアログ、接点の登録)
cordis.patch.ymlbundle として配布するためのパッチ(- id: onetempo の 1 行)。package.json の dsh.bundle.patch が指す
locale/{en,ja}.jsondsh のプラグイン一覧に出す表示名と説明(meta.title / meta.description)
src/delivery.mjs承認後の送信(通知の組み立て、送信本文、エージェント選択、ログ結果の報告)
src/seams.mjs任意接点の soft probe(無い構成でも落とさない)
src/interaction.mjs対話接点の抽象化。TUI は ctx.tuiDialogs(初期値つき)、Web は ctx.userQuestions(自由記述のみ・初期値なし・タイムアウト無し=自前の signal で bound)。どちらも無ければ unavailable を返し、未確認の MiL を送らない
src/storage-domain.mjsWeb ホストの永続化 ctx.storageDomain(defineDomain 相当の spec をローカルに構築。TUI の tuiPluginStorage は Web に存在しない)
src/config.mjs設定の既定値・検証・変換指示の組み立て
src/mil.mjs@ 置換、MiL の検証、二ブロック抽出、定義逐語節の除去、引数解析
src/sarashina.mjsChat Completions クライアント(429 再試行、レート間隔、鍵の redaction)
src/message.mjs送信メッセージの生成(source.kind: 'user'、本文は「依頼+MiL」)
src/log.mjsdsh storage 経由のログ(256 KiB 上限に合わせた 50 件のリング)。ハンドルは1アクティベーションにつき1回だけ解決し、使えない場合は失敗として報告する
src/prompt.mjs返答言語の system prompt 段
src/settings.mjs設定セクションの記述子
src/spec.mjsmil-spec ファイルの読み込み
src/examples.mjs実例の解析
src/report.mjs実測レポートの解析(ペイロード再利用)
tools/preflight-decode.mjs事前実測(変換 → 復号テスト、--dry、--decode-only)
tools/draft-examples.mjs

測定

# 送信 payload の確認(API を呼ばない)
node tools/preflight-decode.mjs --dry

# 変換と復号テスト(対象モデルを差し替え可能。変換器は Sarashina 固定)
node --env-file=.env tools/preflight-decode.mjs --count 5 --instruction example `
  --target-base https://api.commandcode.ai/provider/v1 `
  --target-model inclusionai/ling-3.1-flash:free `
  --target-key-env COMMANDCODE_API_KEY `
  --out preflight-report.md

# 既存レポートのペイロードで復号だけを試す
node --env-file=.env tools/preflight-decode.mjs --decode-only preflight-report-run6-off.md `
  --target-base https://api.commandcode.ai/provider/v1 `
  --target-model inclusionai/ling-3.1-flash:free `
  --target-key-env COMMANDCODE_API_KEY

検証状況

項目状態
単体・統合テスト173 件通過(実プロセスで実行)
変換(Sarashina → MiL)実測で確認。実例の形を原典の本文に合わせた時点で成立した(preflight-report-run6-off.md / run7-prepend.md)
復号(spec なしで対象モデルが読めるか)実測で確認(commandcode の無料モデル)。ユーザーの本番モデルでは未検証
dsh の接点コマンド登録・変換・承認ダイアログ・編集ダイアログ・編集の取り消し(Esc で中止)・送信(agents.followup。会話に MiL が自分の発言として出ることをユーザーが確認)は実機で動作。storage への記録内容は未確認
変換レポートの表示通知欄のみ(200 セル以内に整形)。会話へ出すプラグイン API が dsh に無い。要望は dsh-feature-request.md
対象モデルの選定未確定(無料モデルで確認したのみ)

ライセンスと帰属

  • 本プラグインのコードは MIT ライセンス(LICENSE)。
  • MiL の記法は @AM09_21 による CC0 1.0 の公開物。原典の URL は本 README と mil-spec/ に残している。
  • mil-spec/examples-v0.txt は原典ではなく本プラグインが作成した教材である。
null
連続呼び出しの最小間隔。null ならモデルの RPM から算出(nano 1000ms / mini 10000ms)
includeOriginalInMessagefalsetrue にすると送信本文の先頭に「依頼: <原文>」を入れる。会話の行が自分の言葉で始まり /rewind で識別しやすいが、その原文はモデルにも渡る(content は会話とモデル入力の両方を兼ねるため、MiL の圧縮効果が失われる)
実例の下書き生成(レビュー前提)
tools/freeze-example.mjs下書きの凍結(現在は不使用。examples-v0.txt は手作業で整備)
tools/check-cell-width.mjs表示セル幅の差分検証(自前の cellWidth を導入済み dsh-tui の stringWidth と比較。過小評価=ホストが切り詰める危険のみを失敗とする)