tuilisted
Install: claude install-skill iroha924/gleanery
# 端末の画面を変更する
`gleanery dashboard` は Ink で描く端末の画面で、**読むだけ**である。
## Triggers
- `server/src/tui/` の画面・キー操作・表示を変更する
- 画面が読むもの(`server/src/sessions.ts`、`server/src/tui/data.ts`)を変更する
- CLI の出力の形(`server/src/tui/view.ts`。見出し・節・字下げ・締めの行)を変更する
- アイコン(`server/src/tui/icons.ts`)、Markdown の描画(`markdown.ts`)、CLI の bundle(`scripts/bundle-cli.ts`)を変更する
## Does not trigger
- MCP・他の CLI command・取り込みだけを変更する
- DB schema や接続の役割を変更する。その場合は `knowledge-schema`
- バージョンを上げて届ける。その場合は `plugin-release`(TUI は CLI の一部なので release の種別は `plugin`)
## 依存について知っておくこと
記憶で API を選ばない。バージョンは `server/package.json` が正本で、API は `server/node_modules/<package>` の型定義(`.d.ts`)を読む。
下の事実はバージョンを上げたときに崩れうるので、上げたら型定義で確かめ直す。
| 依存 | 規約に効く事実 |
|---|---|
| ink | `useWindowSize`・`useInput(handler, { isActive })`・`render(..., { alternateScreen })`を使っている。開発時だけ `react-devtools-core` と `ws` を動的 import する(bundle で差し替える理由) |
| @inkjs/ui | `TextInput`(`onSubmit`・`isDisabled`)を使っている。読み込み中は自前の `Twinkle`(`icons.ts` の `TWINKLE`) |
| ink-scroll-view | `ScrollView` の ref の `scrollTo`(`getBottomOffset` までに収める)/ `scrollToTop` / `scrollToBottom` で動かす。`scrollBy` は本文の終わりで止まらない |
| ink-link | 型が `children` を props の必須にしている |
| marked | **marked-terminal の peer(`<16`)の外のバージョンを、持ち主の決定で入れている** |
| marked-terminal | 型を同梱しない。`@types/marked-terminal` は古い marked を引き込むので入れず、`marked-terminal.d.ts` で宣言する |
| ink-testing-library | 描画と `stdin.write` の入力が Ink の今のバージョンで動く。動かなくなったら `render` に偽の stdout を渡す形へ替える |
## 置き場所
| ファイル | 持つもの |
|---|---|
| `tui/tui