This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
dsky.vimは、Bluesky (AT Protocol) APIと連携するためのVim/Neovimプラグインです。Denopsを使用してTypeScript (Deno)でAPIロジックを実装し、Vim scriptでUIとコマンドを提供します。
-
Vim script層 (
plugin/,autoload/,syntax/)- エントリーポイント:
plugin/dsky.vimでコマンドとマッピングを定義 - ランタイムヘルパー:
autoload/dsky/以下に機能別の関数を配置 - シンタックスハイライト:
syntax/dsky.vim
- エントリーポイント:
-
Denops層 (
denops/dsky/)- エントリーポイント:
main.tsがDenopsのディスパッチャーを定義 - APIモジュール:
api/以下にBluesky APIとの通信ロジック - UI/バッファ処理:
ui/buffer.ts - 共有定義:
types.ts,consts.ts
- エントリーポイント:
Vim command (:DSkyTimeline)
→ autoload/dsky.vim
→ denops#request('dsky', 'getTimeline', [...])
→ denops/dsky/main.ts dispatcher
→ api/feed.ts (API呼び出し)
→ api/proxy.ts (認証ヘッダー付与、トークン自動リフレッシュ)
→ api/server.ts (セッション管理)
" プラグインマネージャーでこのリポジトリを読み込んでから
:DSkyTimeline " タイムライン表示
:DSkyNotifications " 通知一覧表示
:DSkySay " 投稿バッファを開く
:DSkyNewSession " 新しいセッションを作成
:DSkyAuthorFeed <actor> " 特定ユーザーのフィードを表示(ハンドル補完あり)<Leader><Leader>- タイムラインをリロードo- 投稿内のURLを開くu- 投稿者のフィードを表示<Leader>f- 投稿にいいね
let g:dsky_id = 'your_bluesky_id'
let g:dsky_password = 'your_app_password'
let g:dsky_author_len = 16 " 表示する著者名の長さ
let g:dsky_timeline_limit = 40 " タイムラインの取得件数- セッション情報:
~/.config/dsky/session.json(Windows:%LOCALAPPDATA%\dsky\session.json) - ハンドルキャッシュ:
~/.config/dsky/handles.txt - セッショントークンはExpiredToken時に
proxy.tsが自動リフレッシュ
- 2スペースインデント
plugin/にコマンド定義、autoload/に実装を分離- グローバル変数は
g:dsky_プレフィックスを使用
- 2スペースインデント、セミコロンあり
- 機能ごとにモジュール分割 (例:
api/feed.ts,api/notification.ts) - Denopsは非同期処理が基本なので、ブロッキング呼び出しを避ける
unknownutilを使用して型安全性を確保
新しいAPI機能を追加する場合:
consts.tsにAPIエンドポイントURLを追加api/以下に新しいモジュールを作成main.tsのdispatcherに関数を登録autoload/dsky/api.vimからDenops経由で呼び出し- 必要に応じて
plugin/dsky.vimにコマンドを追加
- AT ProtocolのAPIエンドポイントは
consts.tsに集約 - 認証は
api/proxy.tsで自動的にAuthorizationヘッダーに付与 - 自動テストはなし - 手動でVim上で動作確認