@audiofool/moondog 0.2.0-beta.7 → 0.2.0

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.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <h1 align="center">Moondog</h1>
6
6
 
7
- <p align="center">Source candidate 0.2.0-beta.7</p>
7
+ <p align="center">Version 0.2.0</p>
8
8
 
9
9
  <p align="center"><strong>A listening room that shows its work.</strong></p>
10
10
 
@@ -143,7 +143,8 @@ You can save that report as a private page that works offline.
143
143
 
144
144
  Sign in with `/auth`, then pick a model with `/model`.
145
145
  GLM, Kimi, DeepSeek, Grok, GPT, Claude, Gemini, and OpenRouter are there.
146
- `openai-codex` uses your ChatGPT sign-in.
146
+ OpenAI takes your ChatGPT subscription or an API key.
147
+ In the Mac app, any service that speaks OpenAI's or Anthropic's API can be added as an endpoint by its address, and `/endpoint` does it in the terminal.
147
148
  You can switch models in the middle of a conversation.
148
149
  The [model setup guide](docs/TERMINAL_GUIDE.md#enable-agent-conversation) lists each provider and the environment variable it reads.
149
150
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@audiofool/moondog",
3
- "version": "0.2.0-beta.7",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "Local-first personal AI music agent.",
6
6
  "license": "Apache-2.0",
@@ -17,7 +17,7 @@ import { runMemoryReflection } from "../src/memory/reflection-worker.mjs";
17
17
  import { createConfiguredRuntime } from "../src/runtime/pi/configured-runtime.mjs";
18
18
  import { createModelSettings } from "../src/runtime/pi/model-settings.mjs";
19
19
  import { createToolTrace } from "../src/runtime/pi/tool-trace.mjs";
20
- import { writePiRuntimeSelection } from "../src/runtime/pi/runtime-settings.mjs";
20
+ import { watchRuntimeSettings, writePiRuntimeSelection } from "../src/runtime/pi/runtime-settings.mjs";
21
21
  import {
22
22
  formatLocalResult,
23
23
  formatDemoResult,
@@ -26,6 +26,7 @@ import {
26
26
  sanitizeTerminalText,
27
27
  } from "../src/surfaces/cli/format-output.mjs";
28
28
  import { runAuthCommand } from "../src/surfaces/cli/auth-command.mjs";
29
+ import { runEndpointCommand } from "../src/surfaces/cli/endpoint-command.mjs";
29
30
  import { runDataCommand } from "../src/surfaces/cli/data-command.mjs";
30
31
  import { runCatalogCommand } from "../src/surfaces/cli/catalog-command.mjs";
31
32
  import { runProfileCommand } from "../src/surfaces/cli/profile-command.mjs";
@@ -69,6 +70,7 @@ import {
69
70
  import { deriveArtistReleaseHintsFromSpotifyArchive } from "../src/profile/spotify-archive-catalog-hints.mjs";
70
71
  import { resolveListenerLocale, writeLanguagePreference } from "../src/i18n/preferences.mjs";
71
72
  import { createPlaybackSelection, resolvePlaybackService, watchPlaybackPreference, writePlaybackPreference } from "../src/core/playback-preferences.mjs";
73
+ import { createFirstRun } from "../src/core/first-run.mjs";
72
74
 
73
75
  const localCommands = new Set([
74
76
  "status",
@@ -664,6 +666,11 @@ async function main() {
664
666
  return;
665
667
  }
666
668
 
669
+ if (options.command === "endpoint") {
670
+ await runEndpointCommand({ args: options.rest, json: options.json });
671
+ return;
672
+ }
673
+
667
674
  if (options.command === "spotify") {
668
675
  await runSpotifySurface({
669
676
  args: options.rest,
@@ -1071,28 +1078,45 @@ async function main() {
1071
1078
  if (receipt?.provider === "apple-music-library") await refreshAppleLibraryImport();
1072
1079
  replaceDomainServices(await loadDomainServices());
1073
1080
  },
1074
- // The window also rebuilds the agent of each conversation it opened.
1075
- // A choice made while a reply runs is saved here, before that reply ends, so quitting does not drop it.
1081
+ // The window also rebuilds the agent of each conversation it opened. Only a new default is saved;
1082
+ // a model chosen for one conversation is built without touching settings.json.
1076
1083
  saveRuntimeSelection: (selection) => writePiRuntimeSelection(selection),
1077
1084
  rebuildRuntime: async (selection, target = application) => {
1078
- if (selection) await writePiRuntimeSelection(selection);
1079
1085
  // A key saved with /auth, or a Codex sign-in since, takes effect with the new runtime's tools.
1080
1086
  await webResearch.refresh();
1081
1087
  return createConfiguredRuntime(target, process.env, { selection, toolTrace });
1082
1088
  },
1083
1089
  // The desktop window lists models and signs in here, with no terminal.
1084
1090
  modelSettings: createModelSettings({ environment: process.env }),
1091
+ // A model chosen or a sign-in made on the other surface. Model variables fix the model at
1092
+ // launch, so a saved choice has nothing to change then.
1093
+ watchModelSettings: (onChange) => (process.env.MOONDOG_PROVIDER !== undefined || process.env.MOONDOG_MODEL !== undefined
1094
+ ? () => {}
1095
+ : watchRuntimeSettings({ environment: process.env, onChange })),
1096
+ // The one-time music service and model setup, shared by the terminal and the window.
1097
+ firstRun: createFirstRun({ environment: process.env }),
1085
1098
  // A host with its own terminal streams takes the sign-in prompts. The
1086
1099
  // desktop window has none and uses modelSettings instead.
1087
- runAuth: (provider) =>
1100
+ runAuth: (provider, { chatgpt = false } = {}) =>
1088
1101
  runAuthCommand({
1089
- args: ["login", provider],
1102
+ args: ["login", provider, ...(chatgpt ? ["--chatgpt"] : [])],
1090
1103
  ...(host?.terminalStreams && {
1091
1104
  input: host.terminalStreams.input,
1092
1105
  output: host.terminalStreams.output,
1093
1106
  progressOutput: host.terminalStreams.output,
1094
1107
  }),
1095
1108
  }),
1109
+ // The terminal adds an endpoint on its own streams, as it signs in; a list or removal prints nothing.
1110
+ runEndpoint: (args, { quiet = false } = {}) =>
1111
+ runEndpointCommand({
1112
+ args,
1113
+ ...(quiet ? { output: { write() {} } } : {}),
1114
+ ...(host?.terminalStreams && {
1115
+ input: host.terminalStreams.input,
1116
+ ...(quiet ? {} : { output: host.terminalStreams.output }),
1117
+ progressOutput: host.terminalStreams.output,
1118
+ }),
1119
+ }),
1096
1120
  runWeb: (args, options) => runWebCommand({ args, webResearch, ...options }),
1097
1121
  runProfileAction: (args) => runProfileCommand({
1098
1122
  args,
@@ -5,7 +5,9 @@ import { access, lstat, mkdir, mkdtemp, readFile, readlink, realpath, rename, rm
5
5
  import { constants, realpathSync } from "node:fs";
6
6
  import path from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
- import { resolveMoondogSettingsFile } from "../runtime/pi/runtime-settings.mjs";
8
+ // The release workflow checks a tag with scripts/release-version.mjs before npm ci, so this module and
9
+ // what it imports load no npm package. settings.json lives beside auth.json.
10
+ import { resolveMoondogAuthFile } from "../runtime/pi/persistent-credential-store.mjs";
9
11
  import { resolveMoondogStateDirectory } from "./state-directory.mjs";
10
12
 
11
13
  const exec = promisify(execFile);
@@ -88,7 +90,7 @@ export async function activeInstallationProcesses(root, { run = command, ownPid
88
90
  export function createApplicationUpdater({ root = DEFAULT_ROOT, environment = process.env, fetchImpl = globalThis.fetch,
89
91
  run = command, now = Date.now, activeProcesses, node = process.execPath, npm = "npm" } = {}) {
90
92
  root = realpathSync(path.resolve(root));
91
- const storage = path.join(path.dirname(resolveMoondogSettingsFile(environment)), "updates");
93
+ const storage = path.join(path.dirname(resolveMoondogAuthFile(environment)), "updates");
92
94
  // Installation-wide, even when two sessions use different config homes.
93
95
  const lock = path.join(path.dirname(root), ".moondog-update-" + createHash("sha256").update(root).digest("hex").slice(0, 24) + ".lock");
94
96
  const recovery = lock + ".recovery.json";
@@ -103,7 +105,7 @@ export function createApplicationUpdater({ root = DEFAULT_ROOT, environment = pr
103
105
  async function assertDataOutsideReplacement(mode) {
104
106
  const replaced = mode === "npm" ? root : path.join(root, "node_modules");
105
107
  const canonical = await resolvedPath(replaced);
106
- const personal = [path.dirname(resolveMoondogSettingsFile(environment)), resolveMoondogStateDirectory(environment),
108
+ const personal = [path.dirname(resolveMoondogAuthFile(environment)), resolveMoondogStateDirectory(environment),
107
109
  environment.MOONDOG_APPLE_IMPORTS_ROOT, environment.MOONDOG_APPLE_PROJECTION_PATH].filter(Boolean);
108
110
  for (const file of personal) {
109
111
  if (inside(replaced, path.resolve(file)) || inside(canonical, await resolvedPath(path.resolve(file)))) {
@@ -0,0 +1,53 @@
1
+ import { unwatchFile, watchFile } from "node:fs";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+
5
+ import { readPlaybackPreference, resolvePlaybackPreferenceFile } from "./playback-preferences.mjs";
6
+ import { resolveMoondogAuthFile } from "../runtime/pi/persistent-credential-store.mjs";
7
+
8
+ // The first launch asks for a music service and a model, once, on whichever surface opens first.
9
+ // first-run.json, kept beside playback.json, says the first run is over, so the terminal and the
10
+ // window ask once between them. It ends when the listener skips it, or once a music service is
11
+ // saved and a model can answer; signing out later does not bring it back.
12
+ export function resolveFirstRunFile(environment = process.env) {
13
+ return path.join(path.dirname(resolveMoondogAuthFile(environment)), "first-run.json");
14
+ }
15
+
16
+ async function readFinished(environment) {
17
+ try {
18
+ const document = JSON.parse(await readFile(resolveFirstRunFile(environment), "utf8"));
19
+ return document?.version === 1 && typeof document.finished_at === "string";
20
+ } catch {
21
+ return false;
22
+ }
23
+ }
24
+
25
+ async function writeFinished(environment, { skipped }) {
26
+ const file = resolveFirstRunFile(environment);
27
+ await mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
28
+ const document = { version: 1, finished_at: new Date().toISOString(), skipped: skipped === true };
29
+ await writeFile(file, `${JSON.stringify(document, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
30
+ }
31
+
32
+ export function createFirstRun({ environment = process.env, interval = 2000 } = {}) {
33
+ return {
34
+ // What the first run still asks for. A service counts once it is saved, even as Spotify, the
35
+ // default; the model counts once the surface's own agent can answer (modelReady).
36
+ async state({ modelReady = false } = {}) {
37
+ const [finished, service] = await Promise.all([readFinished(environment), readPlaybackPreference(environment)]);
38
+ const over = finished || Boolean(service && modelReady);
39
+ if (over && !finished) await writeFinished(environment, { skipped: false }).catch(() => {});
40
+ return { needed: !over, service, model: modelReady === true };
41
+ },
42
+ // The listener skipped the rest, or the surface's last step ended it.
43
+ finish: ({ skipped = false } = {}) => writeFinished(environment, { skipped }),
44
+ // Hears a save on either side: the first run ended there, or a music service was chosen. A model
45
+ // reaches the surface through its own agent, which watchRuntimeSettings rebuilds.
46
+ watch(listener) {
47
+ const files = [resolveFirstRunFile(environment), resolvePlaybackPreferenceFile(environment)];
48
+ const changed = (now, before) => { if (now.mtimeMs !== before.mtimeMs) listener(); };
49
+ for (const file of files) watchFile(file, { interval, persistent: false }, changed);
50
+ return () => { for (const file of files) unwatchFile(file, changed); };
51
+ },
52
+ };
53
+ }
@@ -22,7 +22,7 @@ export default {
22
22
  "What have you been listening to?": "¿Qué has estado escuchando?",
23
23
  "A song, a playlist, or what to play next.": "Una canción, una playlist o qué poner después.",
24
24
  "Your personal music agent.": "Tu agente musical personal.",
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- `/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.": "# Tu sala de escucha\n\n## 01 / Escucha y descubre\n\nEscribe para hablar de música, pedir una playlist o explorar.\nPara hablar, Moondog necesita un modelo: `/auth` inicia sesión y `/model` elige uno.\nMientras llega una respuesta, cada paso aparece en la conversación y el pie de página indica el que está en curso.\n\n- `/taste` - tu perfil: abre cualquier canción o artista para ver por qué está ahí\n- `/taste report` - el panorama completo en una página\n- `/import` - trae tu historial, tu biblioteca o una playlist\n- `/lyrics` - la letra de la portada; `/lyrics sync` busca más\n- `/spotify` - reproduce, añade a la cola y crea playlists en Spotify\n- Pide pasar la reproducción a tu iPhone, tu ordenador u otro dispositivo de Spotify por su nombre\n- `/web search <búsqueda>` o `/web read <url>` - consulta sitios de música públicos\n\n## 02 / Hazlo tuyo\n\n- `/profile` - el mismo perfil que `/taste`\n- `/profile corrections` - todo lo que me has dicho\n- `/profile retract <id>` - deshaz una de esas elecciones\n- `/profile help` - todos los comandos del perfil\n- `/remember <texto>`, `/memory`, `/forget <id>` - lo que recuerdo entre conversaciones\n\n## 03 / Por la sala\n\n- `/home` - vuelve a la portada; la conversación se queda\n- `/theme paper|charcoal|terminal|auto` - cambia el aspecto\n- `/art braille|ascii|off` - cambia la ilustración\n- `/motion on|off` - activa o desactiva la animación\n- `/commands` o Ctrl+P - busca cualquier comando; tu mensaje no se pierde\n- Re Pág y Av Pág desplazan la conversación. La cabecera y tu borrador no se mueven\n- Arriba y Abajo en el borrador recuperan lo que escribiste en esta conversación\n- `/resume` - retoma una conversación guardada (escribe para filtrar, Enter la abre)\n- `/new` - empieza de cero; esta conversación queda guardada\n- `/status`, `/sources`, `/tools`, `/doctor` - mira qué está conectado y funcionando\n- `/reload` - recarga los ajustes del modelo y los inicios de sesión\n- `/update [--check] [--channel latest|beta]` - busca una versión nueva, o cierra esta sala e instálala\n- `/help all` - todos los comandos, incluidos los de la terminal\n- `/language` - elige el idioma de Moondog\n- `/quit` - salir\n\nTab lleva al menú de la pantalla de inicio. Esc vuelve a la escritura.\nEnter envía y Mayús+Enter empieza una línea nueva.\nTab o Enter aceptan una sugerencia.\nCtrl+C detiene una petición al modelo o a la web, o sale si no hay nada en marcha.\nEn el perfil, escribe para filtrar, Tab cambia de lista y Enter muestra lo que puedes hacer.\nCtrl+R lo actualiza y Ctrl+O abre el informe completo.\nTu perfil funciona sin modelo.\nPon entre comillas las rutas, títulos y nombres con espacios.",
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.": "# Tu sala de escucha\n\n## 01 / Escucha y descubre\n\nEscribe para hablar de música, pedir una playlist o explorar.\nPara hablar, Moondog necesita un modelo: `/auth` inicia sesión y `/model` elige uno.\nMientras llega una respuesta, cada paso aparece en la conversación y el pie de página indica el que está en curso.\n\n- `/taste` - tu perfil: abre cualquier canción o artista para ver por qué está ahí\n- `/taste report` - el panorama completo en una página\n- `/import` - trae tu historial, tu biblioteca o una playlist\n- `/lyrics` - la letra de la portada; `/lyrics sync` busca más\n- `/service` - elige dónde pongo la música: Spotify, Apple Music o NetEase\n- `/spotify` - reproduce, añade a la cola y crea playlists en Spotify\n- Pide pasar la reproducción a tu iPhone, tu ordenador u otro dispositivo de Spotify por su nombre\n- `/web search <búsqueda>` o `/web read <url>` - consulta sitios de música públicos\n\n## 02 / Hazlo tuyo\n\n- `/profile` - el mismo perfil que `/taste`\n- `/profile corrections` - todo lo que me has dicho\n- `/profile retract <id>` - deshaz una de esas elecciones\n- `/profile help` - todos los comandos del perfil\n- `/remember <texto>`, `/memory`, `/forget <id>` - lo que recuerdo entre conversaciones\n\n## 03 / Por la sala\n\n- `/home` - vuelve a la portada; la conversación se queda\n- `/theme paper|charcoal|terminal|auto` - cambia el aspecto\n- `/art braille|ascii|off` - cambia la ilustración\n- `/motion on|off` - activa o desactiva la animación\n- `/commands` o Ctrl+P - busca cualquier comando; tu mensaje no se pierde\n- Re Pág y Av Pág desplazan la conversación. La cabecera y tu borrador no se mueven\n- Arriba y Abajo en el borrador recuperan lo que escribiste en esta conversación\n- `/resume` - retoma una conversación guardada (escribe para filtrar, Enter la abre)\n- `/new` - empieza de cero; esta conversación queda guardada\n- `/status`, `/sources`, `/tools`, `/doctor` - mira qué está conectado y funcionando\n- `/reload` - recarga los ajustes del modelo y los inicios de sesión\n- `/update [--check] [--channel latest|beta]` - busca una versión nueva, o cierra esta sala e instálala\n- `/help all` - todos los comandos, incluidos los de la terminal\n- `/language` - elige el idioma de Moondog\n- `/quit` - salir\n\nTab lleva al menú de la pantalla de inicio. Esc vuelve a la escritura.\nEnter envía y Mayús+Enter empieza una línea nueva.\nTab o Enter aceptan una sugerencia.\nCtrl+C detiene una petición al modelo o a la web, o sale si no hay nada en marcha.\nEn el perfil, escribe para filtrar, Tab cambia de lista y Enter muestra lo que puedes hacer.\nCtrl+R lo actualiza y Ctrl+O abre el informe completo.\nTu perfil funciona sin modelo.\nPon entre comillas las rutas, títulos y nombres con espacios.",
26
26
  "Listening profile": "Perfil de escucha",
27
27
  "Profile": "Perfil",
28
28
  "See what your listening reveals. Tell me what I missed.": "Mira lo que revela tu forma de escuchar. Dime qué se me escapó.",
@@ -176,7 +176,7 @@ export default {
176
176
  "Memory": "Memoria",
177
177
  "Right now I can't change anything in your music accounts.": "Ahora mismo no puedo cambiar nada en tus cuentas de música.",
178
178
  "I can make changes in your connected accounts, and I always ask first.": "Puedo hacer cambios en tus cuentas conectadas, y siempre pregunto 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, and openai-codex uses your ChatGPT sign-in\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- `/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-codex` uses your ChatGPT sign-in.\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 los comandos\n\nDesde tu terminal:\n\n- `moondog --version` - muestra la versión instalada\n- `moondog update [--check] [--channel latest|beta]` - busca o instala una versión publicada\n- `moondog web status|search|read [argumentos] [--json]` - consulta sitios de música públicos a través de DeepSeek, Brave Search o Codex CLI\n- `moondog demo-history --output <archivo-absoluto.zip> [--json]` - crea un ZIP de historial de Spotify ficticio para probar el importador\n- `moondog auth login <proveedor>` - inicia sesión en un proveedor de modelos; la clave se escribe sin mostrarse, y openai-codex usa tu cuenta de ChatGPT\n- `moondog auth status [proveedor]` - mira qué inicios de sesión están guardados\n- `moondog auth logout <proveedor>` - cierra la sesión de un proveedor\n- `moondog spotify help` - configura y controla Spotify\n- `moondog spotify login [client-id]` - conecta Spotify en tu navegador\n- `moondog spotify now|devices|queue` - mira qué suena en Spotify, dónde y qué viene después\n- `moondog spotify recent` - mira lo que escuchaste últimamente\n- `moondog spotify sync-recent` - añade tus últimas reproducciones a tu perfil\n- `moondog spotify sync-library` - añade tu biblioteca de Spotify a tu perfil\n- `moondog spotify play|pause|next|previous` - controla la reproducción de Spotify\n- `moondog listenbrainz import-history <listen-history.json>` - añade un archivo de escuchas de ListenBrainz a tu perfil\n- `moondog catalog latest-single --artist <nombre> [--known-release <título> | --from <spotify-history.zip>]` - encuentra el último sencillo de un artista en Apple Music (EE. UU.), sin modelo\n- `moondog status [--json]` - mira cómo está todo\n- `moondog taste [--json]` - tu informe de escucha\n- `moondog taste --html [--output <archivo.html>]` - guarda tu informe como página web que funciona sin conexión\n- `moondog taste --card [--output <archivo.html>]` - guarda un resumen breve que puedes revisar antes de compartirlo\n- `moondog taste --from <spotify-history.zip> --html` - un informe puntual de un ZIP de Spotify, sin guardarlo\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - un informe puntual de ambas exportaciones de Spotify\n- `moondog taste --from <spotify-history.zip> --save --html` - guarda el historial de Spotify y muestra tu informe completo\n- `moondog data inspect --scope <listening|apple|profile>` - mira qué hay guardado y obtén el código para restablecerlo\n- `moondog data export --scope <listening|apple|profile> --output <carpeta>` - exporta una copia sin tocar el original\n- `moondog data reset --scope <listening|apple|profile> --confirm <código>` - aparta los datos guardados (se archivan, no se borran)\n- `moondog profile build [--force]` - crea o retoma un perfil guardado con tu modelo conectado\n- `moondog profile saved [desplazamiento]` - lee tu perfil guardado\n- `moondog profile explain <número>` - rastrea un hallazgo guardado hasta su evidencia\n- `moondog profile corrections [--all]` - todo lo que me has dicho, incluidas elecciones anteriores\n- `moondog profile correct --artist <nombre> (--like|--avoid)` - marca que te gusta un artista, o déjalo fuera\n- `moondog profile correct --track <título> --by <artista> (--like|--avoid)` - marca que te gusta una canción, o déjala fuera\n- `moondog profile retract <correction-id>` - deshaz una de tus elecciones\n- `moondog demo --offline [--json]` - una demo con datos inventados, sin iniciar sesión\n- `moondog demo [petición] [--json]` - la misma demo, hablando a través de tu modelo\n- `moondog ask <petición>` - haz una pregunta y sal\n- `moondog remember <texto>` - pídeme que recuerde algo\n- `moondog forget <memory-id>` - olvida algo\n- `moondog memory reflect [--dry-run] [--json]` - déjame repasar ahora las conversaciones recientes\n- `moondog` - abre la sala de escucha\n\nDentro de la sala de escucha:\n\n- `/update [--check] [--channel latest|beta]` - busca actualizaciones, o guarda y cierra esta sesión para instalar una\n- `/status` o `/sources` - mira cómo está todo\n- `/profile` o `/taste` - tu perfil, y por qué está cada canción o artista\n- `/taste report` - el informe completo en una página\n- `/profile build [--force]` - crea o retoma una lectura guardada; Ctrl+C conserva el progreso\n- `/profile saved [desplazamiento]` - lee tu perfil guardado\n- `/profile explain <número>` - revisa la evidencia de un hallazgo guardado\n- `/profile corrections [--all]` - todo lo que me has dicho\n- `/profile correct --track \"<título>\" --by \"<artista>\" (--like|--avoid)` - marca que te gusta una canción, o déjala fuera\n- `/profile correct --artist \"<nombre>\" (--like|--avoid)` - marca que te gusta un artista, o déjalo fuera\n- `/profile retract <correction-id>` - deshaz una elección\n- `/memory` - lo que recuerdo\n- `/tools` - lo que puedo hacer ahora mismo\n- `/doctor` - revisa tu configuración\n- `/model` - elige el modelo con el que hablo\n- `/model <proveedor> <modelo>` - cambia directamente a un modelo\n- `/model refresh [proveedor]` - actualiza las opciones públicas de modelos; mantiene el modelo elegido\n- `/auth [proveedor]` - inicia sesión en un proveedor de modelos\n- `/web status|search|read` - consulta sitios de música públicos\n- `/import [ruta]` - trae tu historial, tu biblioteca o una playlist\n- `/language` - elige el idioma de Moondog\n- `/spotify` - comandos de Spotify\n- `/spotify login [client-id]` - conecta Spotify\n- `/spotify now|devices|queue` - mira qué suena, dónde y qué viene después\n- `/spotify recent|sync-recent` - mira o guarda tus últimas reproducciones\n- `/spotify import-history \"/ruta/a/spotify-history.zip\"` - añade un ZIP de Spotify, sin iniciar sesión\n- `/skip` o `/stop` - pasa al siguiente avance, o detén los avances\n- `/reload` - recarga los ajustes del modelo y los inicios de sesión\n- `/remember [tipo] <texto>` - pídeme que recuerde algo\n- `/forget <memory-id>` - olvida algo\n- `/rewind` o Alt+R - edita un mensaje anterior en esta conversación; los mensajes siguientes se reemplazan\n- `/branch` - sigue desde aquí en una conversación nueva; esta queda guardada\n- `/rewind latest` - edita el mensaje más reciente\n- `/resume` - retoma una conversación guardada\n- `/resume <session-id>` - ve directamente a una\n- `/new` - empieza de cero; la anterior queda guardada\n- `/quit` - salir\n\nTodo lo que escribas que no sea un comando va al modelo que elegiste con `/model`, o al definido en `MOONDOG_PROVIDER` y `MOONDOG_MODEL`.\nInicia sesión con `/auth`, o define la clave de API del proveedor en tu entorno. `/auth openai-codex` usa tu cuenta de ChatGPT.\nCuando tu perfil esté listo, puedo buscar en tu biblioteca, explicarte lo que veo y planear playlists contigo.\nSolo puedo controlar Spotify después de `moondog spotify login`, y nunca publico, envío mensajes, borro nada ni gasto dinero.\nPídeme pasar la reproducción a un dispositivo por su nombre, como tu 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- `/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 los comandos\n\nDesde tu terminal:\n\n- `moondog --version` - muestra la versión instalada\n- `moondog update [--check] [--channel latest|beta]` - busca o instala una versión publicada\n- `moondog web status|search|read [argumentos] [--json]` - consulta sitios de música públicos a través de DeepSeek, Brave Search o Codex CLI\n- `moondog demo-history --output <archivo-absoluto.zip> [--json]` - crea un ZIP de historial de Spotify ficticio para probar el importador\n- `moondog auth login <proveedor>` - inicia sesión en un proveedor de modelos; la clave se escribe sin mostrarse, y `openai --chatgpt` inicia sesión con tu suscripción de ChatGPT\n- `moondog auth status [proveedor]` - mira qué inicios de sesión están guardados\n- `moondog auth logout <proveedor>` - cierra la sesión de un proveedor\n- `moondog spotify help` - configura y controla Spotify\n- `moondog spotify login [client-id]` - conecta Spotify en tu navegador\n- `moondog spotify now|devices|queue` - mira qué suena en Spotify, dónde y qué viene después\n- `moondog spotify recent` - mira lo que escuchaste últimamente\n- `moondog spotify sync-recent` - añade tus últimas reproducciones a tu perfil\n- `moondog spotify sync-library` - añade tu biblioteca de Spotify a tu perfil\n- `moondog spotify play|pause|next|previous` - controla la reproducción de Spotify\n- `moondog listenbrainz import-history <listen-history.json>` - añade un archivo de escuchas de ListenBrainz a tu perfil\n- `moondog catalog latest-single --artist <nombre> [--known-release <título> | --from <spotify-history.zip>]` - encuentra el último sencillo de un artista en Apple Music (EE. UU.), sin modelo\n- `moondog status [--json]` - mira cómo está todo\n- `moondog taste [--json]` - tu informe de escucha\n- `moondog taste --html [--output <archivo.html>]` - guarda tu informe como página web que funciona sin conexión\n- `moondog taste --card [--output <archivo.html>]` - guarda un resumen breve que puedes revisar antes de compartirlo\n- `moondog taste --from <spotify-history.zip> --html` - un informe puntual de un ZIP de Spotify, sin guardarlo\n- `moondog taste --from <account-data.zip> --from <extended-history.zip> --html` - un informe puntual de ambas exportaciones de Spotify\n- `moondog taste --from <spotify-history.zip> --save --html` - guarda el historial de Spotify y muestra tu informe completo\n- `moondog data inspect --scope <listening|apple|profile>` - mira qué hay guardado y obtén el código para restablecerlo\n- `moondog data export --scope <listening|apple|profile> --output <carpeta>` - exporta una copia sin tocar el original\n- `moondog data reset --scope <listening|apple|profile> --confirm <código>` - aparta los datos guardados (se archivan, no se borran)\n- `moondog profile build [--force]` - crea o retoma un perfil guardado con tu modelo conectado\n- `moondog profile saved [desplazamiento]` - lee tu perfil guardado\n- `moondog profile explain <número>` - rastrea un hallazgo guardado hasta su evidencia\n- `moondog profile corrections [--all]` - todo lo que me has dicho, incluidas elecciones anteriores\n- `moondog profile correct --artist <nombre> (--like|--avoid)` - marca que te gusta un artista, o déjalo fuera\n- `moondog profile correct --track <título> --by <artista> (--like|--avoid)` - marca que te gusta una canción, o déjala fuera\n- `moondog profile retract <correction-id>` - deshaz una de tus elecciones\n- `moondog demo --offline [--json]` - una demo con datos inventados, sin iniciar sesión\n- `moondog demo [petición] [--json]` - la misma demo, hablando a través de tu modelo\n- `moondog ask <petición>` - haz una pregunta y sal\n- `moondog remember <texto>` - pídeme que recuerde algo\n- `moondog forget <memory-id>` - olvida algo\n- `moondog memory reflect [--dry-run] [--json]` - déjame repasar ahora las conversaciones recientes\n- `moondog` - abre la sala de escucha\n\nDentro de la sala de escucha:\n\n- `/update [--check] [--channel latest|beta]` - busca actualizaciones, o guarda y cierra esta sesión para instalar una\n- `/status` o `/sources` - mira cómo está todo\n- `/profile` o `/taste` - tu perfil, y por qué está cada canción o artista\n- `/taste report` - el informe completo en una página\n- `/profile build [--force]` - crea o retoma una lectura guardada; Ctrl+C conserva el progreso\n- `/profile saved [desplazamiento]` - lee tu perfil guardado\n- `/profile explain <número>` - revisa la evidencia de un hallazgo guardado\n- `/profile corrections [--all]` - todo lo que me has dicho\n- `/profile correct --track \"<título>\" --by \"<artista>\" (--like|--avoid)` - marca que te gusta una canción, o déjala fuera\n- `/profile correct --artist \"<nombre>\" (--like|--avoid)` - marca que te gusta un artista, o déjalo fuera\n- `/profile retract <correction-id>` - deshaz una elección\n- `/memory` - lo que recuerdo\n- `/tools` - lo que puedo hacer ahora mismo\n- `/doctor` - revisa tu configuración\n- `/model` - elige el modelo con el que hablo\n- `/model <proveedor> <modelo>` - cambia directamente a un modelo\n- `/model refresh [proveedor]` - actualiza las opciones públicas de modelos; mantiene el modelo elegido\n- `/auth [proveedor]` - inicia sesión en un proveedor de modelos\n- `/web status|search|read` - consulta sitios de música públicos\n- `/import [ruta]` - trae tu historial, tu biblioteca o una playlist\n- `/language` - elige el idioma de Moondog\n- `/service [spotify|apple_music|netease]` - elige dónde pongo la música\n- `/spotify` - comandos de Spotify\n- `/spotify login [client-id]` - conecta Spotify\n- `/spotify now|devices|queue` - mira qué suena, dónde y qué viene después\n- `/spotify recent|sync-recent` - mira o guarda tus últimas reproducciones\n- `/spotify import-history \"/ruta/a/spotify-history.zip\"` - añade un ZIP de Spotify, sin iniciar sesión\n- `/skip` o `/stop` - pasa al siguiente avance, o detén los avances\n- `/reload` - recarga los ajustes del modelo y los inicios de sesión\n- `/remember [tipo] <texto>` - pídeme que recuerde algo\n- `/forget <memory-id>` - olvida algo\n- `/rewind` o Alt+R - edita un mensaje anterior en esta conversación; los mensajes siguientes se reemplazan\n- `/branch` - sigue desde aquí en una conversación nueva; esta queda guardada\n- `/rewind latest` - edita el mensaje más reciente\n- `/resume` - retoma una conversación guardada\n- `/resume <session-id>` - ve directamente a una\n- `/new` - empieza de cero; la anterior queda guardada\n- `/quit` - salir\n\nTodo lo que escribas que no sea un comando va al modelo que elegiste con `/model`, o al definido en `MOONDOG_PROVIDER` y `MOONDOG_MODEL`.\nInicia sesión con `/auth`, o define la clave de API del proveedor en tu entorno. `/auth openai` inicia sesión con tu suscripción de ChatGPT o con una clave de API.\nCuando tu perfil esté listo, puedo buscar en tu biblioteca, explicarte lo que veo y planear playlists contigo.\nSolo puedo controlar Spotify después de `moondog spotify login`, y nunca publico, envío mensajes, borro nada ni gasto dinero.\nPídeme pasar la reproducción a un dispositivo por su nombre, como tu iPhone.",
180
180
  "Apple Music library": "Biblioteca de Apple Music",
181
181
  "Model": "Modelo",
182
182
  "Finding similar music": "Buscar música parecida",
@@ -615,7 +615,6 @@ export default {
615
615
  "Use /auth or /auth <provider>. Type API keys only into the hidden prompt that follows.": "Usa /auth o /auth <proveedor>. Escribe las claves de API solo en el campo oculto que aparece después.",
616
616
  "Sign-in isn't available when Moondog is started this way.": "Iniciar sesión no está disponible cuando Moondog se abre de esta forma.",
617
617
  "I can't sign in to that provider. Type /auth to see the ones I can.": "No puedo iniciar sesión en ese proveedor. Escribe /auth para ver los que sí.",
618
- "ChatGPT sign-in": "Inicio de sesión de ChatGPT",
619
618
  "API key": "Clave de API",
620
619
  "Sign in to a model or web search service": "Inicia sesión en un proveedor de modelos o de búsqueda web",
621
620
  "Sign-in cancelled.": "Inicio de sesión cancelado.",
@@ -771,7 +770,14 @@ export default {
771
770
  "Cancelled.": "Cancelado.",
772
771
  "/{command} didn't work.": "/{command} no funcionó.",
773
772
  "Your request is still here · /model connects a model first.": "Tu petición sigue aquí · /model conecta primero un modelo.",
774
- "Thinking...": "Pensando...",
773
+ "Reading the room": "Tomándole el pulso a la sala",
774
+ "Checking the request line": "Revisando las peticiones",
775
+ "Finding the groove": "Buscando el groove",
776
+ "Working the decks": "Haciendo scratch",
777
+ "Planning the segue": "Pensando la transición",
778
+ "Mic check": "Probando el micro",
779
+ "Riding the faders": "Ajustando los faders",
780
+ "Finding the cue": "Buscando la entrada",
775
781
  "{count} running · {label}": "{count} en marcha · {label}",
776
782
  "{label} didn't work · carrying on...": "{label} no funcionó · sigo adelante...",
777
783
  "Can't reach the model. Trying again ({attempt}/{max})...": "No puedo conectar con el modelo. Reintentando ({attempt}/{max})...",
@@ -969,4 +975,56 @@ export default {
969
975
  "Web search key": "Clave de búsqueda web",
970
976
  "Saved the {service} key. Web search goes through {provider}.": "Guardé la clave de {service}. La búsqueda web va por {provider}.",
971
977
  "Saved the {service} key, but web search still isn't ready. Run `/web status` to see why.": "Guardé la clave de {service}, pero la búsqueda web todavía no está lista. Usa `/web status` para ver por qué.",
978
+ "Add an endpoint by its address": "Añadir un endpoint por su dirección",
979
+ "Remove an endpoint and its key": "Quitar un endpoint y su clave",
980
+ "ChatGPT sign-in or API key": "Sesión de ChatGPT o clave de API",
981
+ "ChatGPT subscription": "Suscripción de ChatGPT",
982
+ "Sign in with ChatGPT in your browser": "Inicia sesión con ChatGPT en tu navegador",
983
+ "Paste an OpenAI API key": "Pega una clave de API de OpenAI",
984
+ "How do you want to use OpenAI?": "¿Cómo quieres usar OpenAI?",
985
+ "Endpoints aren't available when Moondog is started this way.": "Los endpoints no están disponibles cuando Moondog se inicia así.",
986
+ "Use /endpoint, /endpoint add, or /endpoint remove <id>.": "Usa /endpoint, /endpoint add o /endpoint remove <id>.",
987
+ "Type `/model <id>` to talk through one, or `/endpoint add` to add another.": "Escribe `/model <id>` para hablar a través de uno, o `/endpoint add` para añadir otro.",
988
+ "No endpoints yet. `/endpoint add` adds any service that speaks OpenAI's or Anthropic's API, by its address.": "Todavía no hay endpoints. `/endpoint add` añade, por su dirección, cualquier servicio que hable la API de OpenAI o de Anthropic.",
989
+ "Endpoints listed.": "Endpoints listados.",
990
+ "Saved {name}. Type `/model {id}` to pick one of its models.": "{name} guardado. Escribe `/model {id}` para elegir uno de sus modelos.",
991
+ "Endpoint saved.": "Endpoint guardado.",
992
+ "Removed {name} and its key.": "Se quitaron {name} y su clave.",
993
+ "Endpoint removed.": "Endpoint quitado.",
994
+ "Add a model service by its address": "Añade un servicio de modelos por su dirección",
995
+ "Whole songs on your Spotify devices": "Canciones completas en tus dispositivos de Spotify",
996
+ "30-second previews, played here": "Avances de 30 segundos, aquí mismo",
997
+ "Whole songs through ncm-cli": "Canciones completas con ncm-cli",
998
+ "NetEase Music": "NetEase Music",
999
+ "Set up ncm-cli first": "Primero configura ncm-cli",
1000
+ "Sign in to {provider}": "Iniciar sesión en {provider}",
1001
+ "Choose another model": "Elegir otro modelo",
1002
+ "Choose a model": "Elegir un modelo",
1003
+ "Pick a provider and model, then sign in": "Elige un proveedor y un modelo, y luego inicia sesión",
1004
+ "Two things before we start: where I play your music, and the model I talk through.": "Dos cosas antes de empezar: dónde pongo tu música y el modelo con el que hablo.",
1005
+ "One thing before we start: where I play your music.": "Una cosa antes de empezar: dónde pongo tu música.",
1006
+ "One thing before we start: the model I talk through.": "Una cosa antes de empezar: el modelo con el que hablo.",
1007
+ "Where should I play music?": "¿Dónde pongo la música?",
1008
+ "Which model should I talk through?": "¿Con qué modelo hablo?",
1009
+ "/service changes it any time.": "/service lo cambia cuando quieras.",
1010
+ "{model} is saved, but you're not signed in to {provider} yet.": "{model} está guardado, pero aún no has iniciado sesión en {provider}.",
1011
+ "Sign in with ChatGPT, or use an API key from another provider. Your profile works without one.": "Inicia sesión con ChatGPT o usa una clave de API de otro proveedor. Tu perfil funciona sin modelo.",
1012
+ "NetEase plays through its own command line tool. Run this in another terminal, then choose it again:": "NetEase suena con su propia herramienta de línea de comandos. Ejecuta esto en otra terminal y vuelve a elegirlo:",
1013
+ "Welcome to the machine.": "Welcome to the machine.",
1014
+ "↑↓ ↵ choose · esc skip setup": "↑↓ ↵ elegir · esc saltar la configuración",
1015
+ "↑↓ choose · enter select · esc skip setup": "↑↓ elegir · enter seleccionar · esc saltar la configuración",
1016
+ "Spotify it is. /spotify help shows how to connect your account.": "Spotify, entonces. /spotify help explica cómo conectar tu cuenta.",
1017
+ "{service} it is.": "{service}, entonces.",
1018
+ "Choosing a music service isn't available when Moondog is started this way.": "Elegir un servicio de música no está disponible cuando Moondog se abre de esta forma.",
1019
+ "Use /service, or /service spotify, apple_music, or netease.": "Usa /service, o /service spotify, apple_music o netease.",
1020
+ "Music service unchanged.": "El servicio de música no ha cambiado.",
1021
+ "NetEase Music plays through its own command line tool. Run this in another terminal, then choose it again with `/service`:\n\n```\n{command}\n```": "NetEase Music suena con su propia herramienta de línea de comandos. Ejecuta esto en otra terminal y vuelve a elegirlo con `/service`:\n\n```\n{command}\n```",
1022
+ "NetEase needs ncm-cli first.": "NetEase necesita ncm-cli primero.",
1023
+ "Setup · music service": "Configuración · servicio de música",
1024
+ "Setup · model": "Configuración · modelo",
1025
+ "All set. /spotify help shows how to connect Spotify.": "Listo. /spotify help explica cómo conectar Spotify.",
1026
+ "All set. Say anything, or press Tab to look around.": "Listo. Di lo que quieras, o pulsa Tab para echar un vistazo.",
1027
+ "Skipped. /service and /model are here when you want them.": "Omitido. /service y /model siguen aquí cuando los quieras.",
1028
+ "Saving your music service...": "Guardando tu servicio de música...",
1029
+ "Choose where Moondog plays music": "Elige dónde pone Moondog la música",
972
1030
  };
@@ -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- `/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- `/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- `/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スペースを含むパス、タイトル、名前は引用符で囲んでください。",
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, and openai-codex uses your ChatGPT sign-in\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- `/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-codex` uses your ChatGPT sign-in.\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-codex は 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- `/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-codex` は ChatGPT のサインインを使います。\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- `/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 のように名前を言ってもらえれば、そのデバイスに再生を切り替えます。",
180
180
  "Apple Music library": "Apple Music ライブラリ",
181
181
  "Model": "モデル",
182
182
  "Finding similar music": "似た音楽を探す",
@@ -615,7 +615,6 @@ export default {
615
615
  "Use /auth or /auth <provider>. Type API keys only into the hidden prompt that follows.": "/auth または /auth <provider> を使ってください。API キーは、このあと表示される非表示の入力欄にだけ入力してください。",
616
616
  "Sign-in isn't available when Moondog is started this way.": "この起動方法ではサインインできません。",
617
617
  "I can't sign in to that provider. Type /auth to see the ones I can.": "そのプロバイダーにはサインインできません。/auth で対応しているものを確認できます。",
618
- "ChatGPT sign-in": "ChatGPT でサインイン",
619
618
  "API key": "API キー",
620
619
  "Sign in to a model or web search service": "モデルまたは Web 検索サービスにサインイン",
621
620
  "Sign-in cancelled.": "サインインをキャンセルしました。",
@@ -771,7 +770,14 @@ export default {
771
770
  "Cancelled.": "キャンセルしました。",
772
771
  "/{command} didn't work.": "/{command} はうまくいきませんでした。",
773
772
  "Your request is still here · /model connects a model first.": "リクエストはまだ残っています · 先に /model でモデルを接続してください。",
774
- "Thinking...": "考えています...",
773
+ "Reading the room": "場の空気を読んでいます",
774
+ "Checking the request line": "リクエストを確認中",
775
+ "Finding the groove": "グルーヴを探っています",
776
+ "Working the decks": "スクラッチ中",
777
+ "Planning the segue": "曲のつなぎを考え中",
778
+ "Mic check": "マイクチェック中",
779
+ "Riding the faders": "フェーダーを調整中",
780
+ "Finding the cue": "頭出し中",
775
781
  "{count} running · {label}": "{count} 件実行中 · {label}",
776
782
  "{label} didn't work · carrying on...": "{label} はうまくいきませんでした · 続けます...",
777
783
  "Can't reach the model. Trying again ({attempt}/{max})...": "モデルに接続できません。再試行しています({attempt}/{max})...",
@@ -969,4 +975,56 @@ export default {
969
975
  "Web search key": "Web 検索のキー",
970
976
  "Saved the {service} key. Web search goes through {provider}.": "{service} のキーを保存しました。Web 検索は {provider} を使います。",
971
977
  "Saved the {service} key, but web search still isn't ready. Run `/web status` to see why.": "{service} のキーを保存しましたが、Web 検索はまだ使えません。`/web status` で理由を確認してください。",
978
+ "Add an endpoint by its address": "アドレスを指定してエンドポイントを追加",
979
+ "Remove an endpoint and its key": "エンドポイントとそのキーを削除",
980
+ "ChatGPT sign-in or API key": "ChatGPT のサインインか API キー",
981
+ "ChatGPT subscription": "ChatGPT サブスクリプション",
982
+ "Sign in with ChatGPT in your browser": "ブラウザで ChatGPT にサインイン",
983
+ "Paste an OpenAI API key": "OpenAI の API キーを貼り付け",
984
+ "How do you want to use OpenAI?": "OpenAI をどの方法で使いますか?",
985
+ "Endpoints aren't available when Moondog is started this way.": "この方法で Moondog を起動したときはエンドポイントを使えません。",
986
+ "Use /endpoint, /endpoint add, or /endpoint remove <id>.": "/endpoint、/endpoint add、または /endpoint remove <id> を使ってください。",
987
+ "Type `/model <id>` to talk through one, or `/endpoint add` to add another.": "`/model <id>` で使うものを選ぶか、`/endpoint add` でもう一つ追加してください。",
988
+ "No endpoints yet. `/endpoint add` adds any service that speaks OpenAI's or Anthropic's API, by its address.": "まだエンドポイントがありません。`/endpoint add` で、OpenAI か Anthropic の API に対応したサービスをアドレスで追加できます。",
989
+ "Endpoints listed.": "エンドポイントを一覧にしました。",
990
+ "Saved {name}. Type `/model {id}` to pick one of its models.": "{name} を保存しました。`/model {id}` でそのモデルを選んでください。",
991
+ "Endpoint saved.": "エンドポイントを保存しました。",
992
+ "Removed {name} and its key.": "{name} とそのキーを削除しました。",
993
+ "Endpoint removed.": "エンドポイントを削除しました。",
994
+ "Add a model service by its address": "アドレスを指定してモデルサービスを追加",
995
+ "Whole songs on your Spotify devices": "Spotify のデバイスで曲をまるごと再生",
996
+ "30-second previews, played here": "30 秒のプレビューをここで再生",
997
+ "Whole songs through ncm-cli": "ncm-cli で曲をまるごと再生",
998
+ "NetEase Music": "NetEase Music",
999
+ "Set up ncm-cli first": "先に ncm-cli を設定",
1000
+ "Sign in to {provider}": "{provider} にサインイン",
1001
+ "Choose another model": "別のモデルを選ぶ",
1002
+ "Choose a model": "モデルを選ぶ",
1003
+ "Pick a provider and model, then sign in": "プロバイダーとモデルを選んでからサインイン",
1004
+ "Two things before we start: where I play your music, and the model I talk through.": "始める前に 2 つだけ。音楽をどこで流すかと、私が話すのに使うモデルです。",
1005
+ "One thing before we start: where I play your music.": "始める前に 1 つだけ。音楽をどこで流すかです。",
1006
+ "One thing before we start: the model I talk through.": "始める前に 1 つだけ。私が話すのに使うモデルです。",
1007
+ "Where should I play music?": "音楽はどこで流しますか?",
1008
+ "Which model should I talk through?": "どのモデルで話しますか?",
1009
+ "/service changes it any time.": "/service でいつでも変えられます。",
1010
+ "{model} is saved, but you're not signed in to {provider} yet.": "{model} は保存済みですが、まだ {provider} にサインインしていません。",
1011
+ "Sign in with ChatGPT, or use an API key from another provider. Your profile works without one.": "ChatGPT でサインインするか、別のプロバイダーの API キーを使ってください。プロフィールはモデルなしでも使えます。",
1012
+ "NetEase plays through its own command line tool. Run this in another terminal, then choose it again:": "NetEase は専用のコマンドラインツールで再生します。別のターミナルでこれを実行してから、もう一度選んでください:",
1013
+ "Welcome to the machine.": "Welcome to the machine。",
1014
+ "↑↓ ↵ choose · esc skip setup": "↑↓ ↵ 選択 · esc 設定をスキップ",
1015
+ "↑↓ choose · enter select · esc skip setup": "↑↓ 選択 · enter 決定 · esc 設定をスキップ",
1016
+ "Spotify it is. /spotify help shows how to connect your account.": "Spotify にしました。アカウントの接続方法は /spotify help で確認できます。",
1017
+ "{service} it is.": "{service} にしました。",
1018
+ "Choosing a music service isn't available when Moondog is started this way.": "この起動方法では音楽サービスを選べません。",
1019
+ "Use /service, or /service spotify, apple_music, or netease.": "/service、または /service spotify、apple_music、netease を使ってください。",
1020
+ "Music service unchanged.": "音楽サービスは変わっていません。",
1021
+ "NetEase Music plays through its own command line tool. Run this in another terminal, then choose it again with `/service`:\n\n```\n{command}\n```": "NetEase Music は専用のコマンドラインツールで再生します。別のターミナルでこれを実行してから、`/service` でもう一度選んでください:\n\n```\n{command}\n```",
1022
+ "NetEase needs ncm-cli first.": "NetEase には先に ncm-cli が必要です。",
1023
+ "Setup · music service": "設定 · 音楽サービス",
1024
+ "Setup · model": "設定 · モデル",
1025
+ "All set. /spotify help shows how to connect Spotify.": "準備できました。Spotify の接続方法は /spotify help で確認できます。",
1026
+ "All set. Say anything, or press Tab to look around.": "準備できました。なんでも話しかけてください。Tab で見て回ることもできます。",
1027
+ "Skipped. /service and /model are here when you want them.": "スキップしました。/service と /model はいつでも使えます。",
1028
+ "Saving your music service...": "音楽サービスを保存しています...",
1029
+ "Choose where Moondog plays music": "Moondog が音楽を流す場所を選ぶ",
972
1030
  };