@audiofool/moondog 0.3.0-beta.10 → 0.3.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +34 -9
  2. package/package.json +2 -2
  3. package/scripts/moondog.mjs +10 -4
  4. package/src/core/apple-projection-domain-services.mjs +4 -0
  5. package/src/core/capability-catalog.mjs +11 -0
  6. package/src/core/library-store.mjs +48 -4
  7. package/src/core/listening-profile-domain-services.mjs +4 -0
  8. package/src/core/moondog-application.mjs +105 -4
  9. package/src/i18n/screen/es.mjs +18 -4
  10. package/src/i18n/screen/ja.mjs +18 -4
  11. package/src/i18n/screen/pt.mjs +18 -4
  12. package/src/i18n/screen/zh.mjs +18 -4
  13. package/src/integrations/playlist-links.mjs +27 -9
  14. package/src/integrations/public-playlists.mjs +32 -5
  15. package/src/integrations/spotify/service.mjs +6 -1
  16. package/src/integrations/spotify/web-api-client.mjs +8 -2
  17. package/src/integrations/web/deepseek-web.mjs +1 -1
  18. package/src/integrations/web/web-research.mjs +84 -17
  19. package/src/integrations/web/web-result.mjs +60 -12
  20. package/src/profile/listening-history-store.mjs +54 -0
  21. package/src/runtime/pi/agent-runtime.mjs +73 -11
  22. package/src/runtime/pi/configured-runtime.mjs +3 -0
  23. package/src/runtime/pi/image-input.mjs +148 -0
  24. package/src/runtime/pi/model-roles.mjs +121 -0
  25. package/src/runtime/pi/model-settings.mjs +63 -2
  26. package/src/runtime/pi/runtime-settings.mjs +4 -2
  27. package/src/surfaces/cli/brand-components.mjs +1 -1
  28. package/src/surfaces/cli/command-completions.mjs +42 -3
  29. package/src/surfaces/cli/format-output.mjs +1 -1
  30. package/src/surfaces/cli/model-roles-command.mjs +60 -0
  31. package/src/surfaces/cli/tui.mjs +17 -3
@@ -22,7 +22,7 @@ export default {
22
22
  "What have you been listening to?": "最近は何を聴いていますか?",
23
23
  "A song, a playlist, or what to play next.": "曲、プレイリスト、次にかけるもの。",
24
24
  "Your personal music agent.": "あなた専用の音楽エージェント。",
25
- "# Your listening room\n\n## 01 / Listen and discover\n\nJust type to talk about music, ask for a playlist, or go exploring.\nTo talk, Moondog needs a model: `/auth` signs you in, then `/model` picks one.\nWhile an answer is coming, each step shows in the conversation, and the footer names the one in progress.\n\n- `/taste` - your profile: open any song or artist to see why it's there\n- `/taste report` - the whole picture on one page\n- `/import` - bring in your history, your library, or a playlist\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/service` - choose where I play music: Spotify, Apple Music, or NetEase\n- `/spotify` - play, queue, and make playlists in Spotify\n- Ask to move playback onto your iPhone, computer, or another Spotify device by name\n- `/web search <query>` or `/web read <url>` - look things up on public music sites\n\n## 02 / Make it yours\n\n- `/profile` - the same profile as `/taste`\n- `/profile corrections` - everything you've told me\n- `/profile retract <id>` - undo one of those\n- `/profile help` - the full set of profile commands\n- `/remember <text>`, `/memory`, `/forget <id>` - what I remember between conversations\n\n## 03 / Around the room\n\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/commands` or Ctrl+P - search every command; your message stays put\n- Page Up and Page Down scroll the conversation. The header and your draft stay put\n- Up and Down in the draft recall what you typed in this conversation\n- `/resume` - pick up a saved conversation (type to filter, Enter opens)\n- `/new` - start fresh; this conversation stays saved\n- `/status`, `/sources`, `/tools`, `/doctor` - see what's connected and working\n- `/reload` - reload model settings and sign-ins\n- `/update [--check] [--channel latest|beta]` - check for a release, or close this room and install it\n- `/help all` - every command, including the ones for the shell\n- `/language` - choose the language Moondog uses\n- `/quit` - leave\n\nTab moves to the menu on the home screen. Esc goes back to typing.\nEnter sends, and Shift+Enter starts a new line.\nTab or Enter accepts a suggestion.\nCtrl+C stops a model or web request, or leaves when nothing is running.\nIn the profile, type to filter, Tab switches lists, and Enter shows what you can do.\nCtrl+R refreshes it and Ctrl+O opens the full report.\nYour profile works without a model.\nPut quotes around paths, titles, and names that have spaces.": "# あなたのリスニングルーム\n\n## 01 / 聴いて、見つける\n\n入力するだけで、音楽の話をしたり、プレイリストを頼んだり、探索したりできます。\n会話にはモデルが必要です。`/auth` でサインインし、`/model` で選んでください。\n返事を作っているあいだ、各ステップが会話に表示され、フッターに進行中のものが出ます。\n\n- `/taste` - あなたのプロフィール。曲やアーティストを開くと、そこにある理由がわかります\n- `/taste report` - 全体像を 1 ページで\n- `/import` - 履歴、ライブラリ、プレイリストを取り込む\n- `/lyrics` - ジャケットの歌詞。`/lyrics sync` でさらに探します\n- `/service` - 音楽をどこで流すかを選ぶ: Spotify、Apple Music、NetEase\n- `/spotify` - Spotify で再生、キューへの追加、プレイリスト作成\n- iPhone やパソコンなど、Spotify デバイスの名前を言えば再生先を切り替えます\n- `/web search <キーワード>` または `/web read <URL>` - 公開の音楽サイトで調べる\n\n## 02 / 自分好みに\n\n- `/profile` - `/taste` と同じプロフィール\n- `/profile corrections` - これまでに教えてもらった選択\n- `/profile retract <id>` - そのひとつを取り消す\n- `/profile help` - プロフィールのコマンド一覧\n- `/remember <内容>`、`/memory`、`/forget <id>` - 会話をまたいで覚えていること\n\n## 03 / ルームの中で\n\n- `/home` - レコードジャケットに戻る。会話はそのまま\n- `/theme paper|charcoal|terminal|auto` - 見た目を変える\n- `/art braille|ascii|off` - イラストを変える\n- `/motion on|off` - アニメーションのオン・オフ\n- `/commands` または Ctrl+P - すべてのコマンドを検索。書きかけのメッセージは残ります\n- Page Up と Page Down で会話をスクロール。ヘッダーと下書きは動きません\n- 下書きで上下キーを押すと、この会話で入力した内容を呼び出せます\n- `/resume` - 保存した会話を再開(入力で絞り込み、Enter で開く)\n- `/new` - 新しく始める。この会話は保存されます\n- `/status`、`/sources`、`/tools`、`/doctor` - 接続と動作の状況を見る\n- `/reload` - モデル設定とサインインを読み込み直す\n- `/update [--check] [--channel latest|beta]` - 新しいリリースを確認、またはルームを閉じてインストール\n- `/help all` - ターミナル用も含めたすべてのコマンド\n- `/language` - Moondog の言語を選ぶ\n- `/quit` - 終了\n\nホーム画面で Tab を押すとメニューに移り、Esc で入力に戻ります。\nEnter で送信、Shift+Enter で改行します。\nTab または Enter で候補を確定します。\nCtrl+C はモデルや Web へのリクエストを止めます。何も動いていなければ終了します。\nプロフィールでは、入力で絞り込み、Tab でリストを切り替え、Enter でできることを表示します。\nCtrl+R で更新、Ctrl+O で完全なレポートを開きます。\nプロフィールはモデルなしでも使えます。\nスペースを含むパス、タイトル、名前は引用符で囲んでください。",
25
+ "# Your listening room\n\n## 01 / Listen and discover\n\nJust type to talk about music, ask for a playlist, or go exploring.\nTo talk, Moondog needs a model: `/auth` signs you in, then `/model` picks one.\nWhile an answer is coming, each step shows in the conversation, and the footer names the one in progress.\n\n- `/taste` - your profile: open any song or artist to see why it's there\n- `/taste report` - the whole picture on one page\n- `/import` - bring in your history, your library, or a playlist\n- `/library` - your saved songs and playlists\n- `/generation on|off` - let Moondog make music on this Mac, or stop\n- `/onair` - go on air, or come off it\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/service` - choose where I play music: Spotify, Apple Music, or NetEase\n- `/spotify` - play, queue, and make playlists in Spotify\n- Ask to move playback onto your iPhone, computer, or another Spotify device by name\n- `/web search <query>` or `/web read <url>` - look things up on public music sites\n\n## 02 / Make it yours\n\n- `/profile` - the same profile as `/taste`\n- `/profile corrections` - everything you've told me\n- `/profile retract <id>` - undo one of those\n- `/profile help` - the full set of profile commands\n- `/remember <text>`, `/memory`, `/forget <id>` - what I remember between conversations\n\n## 03 / Around the room\n\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/commands` or Ctrl+P - search every command; your message stays put\n- Page Up and Page Down scroll the conversation. The header and your draft stay put\n- Up and Down in the draft recall what you typed in this conversation\n- `/resume` - pick up a saved conversation (type to filter, Enter opens)\n- `/new` - start fresh; this conversation stays saved\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/status`, `/sources`, `/tools`, `/doctor` - see what's connected and working\n- `/reload` - reload model settings and sign-ins\n- `/model roles` - see what side tasks use: the model that reads images and the web search service\n- `/effort` - choose how hard the model thinks\n- `/endpoint add` or `/endpoint remove <id>` - add a model service by its address, or remove it\n- `/update [--check] [--channel latest|beta]` - check for a release, or close this room and install it\n- `/help all` - every command, including the ones for the shell\n- `/language` - choose the language Moondog uses\n- `/quit` - leave\n\nTab moves to the menu on the home screen. Esc goes back to typing.\nEnter sends, and Shift+Enter starts a new line.\nTab or Enter accepts a suggestion.\nCtrl+C stops a model or web request, or leaves when nothing is running.\nIn the profile, type to filter, Tab switches lists, and Enter shows what you can do.\nCtrl+R refreshes it and Ctrl+O opens the full report.\nYour profile works without a model.\nPut quotes around paths, titles, and names that have spaces.": "# あなたのリスニングルーム\n\n## 01 / 聴いて、見つける\n\n入力するだけで、音楽の話をしたり、プレイリストを頼んだり、探索したりできます。\n会話にはモデルが必要です。`/auth` でサインインし、`/model` で選んでください。\n返事を作っているあいだ、各ステップが会話に表示され、フッターに進行中のものが出ます。\n\n- `/taste` - あなたのプロフィール。曲やアーティストを開くと、そこにある理由がわかります\n- `/taste report` - 全体像を 1 ページで\n- `/import` - 履歴、ライブラリ、プレイリストを取り込む\n- `/library` - 保存した曲とプレイリスト\n- `/generation on|off` - この Mac で Moondog に音楽を作らせる、または止める\n- `/onair` - オンエアを始める、または終える\n- `/lyrics` - ジャケットの歌詞。`/lyrics sync` でさらに探します\n- `/service` - 音楽をどこで流すかを選ぶ: Spotify、Apple Music、NetEase\n- `/spotify` - Spotify で再生、キューへの追加、プレイリスト作成\n- iPhone やパソコンなど、Spotify デバイスの名前を言えば再生先を切り替えます\n- `/web search <キーワード>` または `/web read <URL>` - 公開の音楽サイトで調べる\n\n## 02 / 自分好みに\n\n- `/profile` - `/taste` と同じプロフィール\n- `/profile corrections` - これまでに教えてもらった選択\n- `/profile retract <id>` - そのひとつを取り消す\n- `/profile help` - プロフィールのコマンド一覧\n- `/remember <内容>`、`/memory`、`/forget <id>` - 会話をまたいで覚えていること\n\n## 03 / ルームの中で\n\n- `/home` - レコードジャケットに戻る。会話はそのまま\n- `/theme paper|charcoal|terminal|auto` - 見た目を変える\n- `/art braille|ascii|off` - イラストを変える\n- `/motion on|off` - アニメーションのオン・オフ\n- `/commands` または Ctrl+P - すべてのコマンドを検索。書きかけのメッセージは残ります\n- Page Up と Page Down で会話をスクロール。ヘッダーと下書きは動きません\n- 下書きで上下キーを押すと、この会話で入力した内容を呼び出せます\n- `/resume` - 保存した会話を再開(入力で絞り込み、Enter で開く)\n- `/new` - 新しく始める。この会話は保存されます\n- `/rewind` または Alt+R - 以前のメッセージをその場で編集。それ以降のメッセージは置き換わります\n- `/branch` - ここから新しい会話で続ける。この会話は保存されたままです\n- `/status`、`/sources`、`/tools`、`/doctor` - 接続と動作の状況を見る\n- `/reload` - モデル設定とサインインを読み込み直す\n- `/model roles` - 補助タスクが使うものを見る:画像を読むモデルとウェブ検索サービス\n- `/effort` - モデルがどれだけ考えるかを選ぶ\n- `/endpoint add` または `/endpoint remove <id>` - アドレスを指定してモデルサービスを追加、または削除\n- `/update [--check] [--channel latest|beta]` - 新しいリリースを確認、またはルームを閉じてインストール\n- `/help all` - ターミナル用も含めたすべてのコマンド\n- `/language` - Moondog の言語を選ぶ\n- `/quit` - 終了\n\nホーム画面で Tab を押すとメニューに移り、Esc で入力に戻ります。\nEnter で送信、Shift+Enter で改行します。\nTab または Enter で候補を確定します。\nCtrl+C はモデルや Web へのリクエストを止めます。何も動いていなければ終了します。\nプロフィールでは、入力で絞り込み、Tab でリストを切り替え、Enter でできることを表示します。\nCtrl+R で更新、Ctrl+O で完全なレポートを開きます。\nプロフィールはモデルなしでも使えます。\nスペースを含むパス、タイトル、名前は引用符で囲んでください。",
26
26
  "Listening profile": "リスニングプロフィール",
27
27
  "Profile": "プロフィール",
28
28
  "See what your listening reveals. Tell me what I missed.": "あなたの聴き方からわかることを見る。見落としを教えてください。",
@@ -176,7 +176,7 @@ export default {
176
176
  "Memory": "記憶",
177
177
  "Right now I can't change anything in your music accounts.": "いまは音楽アカウントの内容を何も変更できません。",
178
178
  "I can make changes in your connected accounts, and I always ask first.": "接続したアカウントの内容を変更できます。変更するときは必ず先に確認します。",
179
- "# Every command\n\nFrom your shell:\n\n- `moondog --version` - show the installed version\n- `moondog update [--check] [--channel latest|beta]` - check for or install a published release\n- `moondog web status|search|read [arguments] [--json]` - look things up on public music sites through DeepSeek, Brave Search or the Codex CLI\n- `moondog demo-history --output <absolute-file.zip> [--json]` - make a fictional Spotify history ZIP to try the importer with\n- `moondog auth login <provider>` - sign in to a model provider; the key is typed out of sight; `openai --chatgpt` signs in with your ChatGPT subscription\n- `moondog auth status [provider]` - see which sign-ins are saved\n- `moondog auth logout <provider>` - sign out of a provider\n- `moondog spotify help` - set up and control Spotify\n- `moondog spotify login [client-id]` - connect Spotify in your browser\n- `moondog spotify now|devices|queue` - see what Spotify is playing, where, and what's next\n- `moondog spotify recent` - see what you played lately\n- `moondog spotify sync-recent` - add your latest plays to your profile\n- `moondog spotify sync-library` - add your Spotify library to your profile\n- `moondog spotify play|pause|next|previous` - control Spotify playback\n- `moondog listenbrainz import-history <listen-history.json>` - add a ListenBrainz listens file to your profile\n- `moondog catalog latest-single --artist <name> [--known-release <title> | --from <spotify-history.zip>]` - find an artist's latest single on Apple Music (US), no model needed\n- `moondog status [--json]` - see where things stand\n- `moondog taste [--json]` - your listening report\n- `moondog taste --html [--output <file.html>]` - save your report as a web page that works offline\n- `moondog taste --card [--output <file.html>]` - save a short recap you can check before sharing\n- `moondog taste --from <spotify-history.zip> --html` - a one-off report from a Spotify ZIP, without saving it\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - a one-off report from both Spotify exports together\n- `moondog taste --from <spotify-history.zip> --save --html` - save the Spotify history, then show your full report\n- `moondog data inspect --scope <listening|apple|profile>` - see what's stored, and get the code needed to reset it\n- `moondog data export --scope <listening|apple|profile> --output <directory>` - export a copy, leaving the original alone\n- `moondog data reset --scope <listening|apple|profile> --confirm <token>` - set stored data aside (it is archived, not deleted)\n- `moondog profile build [--force]` - build or resume a saved profile with your connected model\n- `moondog profile saved [offset]` - read your saved profile\n- `moondog profile explain <number>` - trace a saved finding to its evidence\n- `moondog profile corrections [--all]` - everything you've told me, including earlier choices\n- `moondog profile correct --artist <name> (--like|--avoid)` - like an artist, or keep them out\n- `moondog profile correct --track <title> --by <artist> (--like|--avoid)` - like a track, or keep it out\n- `moondog profile retract <correction-id>` - undo one of your choices\n- `moondog demo --offline [--json]` - a demo with made-up data, no sign-in needed\n- `moondog demo [prompt] [--json]` - the same demo, talking through your model\n- `moondog ask <prompt>` - ask one question and exit\n- `moondog remember <text>` - ask me to remember something\n- `moondog forget <memory-id>` - forget something\n- `moondog memory reflect [--dry-run] [--json]` - let me think over recent conversations now\n- `moondog` - open the listening room\n\nInside the listening room:\n\n- `/update [--check] [--channel latest|beta]` - check for updates, or save and close this session to install one\n- `/status` or `/sources` - see where things stand\n- `/profile` or `/taste` - your profile, and why each song or artist is there\n- `/taste report` - the whole report on one page\n- `/profile build [--force]` - build or resume a saved reading; Ctrl+C keeps progress\n- `/profile saved [offset]` - read your saved profile\n- `/profile explain <number>` - inspect a saved finding's evidence\n- `/profile corrections [--all]` - everything you've told me\n- `/profile correct --track \"<title>\" --by \"<artist>\" (--like|--avoid)` - like a track, or keep it out\n- `/profile correct --artist \"<name>\" (--like|--avoid)` - like an artist, or keep them out\n- `/profile retract <correction-id>` - undo a choice\n- `/memory` - what I remember\n- `/tools` - what I can do right now\n- `/doctor` - check your setup\n- `/model` - pick the model I talk through\n- `/model <provider> <model>` - switch straight to a model\n- `/model refresh [provider]` - update public model choices; keep the selected model\n- `/auth [provider]` - sign in to a model provider\n- `/web status|search|read` - look things up on public music sites\n- `/import [path]` - bring in your history, library, or a playlist\n- `/language` - choose the language Moondog uses\n- `/service [spotify|apple_music|netease]` - choose where I play music\n- `/spotify` - Spotify commands\n- `/spotify login [client-id]` - connect Spotify\n- `/spotify now|devices|queue` - see what's playing, where, and what's next\n- `/spotify recent|sync-recent` - see or save your latest plays\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - add a Spotify ZIP, no sign-in needed\n- `/skip` or `/stop` - move to the next song preview, or stop them\n- `/reload` - reload model settings and sign-ins\n- `/remember [kind] <text>` - ask me to remember something\n- `/forget <memory-id>` - forget something\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/rewind latest` - edit the most recent message\n- `/resume` - pick up a saved conversation\n- `/resume <session-id>` - go straight to one\n- `/new` - start fresh; the last one stays saved\n- `/quit` - exit\n\nAnything you type that isn't a command goes to the model you picked with `/model`, or the one set in `MOONDOG_PROVIDER` and `MOONDOG_MODEL`.\nSign in with `/auth`, or set the provider's API key in your environment. `/auth openai` signs in with your ChatGPT subscription or an API key.\nOnce your profile is ready, I can search your library, explain what I see, and plan playlists with you.\nI can only control Spotify after `moondog spotify login`, and I never post, send messages, delete anything, or spend money.\nAsk me to move playback onto a device by name, such as your iPhone.": "# すべてのコマンド\n\nターミナルから:\n\n- `moondog --version` - インストール済みのバージョンを表示\n- `moondog update [--check] [--channel latest|beta]` - 公開済みのリリースを確認またはインストール\n- `moondog web status|search|read [引数] [--json]` - DeepSeek、Brave Search、または Codex CLI で公開の音楽サイトを調べる\n- `moondog demo-history --output <絶対パス.zip> [--json]` - 取り込みを試すための架空の Spotify 履歴 ZIP を作る\n- `moondog auth login <provider>` - モデルプロバイダーにサインイン。キーは表示されずに入力でき、`openai --chatgpt` は ChatGPT のサブスクリプションでサインインします\n- `moondog auth status [provider]` - 保存されているサインインを確認\n- `moondog auth logout <provider>` - プロバイダーからサインアウト\n- `moondog spotify help` - Spotify の設定と操作\n- `moondog spotify login [client-id]` - ブラウザで Spotify を接続\n- `moondog spotify now|devices|queue` - Spotify で再生中のもの、再生先、次の曲を見る\n- `moondog spotify recent` - 最近聴いたものを見る\n- `moondog spotify sync-recent` - 最近の再生をプロフィールに追加\n- `moondog spotify sync-library` - Spotify ライブラリをプロフィールに追加\n- `moondog spotify play|pause|next|previous` - Spotify の再生を操作\n- `moondog listenbrainz import-history <listen-history.json>` - ListenBrainz の再生ファイルをプロフィールに追加\n- `moondog catalog latest-single --artist <名前> [--known-release <タイトル> | --from <spotify-history.zip>]` - Apple Music(米国)でアーティストの最新シングルを探す。モデル不要\n- `moondog status [--json]` - 現在の状況を見る\n- `moondog taste [--json]` - あなたのリスニングレポート\n- `moondog taste --html [--output <ファイル.html>]` - オフラインでも開ける Web ページとして保存\n- `moondog taste --card [--output <ファイル.html>]` - 共有前に確認できる短いまとめを保存\n- `moondog taste --from <spotify-history.zip> --html` - Spotify の ZIP から一度だけのレポートを作る(保存しない)\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - 2 つの Spotify エクスポートから一度だけのレポートを作る\n- `moondog taste --from <spotify-history.zip> --save --html` - Spotify の履歴を保存してから完全なレポートを表示\n- `moondog data inspect --scope <listening|apple|profile>` - 保存内容と、リセットに必要なコードを確認\n- `moondog data export --scope <listening|apple|profile> --output <フォルダ>` - 元のデータはそのままにコピーを書き出す\n- `moondog data reset --scope <listening|apple|profile> --confirm <コード>` - 保存データを退避(削除ではなくアーカイブ)\n- `moondog profile build [--force]` - 接続中のモデルで保存プロフィールを作成または再開\n- `moondog profile saved [オフセット]` - 保存したプロフィールを読む\n- `moondog profile explain <番号>` - 保存した発見を根拠までたどる\n- `moondog profile corrections [--all]` - 以前のものも含め、教えてもらった選択の一覧\n- `moondog profile correct --artist <名前> (--like|--avoid)` - アーティストを好きにする、または除外する\n- `moondog profile correct --track <曲名> --by <アーティスト> (--like|--avoid)` - 曲を好きにする、または除外する\n- `moondog profile retract <correction-id>` - 選択を取り消す\n- `moondog demo --offline [--json]` - 架空のデータを使ったデモ。サインイン不要\n- `moondog demo [プロンプト] [--json]` - 同じデモをあなたのモデルで\n- `moondog ask <プロンプト>` - 質問をひとつして終了\n- `moondog remember <内容>` - 覚えておくよう頼む\n- `moondog forget <memory-id>` - 忘れてもらう\n- `moondog memory reflect [--dry-run] [--json]` - 最近の会話をいま振り返る\n- `moondog` - リスニングルームを開く\n\nリスニングルームの中で:\n\n- `/update [--check] [--channel latest|beta]` - アップデートを確認、またはセッションを保存して閉じ、インストール\n- `/status` または `/sources` - 現在の状況を見る\n- `/profile` または `/taste` - あなたのプロフィールと、各曲・各アーティストがある理由\n- `/taste report` - 完全なレポートを 1 ページで\n- `/profile build [--force]` - 保存する読み取りを作成または再開。Ctrl+C でも進捗は残ります\n- `/profile saved [オフセット]` - 保存したプロフィールを読む\n- `/profile explain <番号>` - 保存した発見の根拠を見る\n- `/profile corrections [--all]` - 教えてもらった選択の一覧\n- `/profile correct --track \"<曲名>\" --by \"<アーティスト>\" (--like|--avoid)` - 曲を好きにする、または除外する\n- `/profile correct --artist \"<名前>\" (--like|--avoid)` - アーティストを好きにする、または除外する\n- `/profile retract <correction-id>` - 選択を取り消す\n- `/memory` - 覚えていること\n- `/tools` - いまできること\n- `/doctor` - 設定を診断\n- `/model` - 会話に使うモデルを選ぶ\n- `/model <provider> <model>` - そのモデルに直接切り替える\n- `/model refresh [provider]` - 公開のモデル一覧を更新。選んだモデルはそのまま\n- `/auth [provider]` - モデルプロバイダーにサインイン\n- `/web status|search|read` - 公開の音楽サイトで調べる\n- `/import [パス]` - 履歴、ライブラリ、プレイリストを取り込む\n- `/language` - Moondog の言語を選ぶ\n- `/service [spotify|apple_music|netease]` - 音楽をどこで流すかを選ぶ\n- `/spotify` - Spotify のコマンド\n- `/spotify login [client-id]` - Spotify を接続\n- `/spotify now|devices|queue` - 再生中のもの、再生先、次の曲を見る\n- `/spotify recent|sync-recent` - 最近の再生を見る、または保存\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - Spotify の ZIP を追加。サインイン不要\n- `/skip` または `/stop` - 次のプレビューへ進む、またはプレビューを止める\n- `/reload` - モデル設定とサインインを読み込み直す\n- `/remember [種類] <内容>` - 覚えておくよう頼む\n- `/forget <memory-id>` - 忘れてもらう\n- `/rewind` または Alt+R - 以前のメッセージをその場で編集。それ以降のメッセージは置き換わります\n- `/branch` - ここから新しい会話で続ける。この会話は保存されたままです\n- `/rewind latest` - 直近のメッセージを編集\n- `/resume` - 保存した会話を再開\n- `/resume <session-id>` - その会話を直接開く\n- `/new` - 新しく始める。前の会話は保存されます\n- `/quit` - 終了\n\nコマンド以外の入力は、`/model` で選んだモデル、または `MOONDOG_PROVIDER` と `MOONDOG_MODEL` で指定したモデルに送られます。\n`/auth` でサインインするか、環境変数にプロバイダーの API キーを設定してください。`/auth openai` は ChatGPT のサブスクリプションか API キーでサインインします。\nプロフィールの準備ができたら、ライブラリを検索したり、わかったことを説明したり、一緒にプレイリストを考えたりできます。\nSpotify を操作できるのは `moondog spotify login` の後だけです。投稿、メッセージ送信、削除、支払いは一切しません。\niPhone のように名前を言ってもらえれば、そのデバイスに再生を切り替えます。",
179
+ "# Every command\n\nFrom your shell:\n\n- `moondog --version` - show the installed version\n- `moondog update [--check] [--channel latest|beta]` - check for or install a published release\n- `moondog web status|search|read [arguments] [--json]` - look things up on public music sites through DeepSeek, Brave Search or the Codex CLI\n- `moondog demo-history --output <absolute-file.zip> [--json]` - make a fictional Spotify history ZIP to try the importer with\n- `moondog auth login <provider>` - sign in to a model provider; the key is typed out of sight; `openai --chatgpt` signs in with your ChatGPT subscription\n- `moondog auth status [provider]` - see which sign-ins are saved\n- `moondog auth logout <provider>` - sign out of a provider\n- `moondog spotify help` - set up and control Spotify\n- `moondog spotify login [client-id]` - connect Spotify in your browser\n- `moondog spotify now|devices|queue` - see what Spotify is playing, where, and what's next\n- `moondog spotify recent` - see what you played lately\n- `moondog spotify sync-recent` - add your latest plays to your profile\n- `moondog spotify sync-library` - add your Spotify library to your profile\n- `moondog spotify play|pause|next|previous` - control Spotify playback\n- `moondog listenbrainz import-history <listen-history.json>` - add a ListenBrainz listens file to your profile\n- `moondog catalog latest-single --artist <name> [--known-release <title> | --from <spotify-history.zip>]` - find an artist's latest single on Apple Music (US), no model needed\n- `moondog status [--json]` - see where things stand\n- `moondog taste [--json]` - your listening report\n- `moondog taste --html [--output <file.html>]` - save your report as a web page that works offline\n- `moondog taste --card [--output <file.html>]` - save a short recap you can check before sharing\n- `moondog taste --from <spotify-history.zip> --html` - a one-off report from a Spotify ZIP, without saving it\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - a one-off report from both Spotify exports together\n- `moondog taste --from <spotify-history.zip> --save --html` - save the Spotify history, then show your full report\n- `moondog data inspect --scope <listening|apple|profile>` - see what's stored, and get the code needed to reset it\n- `moondog data export --scope <listening|apple|profile> --output <directory>` - export a copy, leaving the original alone\n- `moondog data reset --scope <listening|apple|profile> --confirm <token>` - set stored data aside (it is archived, not deleted)\n- `moondog profile build [--force]` - build or resume a saved profile with your connected model\n- `moondog profile saved [offset]` - read your saved profile\n- `moondog profile explain <number>` - trace a saved finding to its evidence\n- `moondog profile corrections [--all]` - everything you've told me, including earlier choices\n- `moondog profile correct --artist <name> (--like|--avoid)` - like an artist, or keep them out\n- `moondog profile correct --track <title> --by <artist> (--like|--avoid)` - like a track, or keep it out\n- `moondog profile retract <correction-id>` - undo one of your choices\n- `moondog demo --offline [--json]` - a demo with made-up data, no sign-in needed\n- `moondog demo [prompt] [--json]` - the same demo, talking through your model\n- `moondog ask <prompt>` - ask one question and exit\n- `moondog remember <text>` - ask me to remember something\n- `moondog forget <memory-id>` - forget something\n- `moondog memory reflect [--dry-run] [--json]` - let me think over recent conversations now\n- `moondog` - open the listening room\n\nInside the listening room:\n\n- `/update [--check] [--channel latest|beta]` - check for updates, or save and close this session to install one\n- `/status` or `/sources` - see where things stand\n- `/profile` or `/taste` - your profile, and why each song or artist is there\n- `/taste report` - the whole report on one page\n- `/profile build [--force]` - build or resume a saved reading; Ctrl+C keeps progress\n- `/profile saved [offset]` - read your saved profile\n- `/profile explain <number>` - inspect a saved finding's evidence\n- `/profile corrections [--all]` - everything you've told me\n- `/profile correct --track \"<title>\" --by \"<artist>\" (--like|--avoid)` - like a track, or keep it out\n- `/profile correct --artist \"<name>\" (--like|--avoid)` - like an artist, or keep them out\n- `/profile retract <correction-id>` - undo a choice\n- `/memory` - what I remember\n- `/tools` - what I can do right now\n- `/doctor` - check your setup\n- `/model` - pick the model I talk through\n- `/model <provider> <model>` - switch straight to a model\n- `/model refresh [provider]` - update public model choices; keep the selected model\n- `/model roles` - see what side tasks use: the model that reads images and the web search service\n- `/model vision auto|<provider> <model>` - choose the model that reads images\n- `/model web auto|deepseek|brave|codex` - choose the web search service\n- `/effort` - choose how hard the model thinks\n- `/auth [provider]` - sign in to a model provider\n- `/endpoint add` or `/endpoint remove <id>` - add a model service by its address, or remove it\n- `/web status|search|read` - look things up on public music sites\n- `/import [path]` - bring in your history, library, or a playlist\n- `/library` - your saved songs and playlists\n- `/library play <name>` - play a playlist\n- `/library save [playlist]` - keep the song playing now\n- `/library import <link>` - copy a playlist from a link\n- `/generation on|off` - let Moondog make music on this Mac, or stop\n- `/generation download|use|remove|cancel` - set up a Stable Audio 3 model\n- `/onair` - go on air, or come off it\n- `/language` - choose the language Moondog uses\n- `/service [spotify|apple_music|netease]` - choose where I play music\n- `/spotify` - Spotify commands\n- `/spotify login [client-id]` - connect Spotify\n- `/spotify now|devices|queue` - see what's playing, where, and what's next\n- `/spotify recent|sync-recent` - see or save your latest plays\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - add a Spotify ZIP, no sign-in needed\n- `/skip` or `/stop` - move to the next song preview or stream track, or stop them\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/reload` - reload model settings and sign-ins\n- `/remember [kind] <text>` - ask me to remember something\n- `/forget <memory-id>` - forget something\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/rewind latest` - edit the most recent message\n- `/resume` - pick up a saved conversation\n- `/resume <session-id>` - go straight to one\n- `/new` - start fresh; the last one stays saved\n- `/quit` - exit\n\nAnything you type that isn't a command goes to the model you picked with `/model`, or the one set in `MOONDOG_PROVIDER` and `MOONDOG_MODEL`.\nSign in with `/auth`, or set the provider's API key in your environment. `/auth openai` signs in with your ChatGPT subscription or an API key.\nOnce your profile is ready, I can search your library, explain what I see, and plan playlists with you.\nI can only control Spotify after `moondog spotify login`. I ask before I remove anything from your library, and I never post, send messages, or spend money.\nAsk me to move playback onto a device by name, such as your iPhone.": "# すべてのコマンド\n\nターミナルから:\n\n- `moondog --version` - インストール済みのバージョンを表示\n- `moondog update [--check] [--channel latest|beta]` - 公開済みのリリースを確認またはインストール\n- `moondog web status|search|read [引数] [--json]` - DeepSeek、Brave Search、または Codex CLI で公開の音楽サイトを調べる\n- `moondog demo-history --output <絶対パス.zip> [--json]` - 取り込みを試すための架空の Spotify 履歴 ZIP を作る\n- `moondog auth login <provider>` - モデルプロバイダーにサインイン。キーは表示されずに入力でき、`openai --chatgpt` は ChatGPT のサブスクリプションでサインインします\n- `moondog auth status [provider]` - 保存されているサインインを確認\n- `moondog auth logout <provider>` - プロバイダーからサインアウト\n- `moondog spotify help` - Spotify の設定と操作\n- `moondog spotify login [client-id]` - ブラウザで Spotify を接続\n- `moondog spotify now|devices|queue` - Spotify で再生中のもの、再生先、次の曲を見る\n- `moondog spotify recent` - 最近聴いたものを見る\n- `moondog spotify sync-recent` - 最近の再生をプロフィールに追加\n- `moondog spotify sync-library` - Spotify ライブラリをプロフィールに追加\n- `moondog spotify play|pause|next|previous` - Spotify の再生を操作\n- `moondog listenbrainz import-history <listen-history.json>` - ListenBrainz の再生ファイルをプロフィールに追加\n- `moondog catalog latest-single --artist <名前> [--known-release <タイトル> | --from <spotify-history.zip>]` - Apple Music(米国)でアーティストの最新シングルを探す。モデル不要\n- `moondog status [--json]` - 現在の状況を見る\n- `moondog taste [--json]` - あなたのリスニングレポート\n- `moondog taste --html [--output <ファイル.html>]` - オフラインでも開ける Web ページとして保存\n- `moondog taste --card [--output <ファイル.html>]` - 共有前に確認できる短いまとめを保存\n- `moondog taste --from <spotify-history.zip> --html` - Spotify の ZIP から一度だけのレポートを作る(保存しない)\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - 2 つの Spotify エクスポートから一度だけのレポートを作る\n- `moondog taste --from <spotify-history.zip> --save --html` - Spotify の履歴を保存してから完全なレポートを表示\n- `moondog data inspect --scope <listening|apple|profile>` - 保存内容と、リセットに必要なコードを確認\n- `moondog data export --scope <listening|apple|profile> --output <フォルダ>` - 元のデータはそのままにコピーを書き出す\n- `moondog data reset --scope <listening|apple|profile> --confirm <コード>` - 保存データを退避(削除ではなくアーカイブ)\n- `moondog profile build [--force]` - 接続中のモデルで保存プロフィールを作成または再開\n- `moondog profile saved [オフセット]` - 保存したプロフィールを読む\n- `moondog profile explain <番号>` - 保存した発見を根拠までたどる\n- `moondog profile corrections [--all]` - 以前のものも含め、教えてもらった選択の一覧\n- `moondog profile correct --artist <名前> (--like|--avoid)` - アーティストを好きにする、または除外する\n- `moondog profile correct --track <曲名> --by <アーティスト> (--like|--avoid)` - 曲を好きにする、または除外する\n- `moondog profile retract <correction-id>` - 選択を取り消す\n- `moondog demo --offline [--json]` - 架空のデータを使ったデモ。サインイン不要\n- `moondog demo [プロンプト] [--json]` - 同じデモをあなたのモデルで\n- `moondog ask <プロンプト>` - 質問をひとつして終了\n- `moondog remember <内容>` - 覚えておくよう頼む\n- `moondog forget <memory-id>` - 忘れてもらう\n- `moondog memory reflect [--dry-run] [--json]` - 最近の会話をいま振り返る\n- `moondog` - リスニングルームを開く\n\nリスニングルームの中で:\n\n- `/update [--check] [--channel latest|beta]` - アップデートを確認、またはセッションを保存して閉じ、インストール\n- `/status` または `/sources` - 現在の状況を見る\n- `/profile` または `/taste` - あなたのプロフィールと、各曲・各アーティストがある理由\n- `/taste report` - 完全なレポートを 1 ページで\n- `/profile build [--force]` - 保存する読み取りを作成または再開。Ctrl+C でも進捗は残ります\n- `/profile saved [オフセット]` - 保存したプロフィールを読む\n- `/profile explain <番号>` - 保存した発見の根拠を見る\n- `/profile corrections [--all]` - 教えてもらった選択の一覧\n- `/profile correct --track \"<曲名>\" --by \"<アーティスト>\" (--like|--avoid)` - 曲を好きにする、または除外する\n- `/profile correct --artist \"<名前>\" (--like|--avoid)` - アーティストを好きにする、または除外する\n- `/profile retract <correction-id>` - 選択を取り消す\n- `/memory` - 覚えていること\n- `/tools` - いまできること\n- `/doctor` - 設定を診断\n- `/model` - 会話に使うモデルを選ぶ\n- `/model <provider> <model>` - そのモデルに直接切り替える\n- `/model refresh [provider]` - 公開のモデル一覧を更新。選んだモデルはそのまま\n- `/model roles` - 補助タスクが使うものを見る:画像を読むモデルとウェブ検索サービス\n- `/model vision auto|<provider> <model>` - 画像を読むモデルを選ぶ\n- `/model web auto|deepseek|brave|codex` - ウェブ検索サービスを選ぶ\n- `/effort` - モデルがどれだけ考えるかを選ぶ\n- `/auth [provider]` - モデルプロバイダーにサインイン\n- `/endpoint add` または `/endpoint remove <id>` - アドレスを指定してモデルサービスを追加、または削除\n- `/web status|search|read` - 公開の音楽サイトで調べる\n- `/import [パス]` - 履歴、ライブラリ、プレイリストを取り込む\n- `/library` - 保存した曲とプレイリスト\n- `/library play <名前>` - プレイリストを再生\n- `/library save [プレイリスト]` - 再生中の曲を保存\n- `/library import <リンク>` - リンクからプレイリストをコピー\n- `/generation on|off` - この Mac で Moondog に音楽を作らせる、または止める\n- `/generation download|use|remove|cancel` - Stable Audio 3 のモデルを設定\n- `/onair` - オンエアを始める、または終える\n- `/language` - Moondog の言語を選ぶ\n- `/service [spotify|apple_music|netease]` - 音楽をどこで流すかを選ぶ\n- `/spotify` - Spotify のコマンド\n- `/spotify login [client-id]` - Spotify を接続\n- `/spotify now|devices|queue` - 再生中のもの、再生先、次の曲を見る\n- `/spotify recent|sync-recent` - 最近の再生を見る、または保存\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - Spotify の ZIP を追加。サインイン不要\n- `/skip` または `/stop` - 次のプレビューやストリームの曲へ進む、または止める\n- `/home` - レコードジャケットに戻る。会話はそのまま\n- `/theme paper|charcoal|terminal|auto` - 見た目を変える\n- `/art braille|ascii|off` - イラストを変える\n- `/motion on|off` - アニメーションのオン・オフ\n- `/lyrics` - ジャケットの歌詞。`/lyrics sync` でさらに探します\n- `/reload` - モデル設定とサインインを読み込み直す\n- `/remember [種類] <内容>` - 覚えておくよう頼む\n- `/forget <memory-id>` - 忘れてもらう\n- `/rewind` または Alt+R - 以前のメッセージをその場で編集。それ以降のメッセージは置き換わります\n- `/branch` - ここから新しい会話で続ける。この会話は保存されたままです\n- `/rewind latest` - 直近のメッセージを編集\n- `/resume` - 保存した会話を再開\n- `/resume <session-id>` - その会話を直接開く\n- `/new` - 新しく始める。前の会話は保存されます\n- `/quit` - 終了\n\nコマンド以外の入力は、`/model` で選んだモデル、または `MOONDOG_PROVIDER` と `MOONDOG_MODEL` で指定したモデルに送られます。\n`/auth` でサインインするか、環境変数にプロバイダーの API キーを設定してください。`/auth openai` は ChatGPT のサブスクリプションか API キーでサインインします。\nプロフィールの準備ができたら、ライブラリを検索したり、わかったことを説明したり、一緒にプレイリストを考えたりできます。\nSpotify を操作できるのは `moondog spotify login` の後だけです。ライブラリから何かを削除する前には確認します。投稿、メッセージ送信、支払いは一切しません。\niPhone のように名前を言ってもらえれば、そのデバイスに再生を切り替えます。",
180
180
  "Apple Music library": "Apple Music ライブラリ",
181
181
  "Model": "モデル",
182
182
  "Finding similar music": "似た音楽を探す",
@@ -713,6 +713,8 @@ export default {
713
713
  "Use /taste, or /taste report.": "/taste、または /taste report を使ってください。",
714
714
  "Full report above. /taste opens the profile.": "完全なレポートは上にあります。/taste でプロフィールを開けます。",
715
715
  "Web lookups aren't available when Moondog is started this way.": "この起動方法では Web 検索を使えません。",
716
+ "Model roles aren't available when Moondog is started this way.": "この起動方法ではモデルの用途を設定できません。",
717
+ "Looking at the attached images... Ctrl+C cancels.": "添付の画像を見ています... Ctrl+C で取り消します。",
716
718
  "/home doesn't take anything after it.": "/home のあとには何も付けません。",
717
719
  "Say anything, or press Tab to look around.": "なんでも話しかけてください。Tab で見て回ることもできます。",
718
720
  "Use /theme, or /theme paper, charcoal, terminal, or auto.": "/theme、または /theme paper、charcoal、terminal、auto を使ってください。",
@@ -815,8 +817,8 @@ export default {
815
817
  "Choose the model Moondog talks through": "Moondog が会話に使うモデルを選ぶ",
816
818
  "Look things up on public music sites": "公開の音楽サイトで調べる",
817
819
  "Connect and control Spotify": "Spotify を接続して操作",
818
- "Skip to the next song preview": "次のプレビューへ進む",
819
- "Stop the song previews": "プレビューの再生を止める",
820
+ "Skip to the next song preview or stream track": "次のプレビューやストリームの曲へ進む",
821
+ "Stop the song previews or the stream": "プレビューやストリームを止める",
820
822
  "Reload model settings and sign-ins": "モデル設定とサインインを読み込み直す",
821
823
  "Ask Moondog to remember something": "Moondog に覚えておくよう頼む",
822
824
  "Forget one memory by ID": "ID を指定して記憶を 1 つ忘れる",
@@ -977,6 +979,17 @@ export default {
977
979
  "Saved the {service} key. Web search goes through {provider}.": "{service} のキーを保存しました。Web 検索は {provider} を使います。",
978
980
  "Saved the {service} key, but web search still isn't ready. Run `/web status` to see why.": "{service} のキーを保存しましたが、Web 検索はまだ使えません。`/web status` で理由を確認してください。",
979
981
  "Add an endpoint by its address": "アドレスを指定してエンドポイントを追加",
982
+ "See what side tasks use": "補助タスクが使うものを見る",
983
+ "Choose the model that reads images": "画像を読むモデルを選ぶ",
984
+ "Choose the web search service": "ウェブ検索サービスを選ぶ",
985
+ "Let the chat model read images when it can": "チャットモデルが読めるならそのまま読ませる",
986
+ "Take the first service that is set up": "最初に設定済みのサービスを使う",
987
+ "Search with DeepSeek": "DeepSeek で検索",
988
+ "Search with Brave Search": "Brave Search で検索",
989
+ "Search with the Codex CLI": "Codex CLI で検索",
990
+ "Play a playlist by name": "名前でプレイリストを再生",
991
+ "Keep the song playing now": "再生中の曲を保存",
992
+ "Copy a playlist from a link": "リンクからプレイリストをコピー",
980
993
  "Remove an endpoint and its key": "エンドポイントとそのキーを削除",
981
994
  "ChatGPT sign-in or API key": "ChatGPT のサインインか API キー",
982
995
  "ChatGPT subscription": "ChatGPT サブスクリプション",
@@ -1134,6 +1147,7 @@ export default {
1134
1147
  "Your saved songs and playlists": "保存した曲とプレイリスト",
1135
1148
  "Look in the library": "ライブラリを見る",
1136
1149
  "Save to the library": "ライブラリに保存",
1150
+ "Change a playlist": "プレイリストを変更",
1137
1151
  "Play from the library": "ライブラリから再生",
1138
1152
  "Paste a playlist link after /library import.": "/library import のあとにプレイリストのリンクを貼り付けてください。",
1139
1153
  "Reading the playlist…": "プレイリストを読み込んでいます…",
@@ -22,7 +22,7 @@ export default {
22
22
  "What have you been listening to?": "O que você tem ouvido?",
23
23
  "A song, a playlist, or what to play next.": "Uma música, uma playlist ou o que tocar depois.",
24
24
  "Your personal music agent.": "Seu agente pessoal de música.",
25
- "# Your listening room\n\n## 01 / Listen and discover\n\nJust type to talk about music, ask for a playlist, or go exploring.\nTo talk, Moondog needs a model: `/auth` signs you in, then `/model` picks one.\nWhile an answer is coming, each step shows in the conversation, and the footer names the one in progress.\n\n- `/taste` - your profile: open any song or artist to see why it's there\n- `/taste report` - the whole picture on one page\n- `/import` - bring in your history, your library, or a playlist\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/service` - choose where I play music: Spotify, Apple Music, or NetEase\n- `/spotify` - play, queue, and make playlists in Spotify\n- Ask to move playback onto your iPhone, computer, or another Spotify device by name\n- `/web search <query>` or `/web read <url>` - look things up on public music sites\n\n## 02 / Make it yours\n\n- `/profile` - the same profile as `/taste`\n- `/profile corrections` - everything you've told me\n- `/profile retract <id>` - undo one of those\n- `/profile help` - the full set of profile commands\n- `/remember <text>`, `/memory`, `/forget <id>` - what I remember between conversations\n\n## 03 / Around the room\n\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/commands` or Ctrl+P - search every command; your message stays put\n- Page Up and Page Down scroll the conversation. The header and your draft stay put\n- Up and Down in the draft recall what you typed in this conversation\n- `/resume` - pick up a saved conversation (type to filter, Enter opens)\n- `/new` - start fresh; this conversation stays saved\n- `/status`, `/sources`, `/tools`, `/doctor` - see what's connected and working\n- `/reload` - reload model settings and sign-ins\n- `/update [--check] [--channel latest|beta]` - check for a release, or close this room and install it\n- `/help all` - every command, including the ones for the shell\n- `/language` - choose the language Moondog uses\n- `/quit` - leave\n\nTab moves to the menu on the home screen. Esc goes back to typing.\nEnter sends, and Shift+Enter starts a new line.\nTab or Enter accepts a suggestion.\nCtrl+C stops a model or web request, or leaves when nothing is running.\nIn the profile, type to filter, Tab switches lists, and Enter shows what you can do.\nCtrl+R refreshes it and Ctrl+O opens the full report.\nYour profile works without a model.\nPut quotes around paths, titles, and names that have spaces.": "# Sua sala de escuta\n\n## 01 / Ouça e descubra\n\nDigite para conversar sobre música, pedir uma playlist ou explorar.\nPara conversar, o Moondog precisa de um modelo: `/auth` faz o login e `/model` escolhe um.\nEnquanto a resposta chega, cada passo aparece na conversa, e o rodapé mostra o que está em andamento.\n\n- `/taste` - seu perfil: abra qualquer música ou artista para ver por que está ali\n- `/taste report` - o panorama completo em uma página\n- `/import` - traga seu histórico, sua biblioteca ou uma playlist\n- `/lyrics` - a letra na capa; `/lyrics sync` busca mais\n- `/service` - escolha onde eu toco a música: Spotify, Apple Music ou NetEase\n- `/spotify` - toque, adicione à fila e crie playlists no Spotify\n- Peça para passar a reprodução para o seu iPhone, computador ou outro dispositivo do Spotify pelo nome\n- `/web search <busca>` ou `/web read <url>` - pesquise em sites públicos de música\n\n## 02 / Deixe com a sua cara\n\n- `/profile` - o mesmo perfil de `/taste`\n- `/profile corrections` - tudo o que você me disse\n- `/profile retract <id>` - desfaça uma dessas escolhas\n- `/profile help` - todos os comandos do perfil\n- `/remember <texto>`, `/memory`, `/forget <id>` - o que eu lembro entre conversas\n\n## 03 / Pela sala\n\n- `/home` - volta para a capa do disco; a conversa continua\n- `/theme paper|charcoal|terminal|auto` - muda o visual\n- `/art braille|ascii|off` - muda a ilustração\n- `/motion on|off` - liga ou desliga a animação\n- `/commands` ou Ctrl+P - busca qualquer comando; sua mensagem não se perde\n- Page Up e Page Down rolam a conversa. O cabeçalho e o rascunho ficam no lugar\n- Para cima e para baixo no rascunho recuperam o que você digitou nesta conversa\n- `/resume` - retome uma conversa salva (digite para filtrar, Enter abre)\n- `/new` - comece do zero; esta conversa fica salva\n- `/status`, `/sources`, `/tools`, `/doctor` - veja o que está conectado e funcionando\n- `/reload` - recarrega as configurações do modelo e os logins\n- `/update [--check] [--channel latest|beta]` - procura uma versão nova, ou fecha esta sala e instala\n- `/help all` - todos os comandos, inclusive os do terminal\n- `/language` - escolha o idioma do Moondog\n- `/quit` - sair\n\nNa tela inicial, Tab vai para o menu. Esc volta para a digitação.\nEnter envia, e Shift+Enter começa uma nova linha.\nTab ou Enter aceitam uma sugestão.\nCtrl+C interrompe um pedido ao modelo ou à web, ou sai quando nada está rodando.\nNo perfil, digite para filtrar, Tab troca de lista e Enter mostra o que você pode fazer.\nCtrl+R atualiza e Ctrl+O abre o relatório completo.\nSeu perfil funciona sem modelo.\nColoque entre aspas caminhos, títulos e nomes com espaços.",
25
+ "# Your listening room\n\n## 01 / Listen and discover\n\nJust type to talk about music, ask for a playlist, or go exploring.\nTo talk, Moondog needs a model: `/auth` signs you in, then `/model` picks one.\nWhile an answer is coming, each step shows in the conversation, and the footer names the one in progress.\n\n- `/taste` - your profile: open any song or artist to see why it's there\n- `/taste report` - the whole picture on one page\n- `/import` - bring in your history, your library, or a playlist\n- `/library` - your saved songs and playlists\n- `/generation on|off` - let Moondog make music on this Mac, or stop\n- `/onair` - go on air, or come off it\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/service` - choose where I play music: Spotify, Apple Music, or NetEase\n- `/spotify` - play, queue, and make playlists in Spotify\n- Ask to move playback onto your iPhone, computer, or another Spotify device by name\n- `/web search <query>` or `/web read <url>` - look things up on public music sites\n\n## 02 / Make it yours\n\n- `/profile` - the same profile as `/taste`\n- `/profile corrections` - everything you've told me\n- `/profile retract <id>` - undo one of those\n- `/profile help` - the full set of profile commands\n- `/remember <text>`, `/memory`, `/forget <id>` - what I remember between conversations\n\n## 03 / Around the room\n\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/commands` or Ctrl+P - search every command; your message stays put\n- Page Up and Page Down scroll the conversation. The header and your draft stay put\n- Up and Down in the draft recall what you typed in this conversation\n- `/resume` - pick up a saved conversation (type to filter, Enter opens)\n- `/new` - start fresh; this conversation stays saved\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/status`, `/sources`, `/tools`, `/doctor` - see what's connected and working\n- `/reload` - reload model settings and sign-ins\n- `/model roles` - see what side tasks use: the model that reads images and the web search service\n- `/effort` - choose how hard the model thinks\n- `/endpoint add` or `/endpoint remove <id>` - add a model service by its address, or remove it\n- `/update [--check] [--channel latest|beta]` - check for a release, or close this room and install it\n- `/help all` - every command, including the ones for the shell\n- `/language` - choose the language Moondog uses\n- `/quit` - leave\n\nTab moves to the menu on the home screen. Esc goes back to typing.\nEnter sends, and Shift+Enter starts a new line.\nTab or Enter accepts a suggestion.\nCtrl+C stops a model or web request, or leaves when nothing is running.\nIn the profile, type to filter, Tab switches lists, and Enter shows what you can do.\nCtrl+R refreshes it and Ctrl+O opens the full report.\nYour profile works without a model.\nPut quotes around paths, titles, and names that have spaces.": "# Sua sala de escuta\n\n## 01 / Ouça e descubra\n\nDigite para conversar sobre música, pedir uma playlist ou explorar.\nPara conversar, o Moondog precisa de um modelo: `/auth` faz o login e `/model` escolhe um.\nEnquanto a resposta chega, cada passo aparece na conversa, e o rodapé mostra o que está em andamento.\n\n- `/taste` - seu perfil: abra qualquer música ou artista para ver por que está ali\n- `/taste report` - o panorama completo em uma página\n- `/import` - traga seu histórico, sua biblioteca ou uma playlist\n- `/library` - suas músicas salvas e playlists\n- `/generation on|off` - deixe o Moondog fazer música neste Mac, ou pare\n- `/onair` - entre no ar, ou saia\n- `/lyrics` - a letra na capa; `/lyrics sync` busca mais\n- `/service` - escolha onde eu toco a música: Spotify, Apple Music ou NetEase\n- `/spotify` - toque, adicione à fila e crie playlists no Spotify\n- Peça para passar a reprodução para o seu iPhone, computador ou outro dispositivo do Spotify pelo nome\n- `/web search <busca>` ou `/web read <url>` - pesquise em sites públicos de música\n\n## 02 / Deixe com a sua cara\n\n- `/profile` - o mesmo perfil de `/taste`\n- `/profile corrections` - tudo o que você me disse\n- `/profile retract <id>` - desfaça uma dessas escolhas\n- `/profile help` - todos os comandos do perfil\n- `/remember <texto>`, `/memory`, `/forget <id>` - o que eu lembro entre conversas\n\n## 03 / Pela sala\n\n- `/home` - volta para a capa do disco; a conversa continua\n- `/theme paper|charcoal|terminal|auto` - muda o visual\n- `/art braille|ascii|off` - muda a ilustração\n- `/motion on|off` - liga ou desliga a animação\n- `/commands` ou Ctrl+P - busca qualquer comando; sua mensagem não se perde\n- Page Up e Page Down rolam a conversa. O cabeçalho e o rascunho ficam no lugar\n- Para cima e para baixo no rascunho recuperam o que você digitou nesta conversa\n- `/resume` - retome uma conversa salva (digite para filtrar, Enter abre)\n- `/new` - comece do zero; esta conversa fica salva\n- `/rewind` ou Alt+R - edita uma mensagem anterior nesta conversa; as mensagens seguintes são substituídas\n- `/branch` - continua daqui em uma conversa nova; esta fica salva\n- `/status`, `/sources`, `/tools`, `/doctor` - veja o que está conectado e funcionando\n- `/reload` - recarrega as configurações do modelo e os logins\n- `/model roles` - veja o que as tarefas auxiliares usam: o modelo que lê imagens e o serviço de busca na web\n- `/effort` - escolha quanto o modelo pensa\n- `/endpoint add` ou `/endpoint remove <id>` - adicione um serviço de modelos pelo endereço, ou remova-o\n- `/update [--check] [--channel latest|beta]` - procura uma versão nova, ou fecha esta sala e instala\n- `/help all` - todos os comandos, inclusive os do terminal\n- `/language` - escolha o idioma do Moondog\n- `/quit` - sair\n\nNa tela inicial, Tab vai para o menu. Esc volta para a digitação.\nEnter envia, e Shift+Enter começa uma nova linha.\nTab ou Enter aceitam uma sugestão.\nCtrl+C interrompe um pedido ao modelo ou à web, ou sai quando nada está rodando.\nNo perfil, digite para filtrar, Tab troca de lista e Enter mostra o que você pode fazer.\nCtrl+R atualiza e Ctrl+O abre o relatório completo.\nSeu perfil funciona sem modelo.\nColoque entre aspas caminhos, títulos e nomes com espaços.",
26
26
  "Listening profile": "Perfil de escuta",
27
27
  "Profile": "Perfil",
28
28
  "See what your listening reveals. Tell me what I missed.": "Veja o que a sua escuta revela. Me diga o que eu deixei passar.",
@@ -176,7 +176,7 @@ export default {
176
176
  "Memory": "Memória",
177
177
  "Right now I can't change anything in your music accounts.": "No momento não consigo mudar nada nas suas contas de música.",
178
178
  "I can make changes in your connected accounts, and I always ask first.": "Posso fazer mudanças nas suas contas conectadas, e sempre pergunto antes.",
179
- "# Every command\n\nFrom your shell:\n\n- `moondog --version` - show the installed version\n- `moondog update [--check] [--channel latest|beta]` - check for or install a published release\n- `moondog web status|search|read [arguments] [--json]` - look things up on public music sites through DeepSeek, Brave Search or the Codex CLI\n- `moondog demo-history --output <absolute-file.zip> [--json]` - make a fictional Spotify history ZIP to try the importer with\n- `moondog auth login <provider>` - sign in to a model provider; the key is typed out of sight; `openai --chatgpt` signs in with your ChatGPT subscription\n- `moondog auth status [provider]` - see which sign-ins are saved\n- `moondog auth logout <provider>` - sign out of a provider\n- `moondog spotify help` - set up and control Spotify\n- `moondog spotify login [client-id]` - connect Spotify in your browser\n- `moondog spotify now|devices|queue` - see what Spotify is playing, where, and what's next\n- `moondog spotify recent` - see what you played lately\n- `moondog spotify sync-recent` - add your latest plays to your profile\n- `moondog spotify sync-library` - add your Spotify library to your profile\n- `moondog spotify play|pause|next|previous` - control Spotify playback\n- `moondog listenbrainz import-history <listen-history.json>` - add a ListenBrainz listens file to your profile\n- `moondog catalog latest-single --artist <name> [--known-release <title> | --from <spotify-history.zip>]` - find an artist's latest single on Apple Music (US), no model needed\n- `moondog status [--json]` - see where things stand\n- `moondog taste [--json]` - your listening report\n- `moondog taste --html [--output <file.html>]` - save your report as a web page that works offline\n- `moondog taste --card [--output <file.html>]` - save a short recap you can check before sharing\n- `moondog taste --from <spotify-history.zip> --html` - a one-off report from a Spotify ZIP, without saving it\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - a one-off report from both Spotify exports together\n- `moondog taste --from <spotify-history.zip> --save --html` - save the Spotify history, then show your full report\n- `moondog data inspect --scope <listening|apple|profile>` - see what's stored, and get the code needed to reset it\n- `moondog data export --scope <listening|apple|profile> --output <directory>` - export a copy, leaving the original alone\n- `moondog data reset --scope <listening|apple|profile> --confirm <token>` - set stored data aside (it is archived, not deleted)\n- `moondog profile build [--force]` - build or resume a saved profile with your connected model\n- `moondog profile saved [offset]` - read your saved profile\n- `moondog profile explain <number>` - trace a saved finding to its evidence\n- `moondog profile corrections [--all]` - everything you've told me, including earlier choices\n- `moondog profile correct --artist <name> (--like|--avoid)` - like an artist, or keep them out\n- `moondog profile correct --track <title> --by <artist> (--like|--avoid)` - like a track, or keep it out\n- `moondog profile retract <correction-id>` - undo one of your choices\n- `moondog demo --offline [--json]` - a demo with made-up data, no sign-in needed\n- `moondog demo [prompt] [--json]` - the same demo, talking through your model\n- `moondog ask <prompt>` - ask one question and exit\n- `moondog remember <text>` - ask me to remember something\n- `moondog forget <memory-id>` - forget something\n- `moondog memory reflect [--dry-run] [--json]` - let me think over recent conversations now\n- `moondog` - open the listening room\n\nInside the listening room:\n\n- `/update [--check] [--channel latest|beta]` - check for updates, or save and close this session to install one\n- `/status` or `/sources` - see where things stand\n- `/profile` or `/taste` - your profile, and why each song or artist is there\n- `/taste report` - the whole report on one page\n- `/profile build [--force]` - build or resume a saved reading; Ctrl+C keeps progress\n- `/profile saved [offset]` - read your saved profile\n- `/profile explain <number>` - inspect a saved finding's evidence\n- `/profile corrections [--all]` - everything you've told me\n- `/profile correct --track \"<title>\" --by \"<artist>\" (--like|--avoid)` - like a track, or keep it out\n- `/profile correct --artist \"<name>\" (--like|--avoid)` - like an artist, or keep them out\n- `/profile retract <correction-id>` - undo a choice\n- `/memory` - what I remember\n- `/tools` - what I can do right now\n- `/doctor` - check your setup\n- `/model` - pick the model I talk through\n- `/model <provider> <model>` - switch straight to a model\n- `/model refresh [provider]` - update public model choices; keep the selected model\n- `/auth [provider]` - sign in to a model provider\n- `/web status|search|read` - look things up on public music sites\n- `/import [path]` - bring in your history, library, or a playlist\n- `/language` - choose the language Moondog uses\n- `/service [spotify|apple_music|netease]` - choose where I play music\n- `/spotify` - Spotify commands\n- `/spotify login [client-id]` - connect Spotify\n- `/spotify now|devices|queue` - see what's playing, where, and what's next\n- `/spotify recent|sync-recent` - see or save your latest plays\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - add a Spotify ZIP, no sign-in needed\n- `/skip` or `/stop` - move to the next song preview, or stop them\n- `/reload` - reload model settings and sign-ins\n- `/remember [kind] <text>` - ask me to remember something\n- `/forget <memory-id>` - forget something\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/rewind latest` - edit the most recent message\n- `/resume` - pick up a saved conversation\n- `/resume <session-id>` - go straight to one\n- `/new` - start fresh; the last one stays saved\n- `/quit` - exit\n\nAnything you type that isn't a command goes to the model you picked with `/model`, or the one set in `MOONDOG_PROVIDER` and `MOONDOG_MODEL`.\nSign in with `/auth`, or set the provider's API key in your environment. `/auth openai` signs in with your ChatGPT subscription or an API key.\nOnce your profile is ready, I can search your library, explain what I see, and plan playlists with you.\nI can only control Spotify after `moondog spotify login`, and I never post, send messages, delete anything, or spend money.\nAsk me to move playback onto a device by name, such as your iPhone.": "# Todos os comandos\n\nNo seu terminal:\n\n- `moondog --version` - mostra a versão instalada\n- `moondog update [--check] [--channel latest|beta]` - procura ou instala uma versão publicada\n- `moondog web status|search|read [argumentos] [--json]` - pesquisa em sites públicos de música pelo DeepSeek, pelo Brave Search ou pelo Codex CLI\n- `moondog demo-history --output <arquivo-absoluto.zip> [--json]` - cria um ZIP fictício de histórico do Spotify para testar a importação\n- `moondog auth login <provedor>` - faz login em um provedor de modelos; a chave é digitada sem aparecer, e o `openai --chatgpt` entra com sua assinatura do ChatGPT\n- `moondog auth status [provedor]` - mostra quais logins estão salvos\n- `moondog auth logout <provedor>` - sai de um provedor\n- `moondog spotify help` - configura e controla o Spotify\n- `moondog spotify login [client-id]` - conecta o Spotify no navegador\n- `moondog spotify now|devices|queue` - mostra o que o Spotify está tocando, onde e o que vem depois\n- `moondog spotify recent` - mostra o que você ouviu ultimamente\n- `moondog spotify sync-recent` - adiciona suas últimas reproduções ao perfil\n- `moondog spotify sync-library` - adiciona sua biblioteca do Spotify ao perfil\n- `moondog spotify play|pause|next|previous` - controla a reprodução do Spotify\n- `moondog listenbrainz import-history <listen-history.json>` - adiciona um arquivo de escutas do ListenBrainz ao perfil\n- `moondog catalog latest-single --artist <nome> [--known-release <título> | --from <spotify-history.zip>]` - encontra o último single de um artista no Apple Music (EUA), sem modelo\n- `moondog status [--json]` - mostra como estão as coisas\n- `moondog taste [--json]` - seu relatório de escuta\n- `moondog taste --html [--output <arquivo.html>]` - salva o relatório como página web que funciona offline\n- `moondog taste --card [--output <arquivo.html>]` - salva um resumo curto que você pode conferir antes de compartilhar\n- `moondog taste --from <spotify-history.zip> --html` - um relatório único de um ZIP do Spotify, sem salvar\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - um relatório único das duas exportações do Spotify juntas\n- `moondog taste --from <spotify-history.zip> --save --html` - salva o histórico do Spotify e mostra o relatório completo\n- `moondog data inspect --scope <listening|apple|profile>` - mostra o que está guardado e o código para redefinir\n- `moondog data export --scope <listening|apple|profile> --output <pasta>` - exporta uma cópia sem mexer no original\n- `moondog data reset --scope <listening|apple|profile> --confirm <código>` - deixa de lado os dados guardados (são arquivados, não apagados)\n- `moondog profile build [--force]` - cria ou retoma um perfil salvo com o modelo conectado\n- `moondog profile saved [deslocamento]` - lê seu perfil salvo\n- `moondog profile explain <número>` - rastreia uma descoberta salva até a evidência\n- `moondog profile corrections [--all]` - tudo o que você me disse, inclusive escolhas anteriores\n- `moondog profile correct --artist <nome> (--like|--avoid)` - marca que você curte um artista, ou tira ele das sugestões\n- `moondog profile correct --track <título> --by <artista> (--like|--avoid)` - marca que você curte uma música, ou tira ela das sugestões\n- `moondog profile retract <correction-id>` - desfaz uma das suas escolhas\n- `moondog demo --offline [--json]` - uma demonstração com dados inventados, sem login\n- `moondog demo [pedido] [--json]` - a mesma demonstração, conversando pelo seu modelo\n- `moondog ask <pedido>` - faz uma pergunta e sai\n- `moondog remember <texto>` - pede para eu lembrar de algo\n- `moondog forget <memory-id>` - esquece algo\n- `moondog memory reflect [--dry-run] [--json]` - me deixa repassar agora as conversas recentes\n- `moondog` - abre a sala de escuta\n\nDentro da sala de escuta:\n\n- `/update [--check] [--channel latest|beta]` - procura atualizações, ou salva e fecha esta sessão para instalar uma\n- `/status` ou `/sources` - mostra como estão as coisas\n- `/profile` ou `/taste` - seu perfil, e por que cada música ou artista está ali\n- `/taste report` - o relatório completo em uma página\n- `/profile build [--force]` - cria ou retoma uma leitura salva; Ctrl+C guarda o progresso\n- `/profile saved [deslocamento]` - lê seu perfil salvo\n- `/profile explain <número>` - mostra a evidência de uma descoberta salva\n- `/profile corrections [--all]` - tudo o que você me disse\n- `/profile correct --track \"<título>\" --by \"<artista>\" (--like|--avoid)` - marca que você curte uma música, ou tira ela das sugestões\n- `/profile correct --artist \"<nome>\" (--like|--avoid)` - marca que você curte um artista, ou tira ele das sugestões\n- `/profile retract <correction-id>` - desfaz uma escolha\n- `/memory` - o que eu lembro\n- `/tools` - o que eu consigo fazer agora\n- `/doctor` - verifica sua configuração\n- `/model` - escolhe o modelo com que eu converso\n- `/model <provedor> <modelo>` - troca direto para um modelo\n- `/model refresh [provedor]` - atualiza as opções públicas de modelos; mantém o modelo escolhido\n- `/auth [provedor]` - faz login em um provedor de modelos\n- `/web status|search|read` - pesquisa em sites públicos de música\n- `/import [caminho]` - traz seu histórico, sua biblioteca ou uma playlist\n- `/language` - escolha o idioma do Moondog\n- `/service [spotify|apple_music|netease]` - escolha onde eu toco a música\n- `/spotify` - comandos do Spotify\n- `/spotify login [client-id]` - conecta o Spotify\n- `/spotify now|devices|queue` - mostra o que está tocando, onde e o que vem depois\n- `/spotify recent|sync-recent` - mostra ou salva suas últimas reproduções\n- `/spotify import-history \"/caminho/para/spotify-history.zip\"` - adiciona um ZIP do Spotify, sem login\n- `/skip` ou `/stop` - pula para a próxima prévia, ou interrompe as prévias\n- `/reload` - recarrega as configurações do modelo e os logins\n- `/remember [tipo] <texto>` - pede para eu lembrar de algo\n- `/forget <memory-id>` - esquece algo\n- `/rewind` ou Alt+R - edita uma mensagem anterior nesta conversa; as mensagens seguintes são substituídas\n- `/branch` - continua daqui em uma conversa nova; esta fica salva\n- `/rewind latest` - edita a mensagem mais recente\n- `/resume` - retoma uma conversa salva\n- `/resume <session-id>` - vai direto para uma\n- `/new` - começa do zero; a anterior fica salva\n- `/quit` - sair\n\nTudo o que você digitar que não for comando vai para o modelo escolhido com `/model`, ou o definido em `MOONDOG_PROVIDER` e `MOONDOG_MODEL`.\nFaça login com `/auth`, ou defina a chave de API do provedor no seu ambiente. `/auth openai` entra com sua assinatura do ChatGPT ou com uma chave de API.\nQuando seu perfil estiver pronto, posso buscar na sua biblioteca, explicar o que vejo e planejar playlists com você.\nSó consigo controlar o Spotify depois de `moondog spotify login`, e nunca publico, mando mensagens, apago nada ou gasto dinheiro.\nPeça para eu passar a reprodução para um dispositivo pelo nome, como o seu iPhone.",
179
+ "# Every command\n\nFrom your shell:\n\n- `moondog --version` - show the installed version\n- `moondog update [--check] [--channel latest|beta]` - check for or install a published release\n- `moondog web status|search|read [arguments] [--json]` - look things up on public music sites through DeepSeek, Brave Search or the Codex CLI\n- `moondog demo-history --output <absolute-file.zip> [--json]` - make a fictional Spotify history ZIP to try the importer with\n- `moondog auth login <provider>` - sign in to a model provider; the key is typed out of sight; `openai --chatgpt` signs in with your ChatGPT subscription\n- `moondog auth status [provider]` - see which sign-ins are saved\n- `moondog auth logout <provider>` - sign out of a provider\n- `moondog spotify help` - set up and control Spotify\n- `moondog spotify login [client-id]` - connect Spotify in your browser\n- `moondog spotify now|devices|queue` - see what Spotify is playing, where, and what's next\n- `moondog spotify recent` - see what you played lately\n- `moondog spotify sync-recent` - add your latest plays to your profile\n- `moondog spotify sync-library` - add your Spotify library to your profile\n- `moondog spotify play|pause|next|previous` - control Spotify playback\n- `moondog listenbrainz import-history <listen-history.json>` - add a ListenBrainz listens file to your profile\n- `moondog catalog latest-single --artist <name> [--known-release <title> | --from <spotify-history.zip>]` - find an artist's latest single on Apple Music (US), no model needed\n- `moondog status [--json]` - see where things stand\n- `moondog taste [--json]` - your listening report\n- `moondog taste --html [--output <file.html>]` - save your report as a web page that works offline\n- `moondog taste --card [--output <file.html>]` - save a short recap you can check before sharing\n- `moondog taste --from <spotify-history.zip> --html` - a one-off report from a Spotify ZIP, without saving it\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - a one-off report from both Spotify exports together\n- `moondog taste --from <spotify-history.zip> --save --html` - save the Spotify history, then show your full report\n- `moondog data inspect --scope <listening|apple|profile>` - see what's stored, and get the code needed to reset it\n- `moondog data export --scope <listening|apple|profile> --output <directory>` - export a copy, leaving the original alone\n- `moondog data reset --scope <listening|apple|profile> --confirm <token>` - set stored data aside (it is archived, not deleted)\n- `moondog profile build [--force]` - build or resume a saved profile with your connected model\n- `moondog profile saved [offset]` - read your saved profile\n- `moondog profile explain <number>` - trace a saved finding to its evidence\n- `moondog profile corrections [--all]` - everything you've told me, including earlier choices\n- `moondog profile correct --artist <name> (--like|--avoid)` - like an artist, or keep them out\n- `moondog profile correct --track <title> --by <artist> (--like|--avoid)` - like a track, or keep it out\n- `moondog profile retract <correction-id>` - undo one of your choices\n- `moondog demo --offline [--json]` - a demo with made-up data, no sign-in needed\n- `moondog demo [prompt] [--json]` - the same demo, talking through your model\n- `moondog ask <prompt>` - ask one question and exit\n- `moondog remember <text>` - ask me to remember something\n- `moondog forget <memory-id>` - forget something\n- `moondog memory reflect [--dry-run] [--json]` - let me think over recent conversations now\n- `moondog` - open the listening room\n\nInside the listening room:\n\n- `/update [--check] [--channel latest|beta]` - check for updates, or save and close this session to install one\n- `/status` or `/sources` - see where things stand\n- `/profile` or `/taste` - your profile, and why each song or artist is there\n- `/taste report` - the whole report on one page\n- `/profile build [--force]` - build or resume a saved reading; Ctrl+C keeps progress\n- `/profile saved [offset]` - read your saved profile\n- `/profile explain <number>` - inspect a saved finding's evidence\n- `/profile corrections [--all]` - everything you've told me\n- `/profile correct --track \"<title>\" --by \"<artist>\" (--like|--avoid)` - like a track, or keep it out\n- `/profile correct --artist \"<name>\" (--like|--avoid)` - like an artist, or keep them out\n- `/profile retract <correction-id>` - undo a choice\n- `/memory` - what I remember\n- `/tools` - what I can do right now\n- `/doctor` - check your setup\n- `/model` - pick the model I talk through\n- `/model <provider> <model>` - switch straight to a model\n- `/model refresh [provider]` - update public model choices; keep the selected model\n- `/model roles` - see what side tasks use: the model that reads images and the web search service\n- `/model vision auto|<provider> <model>` - choose the model that reads images\n- `/model web auto|deepseek|brave|codex` - choose the web search service\n- `/effort` - choose how hard the model thinks\n- `/auth [provider]` - sign in to a model provider\n- `/endpoint add` or `/endpoint remove <id>` - add a model service by its address, or remove it\n- `/web status|search|read` - look things up on public music sites\n- `/import [path]` - bring in your history, library, or a playlist\n- `/library` - your saved songs and playlists\n- `/library play <name>` - play a playlist\n- `/library save [playlist]` - keep the song playing now\n- `/library import <link>` - copy a playlist from a link\n- `/generation on|off` - let Moondog make music on this Mac, or stop\n- `/generation download|use|remove|cancel` - set up a Stable Audio 3 model\n- `/onair` - go on air, or come off it\n- `/language` - choose the language Moondog uses\n- `/service [spotify|apple_music|netease]` - choose where I play music\n- `/spotify` - Spotify commands\n- `/spotify login [client-id]` - connect Spotify\n- `/spotify now|devices|queue` - see what's playing, where, and what's next\n- `/spotify recent|sync-recent` - see or save your latest plays\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - add a Spotify ZIP, no sign-in needed\n- `/skip` or `/stop` - move to the next song preview or stream track, or stop them\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/reload` - reload model settings and sign-ins\n- `/remember [kind] <text>` - ask me to remember something\n- `/forget <memory-id>` - forget something\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/rewind latest` - edit the most recent message\n- `/resume` - pick up a saved conversation\n- `/resume <session-id>` - go straight to one\n- `/new` - start fresh; the last one stays saved\n- `/quit` - exit\n\nAnything you type that isn't a command goes to the model you picked with `/model`, or the one set in `MOONDOG_PROVIDER` and `MOONDOG_MODEL`.\nSign in with `/auth`, or set the provider's API key in your environment. `/auth openai` signs in with your ChatGPT subscription or an API key.\nOnce your profile is ready, I can search your library, explain what I see, and plan playlists with you.\nI can only control Spotify after `moondog spotify login`. I ask before I remove anything from your library, and I never post, send messages, or spend money.\nAsk me to move playback onto a device by name, such as your iPhone.": "# Todos os comandos\n\nNo seu terminal:\n\n- `moondog --version` - mostra a versão instalada\n- `moondog update [--check] [--channel latest|beta]` - procura ou instala uma versão publicada\n- `moondog web status|search|read [argumentos] [--json]` - pesquisa em sites públicos de música pelo DeepSeek, pelo Brave Search ou pelo Codex CLI\n- `moondog demo-history --output <arquivo-absoluto.zip> [--json]` - cria um ZIP fictício de histórico do Spotify para testar a importação\n- `moondog auth login <provedor>` - faz login em um provedor de modelos; a chave é digitada sem aparecer, e o `openai --chatgpt` entra com sua assinatura do ChatGPT\n- `moondog auth status [provedor]` - mostra quais logins estão salvos\n- `moondog auth logout <provedor>` - sai de um provedor\n- `moondog spotify help` - configura e controla o Spotify\n- `moondog spotify login [client-id]` - conecta o Spotify no navegador\n- `moondog spotify now|devices|queue` - mostra o que o Spotify está tocando, onde e o que vem depois\n- `moondog spotify recent` - mostra o que você ouviu ultimamente\n- `moondog spotify sync-recent` - adiciona suas últimas reproduções ao perfil\n- `moondog spotify sync-library` - adiciona sua biblioteca do Spotify ao perfil\n- `moondog spotify play|pause|next|previous` - controla a reprodução do Spotify\n- `moondog listenbrainz import-history <listen-history.json>` - adiciona um arquivo de escutas do ListenBrainz ao perfil\n- `moondog catalog latest-single --artist <nome> [--known-release <título> | --from <spotify-history.zip>]` - encontra o último single de um artista no Apple Music (EUA), sem modelo\n- `moondog status [--json]` - mostra como estão as coisas\n- `moondog taste [--json]` - seu relatório de escuta\n- `moondog taste --html [--output <arquivo.html>]` - salva o relatório como página web que funciona offline\n- `moondog taste --card [--output <arquivo.html>]` - salva um resumo curto que você pode conferir antes de compartilhar\n- `moondog taste --from <spotify-history.zip> --html` - um relatório único de um ZIP do Spotify, sem salvar\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - um relatório único das duas exportações do Spotify juntas\n- `moondog taste --from <spotify-history.zip> --save --html` - salva o histórico do Spotify e mostra o relatório completo\n- `moondog data inspect --scope <listening|apple|profile>` - mostra o que está guardado e o código para redefinir\n- `moondog data export --scope <listening|apple|profile> --output <pasta>` - exporta uma cópia sem mexer no original\n- `moondog data reset --scope <listening|apple|profile> --confirm <código>` - deixa de lado os dados guardados (são arquivados, não apagados)\n- `moondog profile build [--force]` - cria ou retoma um perfil salvo com o modelo conectado\n- `moondog profile saved [deslocamento]` - lê seu perfil salvo\n- `moondog profile explain <número>` - rastreia uma descoberta salva até a evidência\n- `moondog profile corrections [--all]` - tudo o que você me disse, inclusive escolhas anteriores\n- `moondog profile correct --artist <nome> (--like|--avoid)` - marca que você curte um artista, ou tira ele das sugestões\n- `moondog profile correct --track <título> --by <artista> (--like|--avoid)` - marca que você curte uma música, ou tira ela das sugestões\n- `moondog profile retract <correction-id>` - desfaz uma das suas escolhas\n- `moondog demo --offline [--json]` - uma demonstração com dados inventados, sem login\n- `moondog demo [pedido] [--json]` - a mesma demonstração, conversando pelo seu modelo\n- `moondog ask <pedido>` - faz uma pergunta e sai\n- `moondog remember <texto>` - pede para eu lembrar de algo\n- `moondog forget <memory-id>` - esquece algo\n- `moondog memory reflect [--dry-run] [--json]` - me deixa repassar agora as conversas recentes\n- `moondog` - abre a sala de escuta\n\nDentro da sala de escuta:\n\n- `/update [--check] [--channel latest|beta]` - procura atualizações, ou salva e fecha esta sessão para instalar uma\n- `/status` ou `/sources` - mostra como estão as coisas\n- `/profile` ou `/taste` - seu perfil, e por que cada música ou artista está ali\n- `/taste report` - o relatório completo em uma página\n- `/profile build [--force]` - cria ou retoma uma leitura salva; Ctrl+C guarda o progresso\n- `/profile saved [deslocamento]` - lê seu perfil salvo\n- `/profile explain <número>` - mostra a evidência de uma descoberta salva\n- `/profile corrections [--all]` - tudo o que você me disse\n- `/profile correct --track \"<título>\" --by \"<artista>\" (--like|--avoid)` - marca que você curte uma música, ou tira ela das sugestões\n- `/profile correct --artist \"<nome>\" (--like|--avoid)` - marca que você curte um artista, ou tira ele das sugestões\n- `/profile retract <correction-id>` - desfaz uma escolha\n- `/memory` - o que eu lembro\n- `/tools` - o que eu consigo fazer agora\n- `/doctor` - verifica sua configuração\n- `/model` - escolhe o modelo com que eu converso\n- `/model <provedor> <modelo>` - troca direto para um modelo\n- `/model refresh [provedor]` - atualiza as opções públicas de modelos; mantém o modelo escolhido\n- `/model roles` - veja o que as tarefas auxiliares usam: o modelo que lê imagens e o serviço de busca na web\n- `/model vision auto|<provedor> <modelo>` - escolha o modelo que lê imagens\n- `/model web auto|deepseek|brave|codex` - escolha o serviço de busca na web\n- `/effort` - escolha quanto o modelo pensa\n- `/auth [provedor]` - faz login em um provedor de modelos\n- `/endpoint add` ou `/endpoint remove <id>` - adicione um serviço de modelos pelo endereço, ou remova-o\n- `/web status|search|read` - pesquisa em sites públicos de música\n- `/import [caminho]` - traz seu histórico, sua biblioteca ou uma playlist\n- `/library` - suas músicas salvas e playlists\n- `/library play <nome>` - toque uma playlist\n- `/library save [playlist]` - salve a música que está tocando\n- `/library import <link>` - copie uma playlist de um link\n- `/generation on|off` - deixe o Moondog fazer música neste Mac, ou pare\n- `/generation download|use|remove|cancel` - configure um modelo do Stable Audio 3\n- `/onair` - entre no ar, ou saia\n- `/language` - escolha o idioma do Moondog\n- `/service [spotify|apple_music|netease]` - escolha onde eu toco a música\n- `/spotify` - comandos do Spotify\n- `/spotify login [client-id]` - conecta o Spotify\n- `/spotify now|devices|queue` - mostra o que está tocando, onde e o que vem depois\n- `/spotify recent|sync-recent` - mostra ou salva suas últimas reproduções\n- `/spotify import-history \"/caminho/para/spotify-history.zip\"` - adiciona um ZIP do Spotify, sem login\n- `/skip` ou `/stop` - pula para a próxima prévia ou faixa da transmissão, ou as interrompe\n- `/home` - volta para a capa do disco; a conversa continua\n- `/theme paper|charcoal|terminal|auto` - muda o visual\n- `/art braille|ascii|off` - muda a ilustração\n- `/motion on|off` - liga ou desliga a animação\n- `/lyrics` - a letra na capa; `/lyrics sync` busca mais\n- `/reload` - recarrega as configurações do modelo e os logins\n- `/remember [tipo] <texto>` - pede para eu lembrar de algo\n- `/forget <memory-id>` - esquece algo\n- `/rewind` ou Alt+R - edita uma mensagem anterior nesta conversa; as mensagens seguintes são substituídas\n- `/branch` - continua daqui em uma conversa nova; esta fica salva\n- `/rewind latest` - edita a mensagem mais recente\n- `/resume` - retoma uma conversa salva\n- `/resume <session-id>` - vai direto para uma\n- `/new` - começa do zero; a anterior fica salva\n- `/quit` - sair\n\nTudo o que você digitar que não for comando vai para o modelo escolhido com `/model`, ou o definido em `MOONDOG_PROVIDER` e `MOONDOG_MODEL`.\nFaça login com `/auth`, ou defina a chave de API do provedor no seu ambiente. `/auth openai` entra com sua assinatura do ChatGPT ou com uma chave de API.\nQuando seu perfil estiver pronto, posso buscar na sua biblioteca, explicar o que vejo e planejar playlists com você.\nSó consigo controlar o Spotify depois de `moondog spotify login`. Antes de tirar algo da sua biblioteca eu pergunto, e nunca publico, mando mensagens ou gasto dinheiro.\nPeça para eu passar a reprodução para um dispositivo pelo nome, como o seu iPhone.",
180
180
  "Apple Music library": "Biblioteca do Apple Music",
181
181
  "Model": "Modelo",
182
182
  "Finding similar music": "Encontrar música parecida",
@@ -713,6 +713,8 @@ export default {
713
713
  "Use /taste, or /taste report.": "Use /taste ou /taste report.",
714
714
  "Full report above. /taste opens the profile.": "O relatório completo está acima. /taste abre o perfil.",
715
715
  "Web lookups aren't available when Moondog is started this way.": "As consultas na web não estão disponíveis quando o Moondog é aberto deste jeito.",
716
+ "Model roles aren't available when Moondog is started this way.": "Os usos dos modelos não estão disponíveis quando o Moondog é aberto deste jeito.",
717
+ "Looking at the attached images... Ctrl+C cancels.": "Olhando as imagens anexadas... Ctrl+C cancela.",
716
718
  "/home doesn't take anything after it.": "/home não aceita nada depois.",
717
719
  "Say anything, or press Tab to look around.": "Diga qualquer coisa, ou aperte Tab para dar uma olhada.",
718
720
  "Use /theme, or /theme paper, charcoal, terminal, or auto.": "Use /theme, ou /theme paper, charcoal, terminal ou auto.",
@@ -815,8 +817,8 @@ export default {
815
817
  "Choose the model Moondog talks through": "Escolha o modelo com que o Moondog conversa",
816
818
  "Look things up on public music sites": "Pesquise em sites públicos de música",
817
819
  "Connect and control Spotify": "Conecte e controle o Spotify",
818
- "Skip to the next song preview": "Pula para a próxima prévia",
819
- "Stop the song previews": "Interrompe as prévias",
820
+ "Skip to the next song preview or stream track": "Pula para a próxima prévia ou faixa da transmissão",
821
+ "Stop the song previews or the stream": "Interrompe as prévias ou a transmissão",
820
822
  "Reload model settings and sign-ins": "Recarrega as configurações do modelo e os logins",
821
823
  "Ask Moondog to remember something": "Peça ao Moondog para lembrar de algo",
822
824
  "Forget one memory by ID": "Esqueça uma lembrança pelo ID",
@@ -977,6 +979,17 @@ export default {
977
979
  "Saved the {service} key. Web search goes through {provider}.": "Salvei a chave do {service}. A pesquisa na web passa pelo {provider}.",
978
980
  "Saved the {service} key, but web search still isn't ready. Run `/web status` to see why.": "Salvei a chave do {service}, mas a pesquisa na web ainda não está pronta. Use `/web status` para ver o motivo.",
979
981
  "Add an endpoint by its address": "Adicionar um endpoint pelo endereço",
982
+ "See what side tasks use": "Veja o que as tarefas auxiliares usam",
983
+ "Choose the model that reads images": "Escolha o modelo que lê imagens",
984
+ "Choose the web search service": "Escolha o serviço de busca na web",
985
+ "Let the chat model read images when it can": "Deixe o modelo do chat ler as imagens quando puder",
986
+ "Take the first service that is set up": "Use o primeiro serviço configurado",
987
+ "Search with DeepSeek": "Busque com o DeepSeek",
988
+ "Search with Brave Search": "Busque com o Brave Search",
989
+ "Search with the Codex CLI": "Busque com a CLI do Codex",
990
+ "Play a playlist by name": "Toque uma playlist pelo nome",
991
+ "Keep the song playing now": "Salve a música que está tocando",
992
+ "Copy a playlist from a link": "Copie uma playlist de um link",
980
993
  "Remove an endpoint and its key": "Remover um endpoint e a chave dele",
981
994
  "ChatGPT sign-in or API key": "Login do ChatGPT ou chave de API",
982
995
  "ChatGPT subscription": "Assinatura do ChatGPT",
@@ -1134,6 +1147,7 @@ export default {
1134
1147
  "Your saved songs and playlists": "Suas músicas salvas e playlists",
1135
1148
  "Look in the library": "Olhar na biblioteca",
1136
1149
  "Save to the library": "Salvar na biblioteca",
1150
+ "Change a playlist": "Alterar uma playlist",
1137
1151
  "Play from the library": "Tocar da biblioteca",
1138
1152
  "Paste a playlist link after /library import.": "Cole um link de playlist depois de /library import.",
1139
1153
  "Reading the playlist…": "Lendo a playlist…",
@@ -22,7 +22,7 @@ export default {
22
22
  "What have you been listening to?": "最近在听什么?",
23
23
  "A song, a playlist, or what to play next.": "一首歌、一个歌单,或者接下来放什么。",
24
24
  "Your personal music agent.": "你的私人音乐助手。",
25
- "# Your listening room\n\n## 01 / Listen and discover\n\nJust type to talk about music, ask for a playlist, or go exploring.\nTo talk, Moondog needs a model: `/auth` signs you in, then `/model` picks one.\nWhile an answer is coming, each step shows in the conversation, and the footer names the one in progress.\n\n- `/taste` - your profile: open any song or artist to see why it's there\n- `/taste report` - the whole picture on one page\n- `/import` - bring in your history, your library, or a playlist\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/service` - choose where I play music: Spotify, Apple Music, or NetEase\n- `/spotify` - play, queue, and make playlists in Spotify\n- Ask to move playback onto your iPhone, computer, or another Spotify device by name\n- `/web search <query>` or `/web read <url>` - look things up on public music sites\n\n## 02 / Make it yours\n\n- `/profile` - the same profile as `/taste`\n- `/profile corrections` - everything you've told me\n- `/profile retract <id>` - undo one of those\n- `/profile help` - the full set of profile commands\n- `/remember <text>`, `/memory`, `/forget <id>` - what I remember between conversations\n\n## 03 / Around the room\n\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/commands` or Ctrl+P - search every command; your message stays put\n- Page Up and Page Down scroll the conversation. The header and your draft stay put\n- Up and Down in the draft recall what you typed in this conversation\n- `/resume` - pick up a saved conversation (type to filter, Enter opens)\n- `/new` - start fresh; this conversation stays saved\n- `/status`, `/sources`, `/tools`, `/doctor` - see what's connected and working\n- `/reload` - reload model settings and sign-ins\n- `/update [--check] [--channel latest|beta]` - check for a release, or close this room and install it\n- `/help all` - every command, including the ones for the shell\n- `/language` - choose the language Moondog uses\n- `/quit` - leave\n\nTab moves to the menu on the home screen. Esc goes back to typing.\nEnter sends, and Shift+Enter starts a new line.\nTab or Enter accepts a suggestion.\nCtrl+C stops a model or web request, or leaves when nothing is running.\nIn the profile, type to filter, Tab switches lists, and Enter shows what you can do.\nCtrl+R refreshes it and Ctrl+O opens the full report.\nYour profile works without a model.\nPut quotes around paths, titles, and names that have spaces.": "# 你的聆听室\n\n## 01 / 听歌与发现\n\n直接输入就能聊音乐、要一个歌单,或者随便逛逛。\n对话需要一个模型:`/auth` 登录,然后用 `/model` 选一个。\n回答生成时,每一步都会显示在对话里,底栏会标出正在进行的那一步。\n\n- `/taste` - 你的资料:打开任意歌曲或艺人,看看它为什么在这里\n- `/taste report` - 一页看完整体情况\n- `/import` - 导入你的历史、曲库或一个歌单\n- `/lyrics` - 封套上的歌词;`/lyrics sync` 找更多\n- `/service` - 选择我在哪里放音乐:Spotify、Apple Music 或网易云音乐\n- `/spotify` - 在 Spotify 里播放、加入队列、建歌单\n- 说出设备名,就能把播放切到你的 iPhone、电脑或其他 Spotify 设备\n- `/web search <关键词>` 或 `/web read <网址>` - 在公开音乐网站上查资料\n\n## 02 / 变成你的\n\n- `/profile` - 和 `/taste` 是同一份资料\n- `/profile corrections` - 你告诉过我的所有选择\n- `/profile retract <id>` - 撤销其中一项\n- `/profile help` - 资料相关的全部命令\n- `/remember <内容>`、`/memory`、`/forget <id>` - 我在对话之间记住的内容\n\n## 03 / 在房间里转转\n\n- `/home` - 回到唱片封套;对话还在\n- `/theme paper|charcoal|terminal|auto` - 换外观\n- `/art braille|ascii|off` - 换插画\n- `/motion on|off` - 打开或关闭动画\n- `/commands` 或 Ctrl+P - 搜索全部命令;你正在写的消息不会丢\n- Page Up 和 Page Down 滚动对话,顶栏和草稿保持不动\n- 在草稿里按上下键,可以找回本次对话中输入过的内容\n- `/resume` - 继续一段保存的对话(输入筛选,Enter 打开)\n- `/new` - 重新开始;这段对话会保存下来\n- `/status`、`/sources`、`/tools`、`/doctor` - 看看哪些已连接、正常工作\n- `/reload` - 重新加载模型设置和登录\n- `/update [--check] [--channel latest|beta]` - 检查新版本,或关闭聆听室并安装\n- `/help all` - 全部命令,包括终端里的\n- `/language` - 选择 Moondog 使用的语言\n- `/quit` - 离开\n\n在首页按 Tab 进入菜单,按 Esc 回到输入。\nEnter 发送,Shift+Enter 换行。\nTab 或 Enter 接受补全建议。\nCtrl+C 停止模型或网页请求;没有任务在运行时则退出。\n在资料页里,输入即可筛选,Tab 切换列表,Enter 查看可做的操作。\nCtrl+R 刷新,Ctrl+O 打开完整报告。\n没有模型,资料页也能用。\n路径、标题和名字里有空格时,请加上引号。",
25
+ "# Your listening room\n\n## 01 / Listen and discover\n\nJust type to talk about music, ask for a playlist, or go exploring.\nTo talk, Moondog needs a model: `/auth` signs you in, then `/model` picks one.\nWhile an answer is coming, each step shows in the conversation, and the footer names the one in progress.\n\n- `/taste` - your profile: open any song or artist to see why it's there\n- `/taste report` - the whole picture on one page\n- `/import` - bring in your history, your library, or a playlist\n- `/library` - your saved songs and playlists\n- `/generation on|off` - let Moondog make music on this Mac, or stop\n- `/onair` - go on air, or come off it\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/service` - choose where I play music: Spotify, Apple Music, or NetEase\n- `/spotify` - play, queue, and make playlists in Spotify\n- Ask to move playback onto your iPhone, computer, or another Spotify device by name\n- `/web search <query>` or `/web read <url>` - look things up on public music sites\n\n## 02 / Make it yours\n\n- `/profile` - the same profile as `/taste`\n- `/profile corrections` - everything you've told me\n- `/profile retract <id>` - undo one of those\n- `/profile help` - the full set of profile commands\n- `/remember <text>`, `/memory`, `/forget <id>` - what I remember between conversations\n\n## 03 / Around the room\n\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/commands` or Ctrl+P - search every command; your message stays put\n- Page Up and Page Down scroll the conversation. The header and your draft stay put\n- Up and Down in the draft recall what you typed in this conversation\n- `/resume` - pick up a saved conversation (type to filter, Enter opens)\n- `/new` - start fresh; this conversation stays saved\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/status`, `/sources`, `/tools`, `/doctor` - see what's connected and working\n- `/reload` - reload model settings and sign-ins\n- `/model roles` - see what side tasks use: the model that reads images and the web search service\n- `/effort` - choose how hard the model thinks\n- `/endpoint add` or `/endpoint remove <id>` - add a model service by its address, or remove it\n- `/update [--check] [--channel latest|beta]` - check for a release, or close this room and install it\n- `/help all` - every command, including the ones for the shell\n- `/language` - choose the language Moondog uses\n- `/quit` - leave\n\nTab moves to the menu on the home screen. Esc goes back to typing.\nEnter sends, and Shift+Enter starts a new line.\nTab or Enter accepts a suggestion.\nCtrl+C stops a model or web request, or leaves when nothing is running.\nIn the profile, type to filter, Tab switches lists, and Enter shows what you can do.\nCtrl+R refreshes it and Ctrl+O opens the full report.\nYour profile works without a model.\nPut quotes around paths, titles, and names that have spaces.": "# 你的聆听室\n\n## 01 / 听歌与发现\n\n直接输入就能聊音乐、要一个歌单,或者随便逛逛。\n对话需要一个模型:`/auth` 登录,然后用 `/model` 选一个。\n回答生成时,每一步都会显示在对话里,底栏会标出正在进行的那一步。\n\n- `/taste` - 你的资料:打开任意歌曲或艺人,看看它为什么在这里\n- `/taste report` - 一页看完整体情况\n- `/import` - 导入你的历史、曲库或一个歌单\n- `/library` - 你收藏的歌和播放列表\n- `/generation on|off` - 让 Moondog 在这台 Mac 上做音乐,或停下\n- `/onair` - 开播,或下播\n- `/lyrics` - 封套上的歌词;`/lyrics sync` 找更多\n- `/service` - 选择我在哪里放音乐:Spotify、Apple Music 或网易云音乐\n- `/spotify` - 在 Spotify 里播放、加入队列、建歌单\n- 说出设备名,就能把播放切到你的 iPhone、电脑或其他 Spotify 设备\n- `/web search <关键词>` 或 `/web read <网址>` - 在公开音乐网站上查资料\n\n## 02 / 变成你的\n\n- `/profile` - 和 `/taste` 是同一份资料\n- `/profile corrections` - 你告诉过我的所有选择\n- `/profile retract <id>` - 撤销其中一项\n- `/profile help` - 资料相关的全部命令\n- `/remember <内容>`、`/memory`、`/forget <id>` - 我在对话之间记住的内容\n\n## 03 / 在房间里转转\n\n- `/home` - 回到唱片封套;对话还在\n- `/theme paper|charcoal|terminal|auto` - 换外观\n- `/art braille|ascii|off` - 换插画\n- `/motion on|off` - 打开或关闭动画\n- `/commands` 或 Ctrl+P - 搜索全部命令;你正在写的消息不会丢\n- Page Up 和 Page Down 滚动对话,顶栏和草稿保持不动\n- 在草稿里按上下键,可以找回本次对话中输入过的内容\n- `/resume` - 继续一段保存的对话(输入筛选,Enter 打开)\n- `/new` - 重新开始;这段对话会保存下来\n- `/rewind` 或 Alt+R - 就地编辑之前的一条消息;之后的消息会被替换\n- `/branch` - 从这里在新对话中继续;这段对话会保留\n- `/status`、`/sources`、`/tools`、`/doctor` - 看看哪些已连接、正常工作\n- `/reload` - 重新加载模型设置和登录\n- `/model roles` - 看看副任务在用什么:读图的模型和网页搜索服务\n- `/effort` - 选择模型思考的程度\n- `/endpoint add` 或 `/endpoint remove <id>` - 按地址添加模型服务,或移除它\n- `/update [--check] [--channel latest|beta]` - 检查新版本,或关闭聆听室并安装\n- `/help all` - 全部命令,包括终端里的\n- `/language` - 选择 Moondog 使用的语言\n- `/quit` - 离开\n\n在首页按 Tab 进入菜单,按 Esc 回到输入。\nEnter 发送,Shift+Enter 换行。\nTab 或 Enter 接受补全建议。\nCtrl+C 停止模型或网页请求;没有任务在运行时则退出。\n在资料页里,输入即可筛选,Tab 切换列表,Enter 查看可做的操作。\nCtrl+R 刷新,Ctrl+O 打开完整报告。\n没有模型,资料页也能用。\n路径、标题和名字里有空格时,请加上引号。",
26
26
  "Listening profile": "聆听资料",
27
27
  "Profile": "资料",
28
28
  "See what your listening reveals. Tell me what I missed.": "看看你的聆听透露了什么,告诉我哪里没看到。",
@@ -176,7 +176,7 @@ export default {
176
176
  "Memory": "记忆",
177
177
  "Right now I can't change anything in your music accounts.": "目前我不能修改你音乐账号里的任何内容。",
178
178
  "I can make changes in your connected accounts, and I always ask first.": "我可以修改你已连接的账号,并且每次都会先问你。",
179
- "# Every command\n\nFrom your shell:\n\n- `moondog --version` - show the installed version\n- `moondog update [--check] [--channel latest|beta]` - check for or install a published release\n- `moondog web status|search|read [arguments] [--json]` - look things up on public music sites through DeepSeek, Brave Search or the Codex CLI\n- `moondog demo-history --output <absolute-file.zip> [--json]` - make a fictional Spotify history ZIP to try the importer with\n- `moondog auth login <provider>` - sign in to a model provider; the key is typed out of sight; `openai --chatgpt` signs in with your ChatGPT subscription\n- `moondog auth status [provider]` - see which sign-ins are saved\n- `moondog auth logout <provider>` - sign out of a provider\n- `moondog spotify help` - set up and control Spotify\n- `moondog spotify login [client-id]` - connect Spotify in your browser\n- `moondog spotify now|devices|queue` - see what Spotify is playing, where, and what's next\n- `moondog spotify recent` - see what you played lately\n- `moondog spotify sync-recent` - add your latest plays to your profile\n- `moondog spotify sync-library` - add your Spotify library to your profile\n- `moondog spotify play|pause|next|previous` - control Spotify playback\n- `moondog listenbrainz import-history <listen-history.json>` - add a ListenBrainz listens file to your profile\n- `moondog catalog latest-single --artist <name> [--known-release <title> | --from <spotify-history.zip>]` - find an artist's latest single on Apple Music (US), no model needed\n- `moondog status [--json]` - see where things stand\n- `moondog taste [--json]` - your listening report\n- `moondog taste --html [--output <file.html>]` - save your report as a web page that works offline\n- `moondog taste --card [--output <file.html>]` - save a short recap you can check before sharing\n- `moondog taste --from <spotify-history.zip> --html` - a one-off report from a Spotify ZIP, without saving it\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - a one-off report from both Spotify exports together\n- `moondog taste --from <spotify-history.zip> --save --html` - save the Spotify history, then show your full report\n- `moondog data inspect --scope <listening|apple|profile>` - see what's stored, and get the code needed to reset it\n- `moondog data export --scope <listening|apple|profile> --output <directory>` - export a copy, leaving the original alone\n- `moondog data reset --scope <listening|apple|profile> --confirm <token>` - set stored data aside (it is archived, not deleted)\n- `moondog profile build [--force]` - build or resume a saved profile with your connected model\n- `moondog profile saved [offset]` - read your saved profile\n- `moondog profile explain <number>` - trace a saved finding to its evidence\n- `moondog profile corrections [--all]` - everything you've told me, including earlier choices\n- `moondog profile correct --artist <name> (--like|--avoid)` - like an artist, or keep them out\n- `moondog profile correct --track <title> --by <artist> (--like|--avoid)` - like a track, or keep it out\n- `moondog profile retract <correction-id>` - undo one of your choices\n- `moondog demo --offline [--json]` - a demo with made-up data, no sign-in needed\n- `moondog demo [prompt] [--json]` - the same demo, talking through your model\n- `moondog ask <prompt>` - ask one question and exit\n- `moondog remember <text>` - ask me to remember something\n- `moondog forget <memory-id>` - forget something\n- `moondog memory reflect [--dry-run] [--json]` - let me think over recent conversations now\n- `moondog` - open the listening room\n\nInside the listening room:\n\n- `/update [--check] [--channel latest|beta]` - check for updates, or save and close this session to install one\n- `/status` or `/sources` - see where things stand\n- `/profile` or `/taste` - your profile, and why each song or artist is there\n- `/taste report` - the whole report on one page\n- `/profile build [--force]` - build or resume a saved reading; Ctrl+C keeps progress\n- `/profile saved [offset]` - read your saved profile\n- `/profile explain <number>` - inspect a saved finding's evidence\n- `/profile corrections [--all]` - everything you've told me\n- `/profile correct --track \"<title>\" --by \"<artist>\" (--like|--avoid)` - like a track, or keep it out\n- `/profile correct --artist \"<name>\" (--like|--avoid)` - like an artist, or keep them out\n- `/profile retract <correction-id>` - undo a choice\n- `/memory` - what I remember\n- `/tools` - what I can do right now\n- `/doctor` - check your setup\n- `/model` - pick the model I talk through\n- `/model <provider> <model>` - switch straight to a model\n- `/model refresh [provider]` - update public model choices; keep the selected model\n- `/auth [provider]` - sign in to a model provider\n- `/web status|search|read` - look things up on public music sites\n- `/import [path]` - bring in your history, library, or a playlist\n- `/language` - choose the language Moondog uses\n- `/service [spotify|apple_music|netease]` - choose where I play music\n- `/spotify` - Spotify commands\n- `/spotify login [client-id]` - connect Spotify\n- `/spotify now|devices|queue` - see what's playing, where, and what's next\n- `/spotify recent|sync-recent` - see or save your latest plays\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - add a Spotify ZIP, no sign-in needed\n- `/skip` or `/stop` - move to the next song preview, or stop them\n- `/reload` - reload model settings and sign-ins\n- `/remember [kind] <text>` - ask me to remember something\n- `/forget <memory-id>` - forget something\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/rewind latest` - edit the most recent message\n- `/resume` - pick up a saved conversation\n- `/resume <session-id>` - go straight to one\n- `/new` - start fresh; the last one stays saved\n- `/quit` - exit\n\nAnything you type that isn't a command goes to the model you picked with `/model`, or the one set in `MOONDOG_PROVIDER` and `MOONDOG_MODEL`.\nSign in with `/auth`, or set the provider's API key in your environment. `/auth openai` signs in with your ChatGPT subscription or an API key.\nOnce your profile is ready, I can search your library, explain what I see, and plan playlists with you.\nI can only control Spotify after `moondog spotify login`, and I never post, send messages, delete anything, or spend money.\nAsk me to move playback onto a device by name, such as your iPhone.": "# 全部命令\n\n在终端里:\n\n- `moondog --version` - 显示已安装的版本\n- `moondog update [--check] [--channel latest|beta]` - 检查或安装已发布的版本\n- `moondog web status|search|read [参数] [--json]` - 通过 DeepSeek、Brave Search 或 Codex CLI 在公开音乐网站上查资料\n- `moondog demo-history --output <绝对路径.zip> [--json]` - 生成一个虚构的 Spotify 历史 ZIP,用来试用导入\n- `moondog auth login <provider>` - 登录模型服务商;密钥输入时不显示,`openai --chatgpt` 用你的 ChatGPT 订阅登录\n- `moondog auth status [provider]` - 查看保存了哪些登录\n- `moondog auth logout <provider>` - 退出某个服务商\n- `moondog spotify help` - 设置并控制 Spotify\n- `moondog spotify login [client-id]` - 在浏览器里连接 Spotify\n- `moondog spotify now|devices|queue` - 查看 Spotify 正在放什么、在哪放、接下来是什么\n- `moondog spotify recent` - 查看你最近听了什么\n- `moondog spotify sync-recent` - 把最近的播放加入你的资料\n- `moondog spotify sync-library` - 把你的 Spotify 曲库加入你的资料\n- `moondog spotify play|pause|next|previous` - 控制 Spotify 播放\n- `moondog listenbrainz import-history <listen-history.json>` - 把 ListenBrainz 收听文件加入你的资料\n- `moondog catalog latest-single --artist <名字> [--known-release <标题> | --from <spotify-history.zip>]` - 在 Apple Music(美区)查找某位艺人的最新单曲,无需模型\n- `moondog status [--json]` - 查看当前状态\n- `moondog taste [--json]` - 你的聆听报告\n- `moondog taste --html [--output <文件.html>]` - 把报告保存为可离线打开的网页\n- `moondog taste --card [--output <文件.html>]` - 保存一份简短回顾,分享前可以先检查\n- `moondog taste --from <spotify-history.zip> --html` - 从一个 Spotify ZIP 生成一次性报告,不保存\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - 从两份 Spotify 导出一起生成一次性报告\n- `moondog taste --from <spotify-history.zip> --save --html` - 保存 Spotify 历史,然后显示完整报告\n- `moondog data inspect --scope <listening|apple|profile>` - 查看保存了什么,并获取重置所需的代码\n- `moondog data export --scope <listening|apple|profile> --output <目录>` - 导出一份副本,原件保持不变\n- `moondog data reset --scope <listening|apple|profile> --confirm <代码>` - 把保存的数据移到一边(归档,不删除)\n- `moondog profile build [--force]` - 用已连接的模型生成或继续生成保存的资料\n- `moondog profile saved [偏移]` - 阅读你保存的资料\n- `moondog profile explain <编号>` - 追溯一条已保存发现的证据\n- `moondog profile corrections [--all]` - 你告诉过我的所有选择,包括早先的\n- `moondog profile correct --artist <名字> (--like|--avoid)` - 标记喜欢某位艺人,或不再推荐\n- `moondog profile correct --track <歌名> --by <艺人> (--like|--avoid)` - 标记喜欢某首歌,或不再推荐\n- `moondog profile retract <correction-id>` - 撤销你的一项选择\n- `moondog demo --offline [--json]` - 用虚构数据的演示,无需登录\n- `moondog demo [提示] [--json]` - 同样的演示,通过你的模型对话\n- `moondog ask <提示>` - 问一个问题后退出\n- `moondog remember <内容>` - 让我记住一件事\n- `moondog forget <memory-id>` - 忘掉一件事\n- `moondog memory reflect [--dry-run] [--json]` - 让我现在回顾最近的对话\n- `moondog` - 打开聆听室\n\n在聆听室里:\n\n- `/update [--check] [--channel latest|beta]` - 检查更新,或保存并关闭本次会话来安装\n- `/status` 或 `/sources` - 查看当前状态\n- `/profile` 或 `/taste` - 你的资料,以及每首歌、每位艺人为什么在这里\n- `/taste report` - 一页看完整份报告\n- `/profile build [--force]` - 生成或继续生成保存的解读;Ctrl+C 会保留进度\n- `/profile saved [偏移]` - 阅读你保存的资料\n- `/profile explain <编号>` - 查看一条已保存发现的证据\n- `/profile corrections [--all]` - 你告诉过我的所有选择\n- `/profile correct --track \"<歌名>\" --by \"<艺人>\" (--like|--avoid)` - 标记喜欢某首歌,或不再推荐\n- `/profile correct --artist \"<名字>\" (--like|--avoid)` - 标记喜欢某位艺人,或不再推荐\n- `/profile retract <correction-id>` - 撤销一项选择\n- `/memory` - 我记住的内容\n- `/tools` - 我现在能做什么\n- `/doctor` - 检查你的设置\n- `/model` - 选择我用来对话的模型\n- `/model <provider> <model>` - 直接切换到某个模型\n- `/model refresh [provider]` - 更新公开的模型列表;保留当前选择\n- `/auth [provider]` - 登录模型服务商\n- `/web status|search|read` - 在公开音乐网站上查资料\n- `/import [路径]` - 导入你的历史、曲库或一个歌单\n- `/language` - 选择 Moondog 使用的语言\n- `/service [spotify|apple_music|netease]` - 选择我在哪里放音乐\n- `/spotify` - Spotify 命令\n- `/spotify login [client-id]` - 连接 Spotify\n- `/spotify now|devices|queue` - 查看正在放什么、在哪放、接下来是什么\n- `/spotify recent|sync-recent` - 查看或保存你最近的播放\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - 加入一个 Spotify ZIP,无需登录\n- `/skip` 或 `/stop` - 跳到下一首试听,或停止试听\n- `/reload` - 重新加载模型设置和登录\n- `/remember [类型] <内容>` - 让我记住一件事\n- `/forget <memory-id>` - 忘掉一件事\n- `/rewind` 或 Alt+R - 就地编辑之前的一条消息;之后的消息会被替换\n- `/branch` - 从这里在新对话中继续;这段对话会保留\n- `/rewind latest` - 编辑最近的一条消息\n- `/resume` - 继续一段保存的对话\n- `/resume <session-id>` - 直接打开某一段\n- `/new` - 重新开始;上一段会保存下来\n- `/quit` - 退出\n\n你输入的非命令内容,会发给你用 `/model` 选的模型,或 `MOONDOG_PROVIDER` 和 `MOONDOG_MODEL` 指定的模型。\n用 `/auth` 登录,或在环境变量里设置服务商的 API 密钥。`/auth openai` 可以用 ChatGPT 订阅登录,也可以填 API 密钥。\n资料准备好之后,我可以搜索你的曲库、解释我看到的内容,并和你一起规划歌单。\n只有在 `moondog spotify login` 之后我才能控制 Spotify,而且我从不发帖、不发消息、不删除任何东西,也不花钱。\n说出设备名,比如你的 iPhone,我就能把播放切过去。",
179
+ "# Every command\n\nFrom your shell:\n\n- `moondog --version` - show the installed version\n- `moondog update [--check] [--channel latest|beta]` - check for or install a published release\n- `moondog web status|search|read [arguments] [--json]` - look things up on public music sites through DeepSeek, Brave Search or the Codex CLI\n- `moondog demo-history --output <absolute-file.zip> [--json]` - make a fictional Spotify history ZIP to try the importer with\n- `moondog auth login <provider>` - sign in to a model provider; the key is typed out of sight; `openai --chatgpt` signs in with your ChatGPT subscription\n- `moondog auth status [provider]` - see which sign-ins are saved\n- `moondog auth logout <provider>` - sign out of a provider\n- `moondog spotify help` - set up and control Spotify\n- `moondog spotify login [client-id]` - connect Spotify in your browser\n- `moondog spotify now|devices|queue` - see what Spotify is playing, where, and what's next\n- `moondog spotify recent` - see what you played lately\n- `moondog spotify sync-recent` - add your latest plays to your profile\n- `moondog spotify sync-library` - add your Spotify library to your profile\n- `moondog spotify play|pause|next|previous` - control Spotify playback\n- `moondog listenbrainz import-history <listen-history.json>` - add a ListenBrainz listens file to your profile\n- `moondog catalog latest-single --artist <name> [--known-release <title> | --from <spotify-history.zip>]` - find an artist's latest single on Apple Music (US), no model needed\n- `moondog status [--json]` - see where things stand\n- `moondog taste [--json]` - your listening report\n- `moondog taste --html [--output <file.html>]` - save your report as a web page that works offline\n- `moondog taste --card [--output <file.html>]` - save a short recap you can check before sharing\n- `moondog taste --from <spotify-history.zip> --html` - a one-off report from a Spotify ZIP, without saving it\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - a one-off report from both Spotify exports together\n- `moondog taste --from <spotify-history.zip> --save --html` - save the Spotify history, then show your full report\n- `moondog data inspect --scope <listening|apple|profile>` - see what's stored, and get the code needed to reset it\n- `moondog data export --scope <listening|apple|profile> --output <directory>` - export a copy, leaving the original alone\n- `moondog data reset --scope <listening|apple|profile> --confirm <token>` - set stored data aside (it is archived, not deleted)\n- `moondog profile build [--force]` - build or resume a saved profile with your connected model\n- `moondog profile saved [offset]` - read your saved profile\n- `moondog profile explain <number>` - trace a saved finding to its evidence\n- `moondog profile corrections [--all]` - everything you've told me, including earlier choices\n- `moondog profile correct --artist <name> (--like|--avoid)` - like an artist, or keep them out\n- `moondog profile correct --track <title> --by <artist> (--like|--avoid)` - like a track, or keep it out\n- `moondog profile retract <correction-id>` - undo one of your choices\n- `moondog demo --offline [--json]` - a demo with made-up data, no sign-in needed\n- `moondog demo [prompt] [--json]` - the same demo, talking through your model\n- `moondog ask <prompt>` - ask one question and exit\n- `moondog remember <text>` - ask me to remember something\n- `moondog forget <memory-id>` - forget something\n- `moondog memory reflect [--dry-run] [--json]` - let me think over recent conversations now\n- `moondog` - open the listening room\n\nInside the listening room:\n\n- `/update [--check] [--channel latest|beta]` - check for updates, or save and close this session to install one\n- `/status` or `/sources` - see where things stand\n- `/profile` or `/taste` - your profile, and why each song or artist is there\n- `/taste report` - the whole report on one page\n- `/profile build [--force]` - build or resume a saved reading; Ctrl+C keeps progress\n- `/profile saved [offset]` - read your saved profile\n- `/profile explain <number>` - inspect a saved finding's evidence\n- `/profile corrections [--all]` - everything you've told me\n- `/profile correct --track \"<title>\" --by \"<artist>\" (--like|--avoid)` - like a track, or keep it out\n- `/profile correct --artist \"<name>\" (--like|--avoid)` - like an artist, or keep them out\n- `/profile retract <correction-id>` - undo a choice\n- `/memory` - what I remember\n- `/tools` - what I can do right now\n- `/doctor` - check your setup\n- `/model` - pick the model I talk through\n- `/model <provider> <model>` - switch straight to a model\n- `/model refresh [provider]` - update public model choices; keep the selected model\n- `/model roles` - see what side tasks use: the model that reads images and the web search service\n- `/model vision auto|<provider> <model>` - choose the model that reads images\n- `/model web auto|deepseek|brave|codex` - choose the web search service\n- `/effort` - choose how hard the model thinks\n- `/auth [provider]` - sign in to a model provider\n- `/endpoint add` or `/endpoint remove <id>` - add a model service by its address, or remove it\n- `/web status|search|read` - look things up on public music sites\n- `/import [path]` - bring in your history, library, or a playlist\n- `/library` - your saved songs and playlists\n- `/library play <name>` - play a playlist\n- `/library save [playlist]` - keep the song playing now\n- `/library import <link>` - copy a playlist from a link\n- `/generation on|off` - let Moondog make music on this Mac, or stop\n- `/generation download|use|remove|cancel` - set up a Stable Audio 3 model\n- `/onair` - go on air, or come off it\n- `/language` - choose the language Moondog uses\n- `/service [spotify|apple_music|netease]` - choose where I play music\n- `/spotify` - Spotify commands\n- `/spotify login [client-id]` - connect Spotify\n- `/spotify now|devices|queue` - see what's playing, where, and what's next\n- `/spotify recent|sync-recent` - see or save your latest plays\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - add a Spotify ZIP, no sign-in needed\n- `/skip` or `/stop` - move to the next song preview or stream track, or stop them\n- `/home` - back to the record sleeve; the conversation stays\n- `/theme paper|charcoal|terminal|auto` - change the look\n- `/art braille|ascii|off` - change the artwork\n- `/motion on|off` - turn the animation on or off\n- `/lyrics` - the lyrics on the sleeve; `/lyrics sync` finds more\n- `/reload` - reload model settings and sign-ins\n- `/remember [kind] <text>` - ask me to remember something\n- `/forget <memory-id>` - forget something\n- `/rewind` or Alt+R - edit an earlier message in place; the messages after it are replaced\n- `/branch` - go on from here in a new conversation; this one stays saved\n- `/rewind latest` - edit the most recent message\n- `/resume` - pick up a saved conversation\n- `/resume <session-id>` - go straight to one\n- `/new` - start fresh; the last one stays saved\n- `/quit` - exit\n\nAnything you type that isn't a command goes to the model you picked with `/model`, or the one set in `MOONDOG_PROVIDER` and `MOONDOG_MODEL`.\nSign in with `/auth`, or set the provider's API key in your environment. `/auth openai` signs in with your ChatGPT subscription or an API key.\nOnce your profile is ready, I can search your library, explain what I see, and plan playlists with you.\nI can only control Spotify after `moondog spotify login`. I ask before I remove anything from your library, and I never post, send messages, or spend money.\nAsk me to move playback onto a device by name, such as your iPhone.": "# 全部命令\n\n在终端里:\n\n- `moondog --version` - 显示已安装的版本\n- `moondog update [--check] [--channel latest|beta]` - 检查或安装已发布的版本\n- `moondog web status|search|read [参数] [--json]` - 通过 DeepSeek、Brave Search 或 Codex CLI 在公开音乐网站上查资料\n- `moondog demo-history --output <绝对路径.zip> [--json]` - 生成一个虚构的 Spotify 历史 ZIP,用来试用导入\n- `moondog auth login <provider>` - 登录模型服务商;密钥输入时不显示,`openai --chatgpt` 用你的 ChatGPT 订阅登录\n- `moondog auth status [provider]` - 查看保存了哪些登录\n- `moondog auth logout <provider>` - 退出某个服务商\n- `moondog spotify help` - 设置并控制 Spotify\n- `moondog spotify login [client-id]` - 在浏览器里连接 Spotify\n- `moondog spotify now|devices|queue` - 查看 Spotify 正在放什么、在哪放、接下来是什么\n- `moondog spotify recent` - 查看你最近听了什么\n- `moondog spotify sync-recent` - 把最近的播放加入你的资料\n- `moondog spotify sync-library` - 把你的 Spotify 曲库加入你的资料\n- `moondog spotify play|pause|next|previous` - 控制 Spotify 播放\n- `moondog listenbrainz import-history <listen-history.json>` - 把 ListenBrainz 收听文件加入你的资料\n- `moondog catalog latest-single --artist <名字> [--known-release <标题> | --from <spotify-history.zip>]` - 在 Apple Music(美区)查找某位艺人的最新单曲,无需模型\n- `moondog status [--json]` - 查看当前状态\n- `moondog taste [--json]` - 你的聆听报告\n- `moondog taste --html [--output <文件.html>]` - 把报告保存为可离线打开的网页\n- `moondog taste --card [--output <文件.html>]` - 保存一份简短回顾,分享前可以先检查\n- `moondog taste --from <spotify-history.zip> --html` - 从一个 Spotify ZIP 生成一次性报告,不保存\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - 从两份 Spotify 导出一起生成一次性报告\n- `moondog taste --from <spotify-history.zip> --save --html` - 保存 Spotify 历史,然后显示完整报告\n- `moondog data inspect --scope <listening|apple|profile>` - 查看保存了什么,并获取重置所需的代码\n- `moondog data export --scope <listening|apple|profile> --output <目录>` - 导出一份副本,原件保持不变\n- `moondog data reset --scope <listening|apple|profile> --confirm <代码>` - 把保存的数据移到一边(归档,不删除)\n- `moondog profile build [--force]` - 用已连接的模型生成或继续生成保存的资料\n- `moondog profile saved [偏移]` - 阅读你保存的资料\n- `moondog profile explain <编号>` - 追溯一条已保存发现的证据\n- `moondog profile corrections [--all]` - 你告诉过我的所有选择,包括早先的\n- `moondog profile correct --artist <名字> (--like|--avoid)` - 标记喜欢某位艺人,或不再推荐\n- `moondog profile correct --track <歌名> --by <艺人> (--like|--avoid)` - 标记喜欢某首歌,或不再推荐\n- `moondog profile retract <correction-id>` - 撤销你的一项选择\n- `moondog demo --offline [--json]` - 用虚构数据的演示,无需登录\n- `moondog demo [提示] [--json]` - 同样的演示,通过你的模型对话\n- `moondog ask <提示>` - 问一个问题后退出\n- `moondog remember <内容>` - 让我记住一件事\n- `moondog forget <memory-id>` - 忘掉一件事\n- `moondog memory reflect [--dry-run] [--json]` - 让我现在回顾最近的对话\n- `moondog` - 打开聆听室\n\n在聆听室里:\n\n- `/update [--check] [--channel latest|beta]` - 检查更新,或保存并关闭本次会话来安装\n- `/status` 或 `/sources` - 查看当前状态\n- `/profile` 或 `/taste` - 你的资料,以及每首歌、每位艺人为什么在这里\n- `/taste report` - 一页看完整份报告\n- `/profile build [--force]` - 生成或继续生成保存的解读;Ctrl+C 会保留进度\n- `/profile saved [偏移]` - 阅读你保存的资料\n- `/profile explain <编号>` - 查看一条已保存发现的证据\n- `/profile corrections [--all]` - 你告诉过我的所有选择\n- `/profile correct --track \"<歌名>\" --by \"<艺人>\" (--like|--avoid)` - 标记喜欢某首歌,或不再推荐\n- `/profile correct --artist \"<名字>\" (--like|--avoid)` - 标记喜欢某位艺人,或不再推荐\n- `/profile retract <correction-id>` - 撤销一项选择\n- `/memory` - 我记住的内容\n- `/tools` - 我现在能做什么\n- `/doctor` - 检查你的设置\n- `/model` - 选择我用来对话的模型\n- `/model <provider> <model>` - 直接切换到某个模型\n- `/model refresh [provider]` - 更新公开的模型列表;保留当前选择\n- `/model roles` - 看看副任务在用什么:读图的模型和网页搜索服务\n- `/model vision auto|<provider> <model>` - 选择读图的模型\n- `/model web auto|deepseek|brave|codex` - 选择网页搜索服务\n- `/effort` - 选择模型思考的程度\n- `/auth [provider]` - 登录模型服务商\n- `/endpoint add` 或 `/endpoint remove <id>` - 按地址添加模型服务,或移除它\n- `/web status|search|read` - 在公开音乐网站上查资料\n- `/import [路径]` - 导入你的历史、曲库或一个歌单\n- `/library` - 你收藏的歌和播放列表\n- `/library play <名称>` - 播放一个播放列表\n- `/library save [播放列表]` - 收藏正在放的歌\n- `/library import <链接>` - 从链接复制一个播放列表\n- `/generation on|off` - 让 Moondog 在这台 Mac 上做音乐,或停下\n- `/generation download|use|remove|cancel` - 设置 Stable Audio 3 模型\n- `/onair` - 开播,或下播\n- `/language` - 选择 Moondog 使用的语言\n- `/service [spotify|apple_music|netease]` - 选择我在哪里放音乐\n- `/spotify` - Spotify 命令\n- `/spotify login [client-id]` - 连接 Spotify\n- `/spotify now|devices|queue` - 查看正在放什么、在哪放、接下来是什么\n- `/spotify recent|sync-recent` - 查看或保存你最近的播放\n- `/spotify import-history \"/path/to/spotify-history.zip\"` - 加入一个 Spotify ZIP,无需登录\n- `/skip` 或 `/stop` - 跳到下一首试听或直播曲目,或停止它们\n- `/home` - 回到唱片封套;对话还在\n- `/theme paper|charcoal|terminal|auto` - 换外观\n- `/art braille|ascii|off` - 换插画\n- `/motion on|off` - 打开或关闭动画\n- `/lyrics` - 封套上的歌词;`/lyrics sync` 找更多\n- `/reload` - 重新加载模型设置和登录\n- `/remember [类型] <内容>` - 让我记住一件事\n- `/forget <memory-id>` - 忘掉一件事\n- `/rewind` 或 Alt+R - 就地编辑之前的一条消息;之后的消息会被替换\n- `/branch` - 从这里在新对话中继续;这段对话会保留\n- `/rewind latest` - 编辑最近的一条消息\n- `/resume` - 继续一段保存的对话\n- `/resume <session-id>` - 直接打开某一段\n- `/new` - 重新开始;上一段会保存下来\n- `/quit` - 退出\n\n你输入的非命令内容,会发给你用 `/model` 选的模型,或 `MOONDOG_PROVIDER` 和 `MOONDOG_MODEL` 指定的模型。\n用 `/auth` 登录,或在环境变量里设置服务商的 API 密钥。`/auth openai` 可以用 ChatGPT 订阅登录,也可以填 API 密钥。\n资料准备好之后,我可以搜索你的曲库、解释我看到的内容,并和你一起规划歌单。\n只有在 `moondog spotify login` 之后我才能控制 Spotify。从你的曲库移除东西之前我会先问你,而且我从不发帖、不发消息,也不花钱。\n说出设备名,比如你的 iPhone,我就能把播放切过去。",
180
180
  "Apple Music library": "Apple Music 曲库",
181
181
  "Model": "模型",
182
182
  "Finding similar music": "查找相似的音乐",
@@ -713,6 +713,8 @@ export default {
713
713
  "Use /taste, or /taste report.": "使用 /taste 或 /taste report。",
714
714
  "Full report above. /taste opens the profile.": "完整报告在上面。/taste 打开资料。",
715
715
  "Web lookups aren't available when Moondog is started this way.": "这种启动方式不支持网页查询。",
716
+ "Model roles aren't available when Moondog is started this way.": "这种启动方式不支持设置模型用途。",
717
+ "Looking at the attached images... Ctrl+C cancels.": "正在看附上的图片…… Ctrl+C 取消。",
716
718
  "/home doesn't take anything after it.": "/home 后面不需要加内容。",
717
719
  "Say anything, or press Tab to look around.": "随便说点什么,或按 Tab 四处看看。",
718
720
  "Use /theme, or /theme paper, charcoal, terminal, or auto.": "使用 /theme,或 /theme paper、charcoal、terminal 或 auto。",
@@ -815,8 +817,8 @@ export default {
815
817
  "Choose the model Moondog talks through": "选择 Moondog 对话使用的模型",
816
818
  "Look things up on public music sites": "在公开音乐网站上查资料",
817
819
  "Connect and control Spotify": "连接并控制 Spotify",
818
- "Skip to the next song preview": "跳到下一首试听",
819
- "Stop the song previews": "停止播放试听",
820
+ "Skip to the next song preview or stream track": "跳到下一首试听或直播曲目",
821
+ "Stop the song previews or the stream": "停止试听或直播",
820
822
  "Reload model settings and sign-ins": "重新加载模型设置和登录",
821
823
  "Ask Moondog to remember something": "让 Moondog 记住一件事",
822
824
  "Forget one memory by ID": "按 ID 忘掉一条记忆",
@@ -977,6 +979,17 @@ export default {
977
979
  "Saved the {service} key. Web search goes through {provider}.": "已保存 {service} 密钥。网页搜索使用 {provider}。",
978
980
  "Saved the {service} key, but web search still isn't ready. Run `/web status` to see why.": "已保存 {service} 密钥,但网页搜索还不能用。运行 `/web status` 查看原因。",
979
981
  "Add an endpoint by its address": "按地址添加接口",
982
+ "See what side tasks use": "看看副任务在用什么",
983
+ "Choose the model that reads images": "选择读图的模型",
984
+ "Choose the web search service": "选择网页搜索服务",
985
+ "Let the chat model read images when it can": "让聊天模型在能读图时直接读",
986
+ "Take the first service that is set up": "用第一个已设置的服务",
987
+ "Search with DeepSeek": "用 DeepSeek 搜索",
988
+ "Search with Brave Search": "用 Brave Search 搜索",
989
+ "Search with the Codex CLI": "用 Codex CLI 搜索",
990
+ "Play a playlist by name": "按名称播放一个播放列表",
991
+ "Keep the song playing now": "收藏正在放的歌",
992
+ "Copy a playlist from a link": "从链接复制一个播放列表",
980
993
  "Remove an endpoint and its key": "移除接口和它的密钥",
981
994
  "ChatGPT sign-in or API key": "ChatGPT 登录或 API 密钥",
982
995
  "ChatGPT subscription": "ChatGPT 订阅",
@@ -1134,6 +1147,7 @@ export default {
1134
1147
  "Your saved songs and playlists": "你收藏的歌和播放列表",
1135
1148
  "Look in the library": "翻翻资料库",
1136
1149
  "Save to the library": "收进资料库",
1150
+ "Change a playlist": "修改播放列表",
1137
1151
  "Play from the library": "播放资料库里的歌",
1138
1152
  "Paste a playlist link after /library import.": "在 /library import 后面粘贴歌单链接。",
1139
1153
  "Reading the playlist…": "正在读取歌单…",
@@ -55,7 +55,8 @@ const text = (value, maximum = 200) => (typeof value === "string" ? Array.from(v
55
55
 
56
56
  /**
57
57
  * An Apple Music playlist from its public page: its name, how many songs it has, and the songs the page
58
- * lists with their Apple Music ids and covers. A long playlist's page may list only its first songs;
58
+ * lists with their Apple Music ids and covers, and the playlist's own square cover (the page's og:image is a
59
+ * wide share card). A long playlist's page may list only its first songs;
59
60
  * read and total say how many.
60
61
  */
61
62
  export async function readApplePlaylist({ id, url }, { fetchImpl = fetch, signal } = {}) {
@@ -65,32 +66,49 @@ export async function readApplePlaylist({ id, url }, { fetchImpl = fetch, signal
65
66
  const data = block(/<script[^>]*id="serialized-server-data"[^>]*>([\s\S]*?)<\/script>/u);
66
67
  const tracks = [];
67
68
  const seen = new Set();
69
+ const artworkAt = (node, size) => {
70
+ const url = node.artwork?.dictionary?.url;
71
+ return typeof url === "string" && url.startsWith("https://") ? url.replace("{w}x{h}", `${size}x${size}`).replace("{c}", "").replace("{f}", "jpg") : null;
72
+ };
73
+ // The playlist's own entry in the server data. A listener's own playlist has no schema block, and its og:title
74
+ // reads "Name by Listener on Apple Music", so this entry's title and count come first.
75
+ let own = null;
76
+ let cover = null;
68
77
  // The server data lists each song as a track lockup with its title, its artist and its catalog id.
69
78
  const walk = (node, depth) => {
70
79
  if (!node || typeof node !== "object" || depth > 12 || tracks.length >= 2000) return;
71
80
  if (Array.isArray(node)) { for (const each of node) walk(each, depth + 1); return; }
72
81
  const catalog = node.contentDescriptor?.identifiers?.storeAdamID;
82
+ // The page's intent carries the same id with no title or artwork, and comes first.
83
+ if (!own && node.contentDescriptor?.kind === "playlist" && catalog === id && typeof node.title === "string") { own = node; cover = artworkAt(node, 600); }
73
84
  if (typeof node.title === "string" && typeof node.artistName === "string" && node.contentDescriptor?.kind === "song" && catalog) {
74
85
  const key = String(catalog);
75
86
  if (!seen.has(key)) {
76
87
  seen.add(key);
77
- const artwork = typeof node.artwork?.dictionary?.url === "string" ? node.artwork.dictionary.url.replace("{w}x{h}", "300x300").replace("{f}", "jpg") : null;
78
- tracks.push({ id: key, title: text(node.title), artist: text(node.artistName), ...(artwork?.startsWith("https://") ? { artwork } : {}) });
88
+ const artwork = artworkAt(node, 300);
89
+ tracks.push({ id: key, title: text(node.title), artist: text(node.artistName), ...(artwork ? { artwork } : {}) });
79
90
  }
80
91
  return;
81
92
  }
82
93
  for (const value of Object.values(node)) walk(value, depth + 1);
83
94
  };
84
95
  walk(data, 0);
85
- const name = text(schema?.name) || text(/<meta property="og:title" content="([^"]+)"/u.exec(html)?.[1]) || "Apple Music playlist";
86
- const total = Number.isSafeInteger(Number(schema?.numTracks)) ? Number(schema.numTracks) : null;
96
+ const name = text(own?.title) || text(schema?.name) || text(/<meta property="og:title" content="([^"]+)"/u.exec(html)?.[1]) || "Apple Music playlist";
97
+ const count = schema?.numTracks ?? own?.trackCount;
98
+ const total = count !== null && count !== undefined && Number.isSafeInteger(Number(count)) ? Number(count) : null;
87
99
  if (!tracks.length) fail("playlist_unavailable", "Apple Music didn't list the songs of this playlist. Check that it is shared publicly.");
88
- return { provider: "apple_music", id, url, name, total: total !== null && total >= tracks.length ? total : null, tracks: tracks.filter((track) => track.title && track.artist) };
100
+ return { provider: "apple_music", id, url, name, ...(cover ? { cover } : {}), total: total !== null && total >= tracks.length ? total : null, tracks: tracks.filter((track) => track.title && track.artist) };
89
101
  }
90
102
 
91
103
  /** A NetEase Music or QQ Music playlist through its public share link, as library songs. */
92
104
  export async function readPublicPlaylistLink({ url }, { fetchImpl = fetch } = {}) {
93
- const playlist = await fetchPublicPlaylist({ input: url, fetchImpl });
94
- return { provider: playlist.provider, id: playlist.id, url: playlist.url, name: playlist.name, total: playlist.total,
95
- tracks: playlist.rows.map((row) => ({ id: row.id, title: row.title, artist: row.artist, ...(row.album ? { album: row.album } : {}) })).filter((track) => track.artist) };
105
+ // The public reader explains itself in words; the library's surfaces also need its kind, to say it in their language.
106
+ const playlist = await fetchPublicPlaylist({ input: url, fetchImpl }).catch((error) => {
107
+ // Only the link checks' own refusals are about the link; any answer the service gave is about the playlist.
108
+ const aboutLink = /^(Paste a QQ Music|Use a playlist link|Open this share link|This link belongs to another service)/u;
109
+ if (!error.code) error.code = /^Could not reach/u.test(error.message) ? "playlist_unreachable" : aboutLink.test(error.message) ? "playlist_link_unsupported" : "playlist_unavailable";
110
+ throw error;
111
+ });
112
+ return { provider: playlist.provider, id: playlist.id, url: playlist.url, name: playlist.name, total: playlist.total, ...(playlist.cover ? { cover: playlist.cover } : {}),
113
+ tracks: playlist.rows.map((row) => ({ id: row.id, title: row.title, artist: row.artist, ...(row.album ? { album: row.album } : {}), ...(row.artwork ? { artwork: row.artwork } : {}) })).filter((track) => track.artist) };
96
114
  }