Skip to content

プラグインの作り方

プラグインとは、以下を行う任意のプロセスです:

  1. RabbitMQに接続し、datacore.resource-lifecycle トピックエクスチェンジ上のルーティングキー pipeline.step.dispatched.<your-plugin-id> にキューをバインドする。
  2. 各メッセージを受け取るたびに処理を行い、コールバックする: POST {CORE_API_URL}/api/v1/internal/artifacts/{resource_id}
  3. それ以外は何もしません。この1つのコールバックを除いてコアを同期的に呼び出すことはなく、他の プラグインと直接やり取りすることもありません (プラグインの分離)。

同梱されている3つのサンプル (plugins/markdown-summarizerplugins/vector-embedderplugins/github-profile-scanner) はそれぞれ約100〜150行のTypeScriptで、最良のリファレンスです — 作ろうとしているものに最も近いものをコピーしてください。

受け取るディスパッチメッセージ

json
{
  "event": "PIPELINE_STEP_DISPATCHED",
  "resource_id": "uuid",
  "occurred_at": "ISO-8601",
  "payload": {
    "pipeline_id": "uuid",
    "step_position": 0,
    "plugin_id": "your-plugin-id",
    "attempt_count": 0,
    "source_uri": "s3://bucket/key or https://...",
    "upstream_artifacts": [{ "type": "SUMMARY", "external_ref": "...", "producing_plugin_id": "..." }]
  }
}

upstream_artifacts は、パイプライン内の前段のステップが生成したものを提供します。ステップが それらを入力として必要とする場合に使えます (例えば Vector Embedder プラグインは、生のソースを再取得 するのではなく Markdown Summarizer の出力を埋め込みます)。

送信すべきコールバック

json
// success
{ "plugin_id": "your-plugin-id", "step_position": 0, "outcome": "SUCCESS", "artifact": { "type": "SUMMARY", "external_ref": "s3://bucket/key" } }

// failure (Core will retry per that step's configured policy, or mark the resource FAILED once exhausted)
{ "plugin_id": "your-plugin-id", "step_position": 0, "outcome": "FAILURE", "error": "a specific, human-readable reason" }

artifact.type は組み込み型 (VECTORGRAPHSUMMARY) のいずれか、またはプラグインが定義する 新しい型にできます — 新しい成果物タイプの追加は、コアウェアハウス側でのPrismaスキーマの1行変更と マイグレーションだけで済みます (実例として github-profile-scannerREPO_ANALYSIS 型を参照)。

external_ref は実際の内容を保存した場所への参照です — コアがコールバック経由で生の成果物バイト列を 送るよう求めることは決してありません。出力は自分のバケット/コレクションに保存するか (コアと同居させて デプロイする場合はコアのMinIO/Qdrantを再利用しても構いません)、単にロケーター文字列を報告してください。

成果物の内容が表示される仕組み

成果物をWeb UIで表示可能にしたい場合 (成果物チップ→「結果を表示」モーダル経由)、コアは external_ref からその内容を取得する方法を知る必要があります。現状これは s3:// プレフィックス (テキストまたはJSONとして取得) か qdrant:// プレフィックス (ベクトル+ペイロードとして取得) の いずれかを意味します — backend/src/routes/resources.tsGET /:id/artifacts/:artifactId ハンドラーを参照してください。異なるストレージ方式を使う場合、成果物の内容はそこには表示されません (ただし、ステータス追跡、リトライ、削除時のクリーンアップなど、それ以外はすべて external_ref だけで 機能します)。

パッケージ化とデプロイ

各プラグインは独自のDockerfile + docker-compose.yml サービスであり、独自の環境変数 (RABBITMQ_URLCORE_API_URLPLUGIN_ID、および必要なストレージ認証情報) を持ちます。この リポジトリに存在する必要はありません — プラグインは、RabbitMQブローカーとコアAPIに到達できる 限り、完全に独立してビルド・ホスト・デプロイできます。

他の人と共有する

プラグインが動作するようになったら、コミュニティプラグインレジストリ に 掲載して、他のDataCore運用者が発見できるようにできます。これはメタデータとリポジトリへのリンクを 投稿するものであり、コード自体ではありません — 興味を持った人は自分でリポジトリをクローンし、 レビューし、自分でデプロイします。