# Canvasにコンテンツを追加する

参考のPDF、問題のスクリーンショット、アプリへのリンク、調査メモは、同じ作業に参加できます。
Nodeを一つずつ手作業で作る必要はありません。システムからファイルをドラッグするか、Canvasに直接貼り付けられます。

結果は、内容と貼り付け先によって異なります。Canvasでは、貼り付けによってNodesを作成するか、既存のNodesを表示します。
エディター、Terminal、CodingAgent、WebBrowserのページ内では、その環境への通常の貼り付けになります。

## システムからファイルをドラッグする

1. 追加先のWorkspaceを開きます。
2. Finder、Explorerなどのファイルマネージャーから、一つ以上のファイルをCanvasへドラッグします。
3. 配置したい場所でドロップします。複数のファイルは格子状に並び、まとめて選択されます。
4. 結果の概要で、追加されたNodes、すでに存在する参照元、スキップされた項目を確認します。

ファイルは**元の場所に残ります**。Kavorはインポート、コピー、移動を行いません。一つのWorkspace内で同じ参照元を表すNodeは最大一つです。
同じ操作を繰り返すと、既存のNodeが選択・表示されます。複製されたり、位置が変わったりすることはありません。

種類は参照元に応じて決まります。

- そのWorkspaceに属するSpecificationは、Specificationになります。
- 図の形式のファイルは、SVGを除き[Diagram](./diagrams.md)になります。
- それ以外は[File](./file.md)になります。通常の`.svg`はFileのままです。Diagramとして扱いたい場合は、明示的に依頼してください。

フォルダーは追加されません。ファイルと一緒にフォルダーをドラッグした場合、Kavorはスキップした項目を知らせ、有効なファイルは追加します。
読み取れないファイルも、理由とともに結果の概要に表示されます。

TerminalやCodingAgentの入力欄にドラッグすると、そのセッションにパスが挿入され、CanvasにNodeは作られません。
FilesとSpecsパネル内のドラッグ操作には、それぞれのパネルの動作が適用されます。

### Workspace外のファイル

プロジェクトのフォルダー内に置かずに、ファイルを参照できます。Nodeには絶対パスと`Outside this Workspace`が表示されます。
Workspace内のファイルは、ルートからの相対パスで表示されます。

外部ファイルの変更は表示に随時反映され、参照元が削除されるとNodeは利用不可を示します。変更のたびにReloadを使う必要はありません。
未保存のローカル編集がある場合は、内容を置き換える前に競合を確認してください。

外部ファイルへの参照を作っても、そのファイルがリポジトリの一部になるわけではありません。
プロジェクトの共有やマシンの変更時には、想定したパスに参照元が引き続き存在するか確認してください。

## ファイル・画像・リンク・テキストを貼り付ける

Canvasにフォーカスを置き、macOSでは`⌘V`、Windows/Linuxでは`Ctrl+V`を使います。
コンテキストメニューのPasteは、メニューを開いた位置に貼り付けます。キーボード操作ではCanvas内のポインター位置、
または表示領域の中央を使い、繰り返し貼り付けると位置が少しずつずれます。

クリップボードに複数の表現がある場合、Kavorは次の順で最初に該当するものを使います。

| コピーした内容 | Canvasでの結果 |
| --- | --- |
| Kavorでコピーまたは切り取ったNodesのグラフ | 以下のルールに従い、選択内容を貼り付けます。 |
| ファイルマネージャーでコピーしたファイル | ドラッグ＆ドロップと同様に、ファイルを参照します。 |
| 元のファイルがないスクリーンショットなどの画像データ | WorkspaceにPNGを保存し、そのFile Nodeを作成します。 |
| 単独のURL | そのアドレスを開いたWebBrowserを作成します。 |
| テキスト | Markdownとして解釈せず、文字どおりのテキストを持つSticky Noteを作成します。 |

Nodesを作るのではなくセッションに入力したい場合は、そのセッション内に貼り付けてください。
ハーネスの入力欄へのファイルや画像の貼り付けは、[Terminalの手順](./terminal.md#セッション入力にファイルと画像を貼り付ける)を参照してください。

### 貼り付けた画像の保存先

画像データにはCanvasが参照できるファイルがまだないため、参照だけを作るルールの例外となります。
Kavorは**最初のDocumentation root**の`assets/`フォルダーにPNGを保存します。既定のルートが`docs/`なら、次のようになります。

```text
docs/assets/pasted-image-20261030-093000.png
```

名前には日時が使われ、すでに存在する場合は数字の接尾辞が付きます。既存のファイルは上書きされません。
ファイルとNodeの両方が作成されてから、実際の保存先が通知されます。

クリップボードの画像データの上限は**20 MB**です。保存に失敗した場合は画像の失敗として報告され、
黙ってSticky Noteに変わることはありません。この上限は、後述の表示上限とは別です。

## Nodesをコピー・切り取り・貼り付けする

Specification、Builder、Reviewer、Sticky Noteなど、うまく機能しているループの再利用に使えます。

1. エディターやセッションの外にフォーカスを置き、一緒に扱うNodesを選択します。
2. コピーには`⌘C` / `Ctrl+C`、切り取りには`⌘X` / `Ctrl+X`を使います。コンテキストメニューにも同じ操作があります。
3. 同じCanvasにとどまるか、移動先のWorkspaceを開きます。別のKavorウィンドウでも構いません。
4. ポインターを配置して貼り付けます。作業を再開する前に、参加者とConnectionsを確認してください。

**両方の端点が選択されているConnections**だけがキャプチャに含まれます。Connectionだけを選択してもNodesは含まれず、
選択外の参加者への接続もコピーされません。

コピーでは新しい識別情報が作られ、相対配置は保たれます。同じコピーを複数回貼り付けられます。
同じCanvas内の切り取りは、識別情報とセッションを保ったままグループを移動するだけです。
Workspace間の切り取りでは、Nodesとグループ内部のConnectionsを移動し、元のWorkspaceにあったグループ外へのConnectionsを削除します。
切り取りは成功後に消費されます。貼り付け前なら、元のCanvasで`Esc`を押してキャンセルできます。

### 各Nodeに引き継がれるもの

| Node | 保持されるもの・複製されないもの |
| --- | --- |
| Sticky Note | 内容と色。 |
| FileとDiagram | 同じ参照元への参照であり、バイトのコピーではありません。参照元に対応するNodeがすでにあれば再利用します。 |
| Specification | 所有元のWorkspaceでは再利用され、別のWorkspaceではFileになります。ライフサイクルは元の所有元に残ります。 |
| Terminal | シェルの設定と開く設定。バッファや履歴は含みません。Workspace間の移動では、元のセッションを閉じます。 |
| CodingAgent | provider、モデル、各種設定。会話、メッセージ、分離されたworktreeは含みません。移動時は元のセッションを閉じるため、移動先のルートと設定を確認してください。 |
| Trigger | コピーは一時停止状態で作られ、発火履歴は含みません。切り取りは設定を保持しますが、未完了の発火がある場合は移動できません。 |
| WebBrowser | タブ。ポップアップ、ダウンロード、観察結果は含みません。移動先ではページが再作成されます。 |

ConnectionsのGuardrailsとパラメーターは、各ペアのルールに従って引き継がれます。
Specificationが別のWorkspaceでFileになると、その読み取り制限は`file_read_only`に変わり、Diagramは`diagram_read_only`を保持します。
新しいタスクを始める前に、移動先の制限を確認してください。

グラフのクリップボードは、現在のKavorの実行中だけ有効です。別のコピーで置き換えたり、アプリを再起動したりすると、キャプチャは無効になります。
それによって未完了の切り取り元が削除されることはありません。バックアップでも、マシン間のエクスポートでもありません。

一つのキャプチャの上限は、**512 Nodes、2,048 Connections、16 MiB**です。貼り付け前に切り取った選択内容が変わったり、
参照元がなくなったりした場合、操作は部分的に貼り付けることなく拒否されます。元の状態を確認して、再度キャプチャしてください。

## ファイルのプレビューを理解する

リッチなプレビューがなくても、Nodeは実際の参照元を表し続けます。

- **UTF-8テキスト：** エディター、利用可能な場合のプレビュー、保存、競合処理。
- **画像：** PNG、JPEG、GIF、WebP、BMP、ICO、AVIF、SVG。File内のSVGは画像として表示され、アプリのインターフェースのマークアップにはなりません。
- **PDF：** Canvasでページを表示できます。フォーム編集や注釈機能はなく、PDFのJavaScriptも実行しません。
- **図：** 表示と編集の詳細は[Diagramガイド](./diagrams.md)を参照してください。
- **その他の形式：** システムから取得できるアイコンやサムネイル、名前、種類、サイズ、更新日時、パスを持つカードです。
  音声と動画もこのカードで表示され、埋め込み再生はありません。

画像とPDFの上限は**1ファイルあたり32 MiB**で、画像には**16メガピクセル**の上限もあります。
未対応の形式、上限超過、プレビューの失敗によって、存在する参照元が「ファイルなし」になることはありません。
カードに状況が示され、利用できる操作は残ります。`Retry`は再試行が役立つ場合に表示され、サイズや形式の制限を取り除くものではありません。

**Open**で既定のアプリから開き、**Reveal in Finder**またはシステムに応じた操作で参照元の場所を表示し、**Copy path**でパスをコピーします。
サムネイルの提供はシステムに依存します。macOSやWindowsから取得できる場合があり、取得できない場合もアイコンでファイルを識別できます。

## Nodesとファイルを区別して取り消す

コンテンツの追加やグラフの貼り付けは、操作ごとにCanvasの履歴に一件記録されます。
Undoは、その操作で作成したNodesを取り消します。参照しただけの元ファイルや、すでに存在していたNodeは削除しません。Redoで結果を復元できます。

画像データの貼り付け時にKavor自身が保存した画像は異なります。UndoはそのPNGも削除し、Redoは復元します。
その後に画像を編集したり、競合する参照を作成したりすると、後続の作業を削除する代わりにUndoが拒否される場合があります。
理由を確認し、Undoを無条件のファイル削除と考えないでください。

Workspace間の切り取りでは、Undoで両側を復元する必要があります。その後の競合する変更によって操作できない場合も、
グラフの半分だけを復元することはありません。

## CodingAgentとコンテンツを使う

ドロップ、貼り付け、グラフのクリップボード操作は人間の操作です。CodingAgentはパスから参照元を追加し、あなたのクリップボードを操作しません。
資料を追加したら、作業に参加させるものだけを接続してください。

最初に読んでもらう場合は、追加したNodesをCodingAgentに伝え、到達可能にしてください。
認証情報を含めたり、暗黙に変更を許可したりしないでください。

```prompt
到達可能なグラフ内で私が指定したNodesを確認してください。
正規の情報源、視覚的な参照、ライブページ、作業メモを区別してください。
私が説明したタスクに資料がどう役立つか説明し、読めなかったものを示してください。
ファイルの変更、コマンドの実行、Connectionsの作成はせず、まず読み取った内容を提示してください。
```

**期待する結果：** 実際に参照した資料の短い見取り図と、明示された不足点が得られます。
プレビューがあっても、ハーネスがすべての形式を解釈できるとは限りません。Nodeの追加は、グラフ外の内容へのアクセスを許可しません。

## 次に読む

- 参照を使い捨てのコピーにせず、[Fileをコンテキストとスコープに使う](./file.md)。
- CodingAgentと[Diagramを作成・レビューする](./diagrams.md)。
- リソースを接続する前に[Connectionsのマトリクス](./connections.md)を確認する。
- [エージェントからCanvasがどう見えるか](./coding-agents-and-canvas.md)を理解する。
