ライブとヘッドレス
呼び出しのたびに、サーバーは拡張機能が ~/.erd-editor/ide/ に置くロックファイルを通じて、ドキュメントを保持している VS Code のウィンドウを探します。
何が見つかるかによって、編集の行き先が決まります。
| 見つかったもの | 編集の動作 |
|---|---|
| ワークスペースにドキュメントを含むか、ドキュメントを開いているウィンドウ | ライブ。 必要に応じて ERD Editor でドキュメントを開き、編集セッションに参加して、そこで変更を適用します。編集はすぐに表示され、エージェントが erd_save を呼び出すかユーザーが保存するまで未保存のままです。 |
| ウィンドウなし | ヘッドレス。 ファイルを読み込み、変更を適用して、ファイルを置き換えます。erd_save ですることはありません。 |
| ハブがオフのウィンドウ | 拒否。 読み取りはディスクから引き続き行えます。開いているエディタの下でファイルに書き込んだ変更は次の保存で上書きされてしまうため、サーバーは何も書き込みません。 |
編集の結果には実行したモード live または headless が示され、拒否された編集にはその理由が示されます。
検索は呼び出しのたびにやり直されるため、ウィンドウを開いたり閉じたりすると、次の呼び出しもそれに合わせて切り替わります。
1 つのドキュメントへの呼び出しは、サーバーに届いた順に 1 つずつ実行されます。異なるドキュメントへの呼び出しは並行して実行されます。
ライブ
エージェントは、共同編集の参加者がもう 1 人増えたかのようにエディタに加わります。 エージェントの編集はドキュメントを開いているすべてのエディタにすぐに届き、編集中のテーブルとセルには、共同編集の参加者と同じようにエージェントのフォーカスが描画されます。focusTracker を参照してください。
読み取りでエディタが開くことはありません。編集は、ドキュメントがまだ開かれていなければ ERD Editor で開きます。
保存
エージェントの編集はユーザー自身の編集と同じようにタブを未保存の状態にし、ドキュメントが保存されたときにだけディスクに書き込まれます。
erd_save は、VS Code 自身の保存コマンドと同じように VS Code を通じて保存します。代わりにユーザーが Ctrl + S (Windows/Linux) または ⌘ + S (Mac) で保存することもできます。
すべての編集が届いたことをエディタが確認できなかった場合や、ディスク上のファイルが変更されたなどの理由で VS Code がタブを未保存のままにした場合、erd_save は notSaved で拒否されます。
エージェントの未保存の編集が残ったままエディタを閉じると、ほかの未保存の変更と同じように、保存するかどうかを尋ねられます。 その後のエージェントの次の呼び出しには、エディタが閉じる前に保存された場合に限り編集がファイルに入っている、という注記が付きます。
Undo
erd_undo はエージェントが行った最後の編集を元に戻し、ユーザーの編集は元に戻しません。erd_redo はそれを再び適用します。
エディタ自身の Undo は逆に働きます。ほかのエディタから届いた変更は自分の履歴に記録されないため、ユーザーの編集を元に戻し、エージェントの編集は元に戻しません。
いくつかの編集は、エディタに Undo の項目を作りません。erd_set_show 以外の設定のツールと erd_resize_memo です。ドキュメントがすでに持っている値を設定する編集も、何も変えないため項目を作りません。
erd_undo はこれらを飛ばし、結果にその名前を示します。
エージェントの Undo の履歴は、次の場合に終わり、結果に注記が付きます。
- エージェントがドキュメントに再び参加したとき。例えば、エディタがエージェントをドキュメントから切り離した後です。
- ウィンドウが終了し、エージェントがディスク上のファイルの編集を続けるとき。
- エージェントがディスク上で編集していたドキュメントを、ウィンドウが引き継いだとき。
また、エージェントが 30 分間呼び出していないドキュメントはサーバーが閉じ、Undo の履歴もそれとともに、注記なしで失われます。
ウィンドウがなくなったとき
ウィンドウがドキュメントを保持している間、サーバーが自分からファイルの編集に切り替えることはありません。 接続が切れた場合は再接続します。ウィンドウが終了したときにだけファイルを編集し、そのことを結果に示します。
動作はしているもののロックファイルがなくなったウィンドウは、編集を hubGone で拒否します。そのウィンドウを再読み込みするか、閉じてエージェントがファイルを直接編集できるようにしてください。
ウィンドウに届かない読み取りは代わりにディスク上のファイルを読み、エディタでまだ保存されていない編集は含まれない、という注記を付けます。
ヘッドレス
ドキュメントを保持しているウィンドウがない場合、各編集はファイルを読み込み、変更を適用して、ファイルに書き戻します。
書き込みはドキュメントの隣にある .<name>.<id>.tmp という名前の一時ファイルに対して行われ、その後そのファイルがドキュメントを置き換えるため、ドキュメントが書きかけの状態で残ることはありません。
最後の手順の前に、サーバーは呼び出しの間にディスク上のファイルが変更されたかどうかを確認します。
変更されていた場合は何も書き込まず、ファイルを読み込み直して、呼び出しを conflict で拒否します。エージェントはもう一度呼び出します。
2 つの呼び出しの間に変更されたファイルは単に読み込み直され、それ以前のエージェントの Undo の履歴は破棄されます。
エージェントがディスク上で編集している間に VS Code のウィンドウがそのドキュメントを扱い始めると、その 1 回の編集は hubAppeared で拒否され、何も書き込まれません。次の呼び出しはウィンドウを通じて編集します。
拒否
ウィンドウは、ハブがオフでもロックファイルを保持します。dineug.erd-editor.agentHub.enabled がオフの場合、ワークスペースが信頼されていない場合、ハブの起動に失敗した場合です。
そのようなドキュメントへの編集は blocked で拒否されます。ファイルに書き込んだ変更は、開いているエディタが次に保存するときに上書きしてしまうためです。
読み取りは、ディスク上のファイルから引き続き行えます。
エージェントが編集できるようにするには、ワークスペースを信頼して設定をオンにするか、ウィンドウを再読み込みします。
ドキュメント
ドキュメントは path で指定します。絶対パス、またはサーバーの作業ディレクトリからの相対パスです。
- 新しいドキュメントは
.erd.jsonです。erd_open_documentにcreateを付けるとファイルを作成し、拡張子のない名前には.erd.jsonを付けます。 - 既存の
.erd、.vuerd、.vuerd.jsonファイルも開けます。それ以外の拡張子のパスはinvalidPathで拒否されます。 - マージコンフリクトのマーカーが残ったファイルなど、エディタが読めるドキュメントではないファイルは
invalidDocumentで拒否され、そのまま残されます。空のダイアグラムとして読み込まれて書き戻されることはありません。
エージェントはツールを通じてのみドキュメントを変更し、ファイルを自分で書き換えないよう指示されています。
erd_list_documents は、ドキュメントを path、open、active、dirty、readonly とともに一覧表示します。
作業ディレクトリを扱う VS Code のウィンドウがあればそのウィンドウのドキュメントを、なければ作業ディレクトリ以下の ERD ファイルを一覧表示します。