sealos-canvas について
sealos-canvas は、デプロイ済みの Sealos と Kubernetes リソースをローカルの HTML トポロジーキャンバスに表示する読み取り専用スキルです。Sealos でデプロイしたプロジェクトを対象とし、機密リソースデータを除外します。
主な機能
- 01デプロイ済みリソースのメタデータ取得
- 02ローカル HTML トポロジーキャンバスの生成
- 03リソース間の関係とイベントの表示
- 04Secret と ConfigMap データの除外
- 05一時的なループバックサーバーの起動
活用シーン
- 01デプロイ済み Sealos アプリのリソース構成の確認
- 02関連する Kubernetes イベントと状態の確認
- 03ローカル閲覧用のサニタイズ済みキャンバスの生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ labring/ sealos-skills --skill sealos-canvasインストール後、Claude Code で/sealos-canvasを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlassets/canvas-template.htmlevals/evals.jsonscripts/generate-canvas.mjs詳細
Sealos Canvas
識別と検出
- 所有者:
sealos-canvas(/sealos-canvasおよびデプロイ済みリソースの表示、検査、可視化、トポロジー、または localhost キャンバスのリクエスト)。 - クラス: 下流への変更引き継ぎを伴わない
read-only-observation。 - カナリア:
CANVAS-DEPLOYED、CANVAS-READONLY、CANVAS-REDACT、CANVAS-SERVER-LIFETIME。
スコープと境界
.sealos/state.json の last_deploy、~/.sealos/kubeconfig、およびライブ読み取りアクセスが必要です。kubectl get や kubectl config view などの読み取り専用コマンドのみを使用してください。デプロイ、更新、再起動、パッチ適用、削除、適用は行わないでください。サニタイズしたリソースメタデータを .sealos/canvas/index.html にレンダリングし、正確なローカル URL/キャッシュとサーバーのライフタイム契約を返します。
リスクと確認
生成処理の詳細より前に、読み取り専用の境界、Sealos kubeconfig のスコープ、Secret/ConfigMap のサニタイズについて明示してください。すべての結果で Secret.data と ConfigMap.data を省略してください。state または kubeconfig が存在しない場合は、代替の生成を行わずリクエストを停止します。Secret のデータ、ConfigMap の全内容、kubeconfig の内容、認証情報は決して公開しないでください。
ライフサイクルのワークフロー
リクエストごとに、プロジェクトを特定し、デプロイ状態と kubeconfig を確認して、単一のジェネレーターを実行し、ループバック UI を開いて、サニタイズ済みの件数を報告します。一時的な 127.0.0.1 サーバーは現在のプロセスの実行中のみ稼働し、プロセスの終了時または SIGINT/SIGTERM の受信時に停止します。リクエストを終了する前にサーバーを停止してください。
段階的な情報開示
デプロイ状態と読み取り専用のカナリアを通過した後にのみ、scripts/generate-canvas.mjs と、その管理対象であるテンプレート/参照パスを読み込んでください。このエントリからデプロイ変更ヘルパーを読み込んだり呼び出したりしないでください。
出力、停止、エラーの状態
success:local_url、html_path、アプリ URL、ノード数、エッジ数、サニタイズ済み HTML/モデル、サーバーのライフタイムを示す証拠。stopped:not_deployed、kubeconfig_missing、kubectl_missing、または読み取りアクセス不可。正確で安全な次のアクション、server_lifetime.status: not_started、HTML/サーバーへのフォールバックなしを含めます。error:生成またはサーバー起動の経路、サニタイズ済みの診断カテゴリ、server_lifetime、秘密情報と kubeconfig を伏せた復旧アクション。
--no-serve を指定した場合の成功時は local_url: null と server_lifetime.status: not_started を返します。通常の成功時は、local_url と server_lifetime.status: running を返し、シャットダウン条件は process exit or SIGINT/SIGTERM です。
引き継ぎ
Canvas は、target: none、inputArtifact: .sealos/state.json last_deploy plus sanitized live summaries、allowedAction: serve a temporary read-only loopback view、failureReturn: sanitized read-only generation/server diagnostic、responseOwner: sealos-canvas を含む型付きの直接結果タプルを受け取ります。デプロイの応答には返されたリンクを含めてもかまいませんが、Canvas に変更権限を付与してはいけません。
検証
generate-canvas.mjs --no-serve、Canvas の契約テスト、canvas evals、ベースラインケース canvas-positive-read-only-local-url および canvas-violating-missing-state-or-mutation を使用してください。127.0.0.1、local_url、html_path、server_lifetime、読み取り専用コマンド、サニタイズ済みの出力、および明示的な「サーバーを停止」する動作を検証してください。
概要
現在のリポジトリにあるデプロイ済み Sealos リソースを、ローカルでホストされる HTML キャンバスとしてレンダリングします。このスキルは表示専用です。.sealos/state.json と Kubernetes リソースを読み取り、一時的な 127.0.0.1 UI サーバーを起動して、ローカル URL をユーザーに返します。
厳守事項
- リソースのデプロイ、更新、再起動、パッチ適用、削除、適用は行わないでください。
kubectl getやkubectl config viewなどの読み取り専用コマンドのみを使用してください。~/.sealos/kubeconfigにある Sealos kubeconfig を使用してください。- Secret のデータや ConfigMap の全内容を表示しないでください。
- プロジェクトに
last_deployを含む.sealos/state.jsonがない場合は停止し、まず/sealos-deployでデプロイするようユーザーに伝えてください。 - kubeconfig またはライブリソースへのアクセスが利用できない場合は、スクリプトのメッセージを報告して停止してください。
ワークフロー
1. プロジェクトを解決する
ユーザーがローカルパスを指定しない限り、現在の作業ディレクトリを使用します。
WORK_DIR="$(pwd)"
出力を生成する前に、これが目的のリポジトリであることを確認します。
2. ローカルキャンバス UI を起動する
次を実行します。
node "<SKILL_DIR>/scripts/generate-canvas.mjs" --work-dir "$WORK_DIR"
ユーザーがキャンバスを表示している間、このプロセスを実行したままにします。スクリプトはローカルサーバーの起動後、標準出力に JSON を書き込みます。
ok が false の場合は、message をユーザーに表示してフローを終了します。フォールバック検出を実行したり、デプロイしたり、ほかの成果物を作成したりしないでください。
ok が true の場合は、local_url を主な出力として使用します。
3. ローカル URL を開く
ブラウザーで返された URL を開きます。
http://127.0.0.1:<port>/index.html
続いて、次の情報を要約します。
- ローカル UI の URL
- アプリの URL
- ノード数
- エッジ数
ユーザーがページの表示を終えたとき、または現在のタスクが終了したときに、サーバープロセスを停止します。
出力仕様
成功時:
{
"ok": true,
"local_url": "http://127.0.0.1:63220/index.html",
"html_path": "/abs/path/.sealos/canvas/index.html",
"node_count": 5,
"edge_count": 4,
"app_url": "https://example.sealos.run"
}
停止条件:
{
"ok": false,
"reason": "not_deployed",
"message": "This project has not been deployed by Sealos Skills yet. Run /sealos-deploy first, then run /sealos-canvas again."
}
ビジュアルの目標
ローカルでホストされる UI は、テーブルではなくトポロジーキャンバスのように見える必要があります。
- アプリ名、名前空間、デプロイ済みアプリの URL、生成時刻、ローカル UI のステータスを表示するトップバー。
- リソースカードを決定的なレイアウトで配置した、暗いドットグリッドのキャンバス。
- アプリ、Ingress、サービス、Pod、設定、シークレット、ボリュームのリソースカード。
- 関連するリソース間を結ぶ、破線または実線の SVG 接続線。
- 可能な場合、関連するカードにストリップとして配置された PVC/ボリュームの参照。
- 選択したリソースの詳細パネル。
- 関連する最近の Kubernetes イベントを表示するイベントパネル。
- 稼働中、スリープ中、警告、失敗のステータスカラー。
- 軽量なパン、ズーム、全体表示、リセットのコントロール。
テーマの抽出はベストエフォートで行います。簡単に検出できる場合は、ユーザーのリポジトリのアクセントカラー、フォント、角丸を再利用します。ただし、操作性と読みやすさは確保してください。
スクリプト
scripts/generate-canvas.mjs は決定的なエントリーポイントです。次の処理を行います。
.sealos/state.jsonを読み込みます。~/.sealos/kubeconfigとkubectlの存在を確認します。kubectl getを使って、ライブの名前空間リソースを読み取ります。app、nodes、edges、events、themeを含む、サニタイズ済みのcanvasModelを構築します。assets/canvas-template.htmlを内部の.sealos/canvas/index.htmlキャッシュにレンダリングします。- 一時的なローカル HTTP サーバーを起動し、
local_urlを出力します。
--no-serve は、サーバープロセスを実行したままにせずに HTML を生成する必要があるテストまたは CI チェックでのみ使用します。