メインコンテンツまでスキップ

カスタム Workflow アーキテクチャ概要

Zotero Agents の Workflow システムはプラガブルアーキテクチャを採用している。各 Workflow は独立した自己完結型のディレクトリであり、必須なのは workflow.json マニフェストファイルと対応するフックスクリプトのみである。プラグインの Workflow Manager が自動的に検出して読み込む。

ディレクトリ構造

Workflow は2箇所に保存できる。

場所種別説明
Official Workflow PackageOfficialContent Feed 経由で個別にインストールされる。<Zotero Data>/zotero-agents/content/official/workflows/ に配置される
ユーザー Workflow ディレクトリCustom設定で指定する。Workflow Manager が自動的にスキャンする

プラグインの Workflow Manager は、Official Package ディレクトリとユーザー Workflow ディレクトリを再帰的にスキャンし、workflow.json ファイルを検出して利用可能な Workflow として登録する。

最小 Workflow の例

カスタム Workflow の作成には2ファイルだけが必要である。

my-workflow/
├── workflow.json
└── hooks/
└── applyResult.mjs

workflow.json

{
"id": "hello-world",
"label": "Hello World",
"provider": "pass-through",
"inputs": {
"unit": "parent"
},
"hooks": {
"applyResult": "hooks/applyResult.mjs"
}
}

hooks/applyResult.mjs

export function applyResult({ parent, runtime }) {
const title = runtime.helpers.resolveItemRef(parent).getField("title");
runtime.hostApi.notifications.toast({
text: `Hello, ${title}!`,
type: "success",
});
return { greeted: true };
}

my-workflow/ をユーザー Workflow ディレクトリに配置した後、Dashboard を開き直すと Workflow が表示される。

Workflow アーキテクチャの階層

Workflow のライフサイクルは以下の階層で構成される。

User Action (Right-click / Dashboard)


Workflow Manager — Discover, load, validate

├── Inputs — What items did the user select?
├── Parameters — What parameters did the user set?
├── Hooks — Preprocessing, request building, result handling
└── Execution — Dispatched to a backend by the Provider


Provider (SkillRunner / ACP / Generic HTTP / Pass-through)


Backend — Remote or local execution engine

Workflow パターンの分類

実行方法とバックエンドの種別に基づき、Workflow は以下のように分類される。

パターン代表的な用途バックエンド種別
pass-through純粋なローカル操作(エクスポート、ファイル処理)。リモートバックエンド不要なし
skillrunner.job.v1SkillRunner に送信する単一ステップの Skill 実行skillrunner / acp
skillrunner.sequence.v1複数ステップの連鎖的な Skill 実行。ステップ間でリレーを行うacp
generic-http.request.v1単一の HTTP API 呼び出しgeneric-http
generic-http.steps.v1複数ステップの HTTP API 呼び出しgeneric-http

workflow.json の基本概念

{
"id": "unique identifier",
"label": "display name",
"provider": "backend type",
"inputs": { "unit": "input unit type" },
"parameters": { /* 設定可能なパラメータ */ },
"execution": { /* 実行制御 */ },
"request": { "kind": "リクエスト種別" },
"hooks": { "applyResult": "結果処理用スクリプトパス" }
}

次のページで各フィールドの意味と使い方を詳しく説明する。

次のステップ