mcpField
S
sealos-canvas

sealos-canvas

github.com/labringクラウド・DevOps83149 回インストール4 週間前に更新
リポジトリ

sealos-canvas について

sealos-canvas は、デプロイ済みの Sealos と Kubernetes リソースをローカルの HTML トポロジーキャンバスに表示する読み取り専用スキルです。Sealos でデプロイしたプロジェクトを対象とし、機密リソースデータを除外します。

主な機能

  1. 01デプロイ済みリソースのメタデータ取得
  2. 02ローカル HTML トポロジーキャンバスの生成
  3. 03リソース間の関係とイベントの表示
  4. 04Secret と ConfigMap データの除外
  5. 05一時的なループバックサーバーの起動

活用シーン

  1. 01デプロイ済み Sealos アプリのリソース構成の確認
  2. 02関連する Kubernetes イベントと状態の確認
  3. 03ローカル閲覧用のサニタイズ済みキャンバスの生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/labring/sealos-skills --skill sealos-canvas

インストール後、Claude Code で/sealos-canvasを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
assets/
canvas-template.html
evals/
evals.json
scripts/
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 をユーザーに返します。

厳守事項

  1. リソースのデプロイ、更新、再起動、パッチ適用、削除、適用は行わないでください。
  2. kubectl get や kubectl config view などの読み取り専用コマンドのみを使用してください。
  3. ~/.sealos/kubeconfig にある Sealos kubeconfig を使用してください。
  4. Secret のデータや ConfigMap の全内容を表示しないでください。
  5. プロジェクトに last_deploy を含む .sealos/state.json がない場合は停止し、まず /sealos-deploy でデプロイするようユーザーに伝えてください。
  6. 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 は、テーブルではなくトポロジーキャンバスのように見える必要があります。

  1. アプリ名、名前空間、デプロイ済みアプリの URL、生成時刻、ローカル UI のステータスを表示するトップバー。
  2. リソースカードを決定的なレイアウトで配置した、暗いドットグリッドのキャンバス。
  3. アプリ、Ingress、サービス、Pod、設定、シークレット、ボリュームのリソースカード。
  4. 関連するリソース間を結ぶ、破線または実線の SVG 接続線。
  5. 可能な場合、関連するカードにストリップとして配置された PVC/ボリュームの参照。
  6. 選択したリソースの詳細パネル。
  7. 関連する最近の Kubernetes イベントを表示するイベントパネル。
  8. 稼働中、スリープ中、警告、失敗のステータスカラー。
  9. 軽量なパン、ズーム、全体表示、リセットのコントロール。

テーマの抽出はベストエフォートで行います。簡単に検出できる場合は、ユーザーのリポジトリのアクセントカラー、フォント、角丸を再利用します。ただし、操作性と読みやすさは確保してください。

スクリプト

scripts/generate-canvas.mjs は決定的なエントリーポイントです。次の処理を行います。

  1. .sealos/state.json を読み込みます。
  2. ~/.sealos/kubeconfig と kubectl の存在を確認します。
  3. kubectl get を使って、ライブの名前空間リソースを読み取ります。
  4. app、nodes、edges、events、theme を含む、サニタイズ済みの canvasModel を構築します。
  5. assets/canvas-template.html を内部の .sealos/canvas/index.html キャッシュにレンダリングします。
  6. 一時的なローカル HTTP サーバーを起動し、local_url を出力します。

--no-serve は、サーバープロセスを実行したままにせずに HTML を生成する必要があるテストまたは CI チェックでのみ使用します。

コメント