Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/0-requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ Claude の親が利用上限で止まり、拒否が解除予定を名指して

### アカウントのニックネーム(#383)

任意のニックネームを設定・保存できる。普段の呼びかけはニックネームで、元の名前はその呼び名がどのアカウントかを認識する情報として表示・通信する。未設定・空欄・旧設定では名前を一度だけ使う。同一性は account id と接続 id のままである。アカウント表示は呼称と名前の二段、会話の話し手欄は両方を表示する。宛先規則は [部屋](1-room.md#ニックネームと元の名前383)、保存と稼働席は [アカウント](3-accounts.md#ニックネーム383) に定義する。
任意のニックネームを設定・保存できる。普段の呼びかけはニックネームで、元の名前はその呼び名がどのアカウントかを認識する情報として表示・通信する。未設定・空欄・旧設定では名前を一度だけ使う。同一性は account id と接続 id のままである。アカウント表示は呼称と名前の二段、会話の話し手欄は新着・履歴とも投稿時の呼称だけを表示する(#391)。元の名前の保存・通信と AI の認識用メタデータは維持する。宛先規則は [部屋](1-room.md#ニックネームと元の名前383)、保存と稼働席は [アカウント](3-accounts.md#ニックネーム383) に定義する。

## 投稿結果の時刻と利用量(#385)

Expand Down
2 changes: 1 addition & 1 deletion docs/1-room.md
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@ liplus-desktop の `stream_parser.rs` および `spawn_stream_pty` / `spawn_stre

この文書の「宛先の名前」「@名前」は、設定された nickname(前後空白を除く)を意味する。未設定時だけ name にフォールバックする。設定済みの元の名前を別名として照合しない。宛先候補は名簿だけから作り、同じ呼称の候補は一つにまとめ「同名の全参加者宛て」と明示する。従来の衝突契約を維持し、一つの呼称はその呼称の全参加者を宛てる。一人を選んだり、別の呼称へ自動的に変えたりしない。名簿にない @文字列は本文に残り、明示 to の不在呼称は誰も指名しない。

名簿の name・投稿の speaker・札の from は宛先呼称である。任意の full_name は投稿時の元の名前のスナップショットで、表示と AI の認識用であり宛先に使わない。画面・端末の札・MCP の履歴と未読の返却がこの対応を保持する。to は従来どおり呼称文字列を保存し、後の改名で古い投稿の宛先や話し手を変更しない。既存ログに full_name がなくても読め、名前を一度だけ表示する。
名簿の name・投稿の speaker・札の from は宛先呼称である。任意の full_name は投稿時の元の名前のスナップショットで、AI の認識用であり宛先に使わない。チャット欄の話し手は新着・履歴とも投稿時の speaker だけを表示し、元の名前を併記しない(#391)。端末の札・MCP の履歴と未読の返却は full_name を保持する。to は従来どおり呼称文字列を保存し、後の改名で古い投稿の宛先や話し手を変更しない。既存ログに full_name がなくても読め、名前を一度だけ表示する。

稼働席の改名は全 topic の名簿へ反映し、接続と floor の既読位置は維持する。再接続は保存設定の呼称を採用する。sidecar は identity フレームで現在の呼称と元の名前を受け、initialize は標準 MCP SDK の処理で起動時の呼称・元の名前を示す。tools/list・各 tool 結果に現在の自己情報を出す。宛先指定のある投稿では、各端末への札の you / your_full_name は受け手の現在の対応を示し、起動時の自己呼称を更新する。部屋全体への投稿(to 欠落または空)では両項目を省く。from / full_name は話し手の対応であり、you は受け手である。制限中に保持する投稿では話し手の両表記を保持済み speaker 文字列にまとめる。追加情報は任意項目で、未知フィールド・フレームを無視する既存互換方針を使う。

Expand Down
2 changes: 1 addition & 1 deletion docs/2-screen.md
Original file line number Diff line number Diff line change
Expand Up @@ -747,4 +747,4 @@ DOM の描画は床として残す。WebGL が使えない環境では読み込

### ニックネーム表示(#383)

設定の基本欄に任意の「ニックネーム」を置く。参加者・アカウント行は上段に呼称、下段に元の名前を表示する。未設定では名前を一度だけ表示する。会話の話し手欄は「呼称 (元の名前)」を表示し、投稿の full_name を使うため改名・切断・アカウント削除でも過去の対応を失わない。full_name のない旧投稿は speaker だけを表示する。本人の右寄せ行の話し手欄を持たない既存表示は維持する。宛先候補は呼称だけを挿入し、衝突する候補には全参加者宛てであることを示す。
設定の基本欄に任意の「ニックネーム」を置く。参加者・アカウント行は上段に呼称、下段に元の名前を表示する。未設定では名前を一度だけ表示する。会話の話し手欄は新着・履歴とも投稿時の speaker(呼称、未設定なら名前)だけを表示する(#391)。改名・切断・アカウント削除でも過去の話し手を変更しない。投稿の full_name は元の名前のメタデータとして保持し、full_name のない旧投稿も speaker だけを表示する。本人の右寄せ行の話し手欄を持たない既存表示は維持する。宛先候補は呼称だけを挿入し、衝突する候補には全参加者宛てであることを示す。
6 changes: 3 additions & 3 deletions sidecar/test/nickname-ui.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ function header(line) {
const article = context.roomLine({speaker:"Luna", full_name:"Codex Luna", account:"a", app:false, colour:"blue", to:[], ts:"t", stamp:"t", content:"hi", past:true, mine:false, ...line});
return article.children.flatMap(e=>e.children).find(e=>e.className === "speaker")?.textContent;
}
test("conversation headers retain nickname and original-name snapshot after account changes", () => {
assert.equal(header({}), "Luna (Codex Luna)");
assert.equal(header({speaker:"Moon", full_name:"New Name", past:false}), "Moon (New Name)");
test("conversation headers show the posting nickname in history and new messages", () => {
assert.equal(header({}), "Luna");
assert.equal(header({speaker:"Moon", full_name:"New Name", past:false}), "Moon");
assert.equal(header({full_name:undefined}), "Luna");
assert.equal(header({speaker:"Codex Luna", full_name:"Codex Luna"}), "Codex Luna");
assert.equal(accountName({name:"Codex Luna", nickname:" Luna "}), "Luna");
Expand Down
4 changes: 2 additions & 2 deletions src/main.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { accountName, speakerLabel } from "./account-name";
import { accountName } from "./account-name";
import { Terminal } from "@xterm/xterm";
import { FitAddon } from "@xterm/addon-fit";
import { WebglAddon } from "@xterm/addon-webgl";
Expand Down Expand Up @@ -725,7 +725,7 @@ function roomLine(line: {
article.appendChild(avatar(line.speaker, line.account, line.app));
const speaker = document.createElement("span");
speaker.className = "speaker";
speaker.textContent = speakerLabel(line.speaker, line.full_name);
speaker.textContent = line.speaker;
head.appendChild(speaker);
}

Expand Down
Loading