sealbridge 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +492 -30
- package/README.md +522 -109
- package/dist/cli/dist/accept.d.ts +13 -0
- package/dist/cli/dist/accept.js +115 -0
- package/dist/cli/dist/accept.js.map +1 -0
- package/dist/cli/dist/approval-summary.d.ts +1 -1
- package/dist/cli/dist/board.d.ts +10 -9
- package/dist/cli/dist/board.js +62 -31
- package/dist/cli/dist/board.js.map +1 -1
- package/dist/cli/dist/command-identity.d.ts +6 -0
- package/dist/cli/dist/command-identity.js +13 -0
- package/dist/cli/dist/command-identity.js.map +1 -0
- package/dist/cli/dist/config.d.ts +3 -0
- package/dist/cli/dist/config.js +29 -0
- package/dist/cli/dist/config.js.map +1 -0
- package/dist/cli/dist/connections.d.ts +15 -0
- package/dist/cli/dist/connections.js +191 -0
- package/dist/cli/dist/connections.js.map +1 -0
- package/dist/cli/dist/contacts.d.ts +4 -3
- package/dist/cli/dist/contacts.js +39 -28
- package/dist/cli/dist/contacts.js.map +1 -1
- package/dist/cli/dist/doctor.d.ts +9 -0
- package/dist/cli/dist/doctor.js +46 -5
- package/dist/cli/dist/doctor.js.map +1 -1
- package/dist/cli/dist/error-messages.js +22 -0
- package/dist/cli/dist/error-messages.js.map +1 -1
- package/dist/cli/dist/index.js +44 -6
- package/dist/cli/dist/index.js.map +1 -1
- package/dist/cli/dist/invite-output.d.ts +14 -0
- package/dist/cli/dist/invite-output.js +66 -0
- package/dist/cli/dist/invite-output.js.map +1 -0
- package/dist/cli/dist/invite-share.d.ts +6 -3
- package/dist/cli/dist/invite-share.js +40 -15
- package/dist/cli/dist/invite-share.js.map +1 -1
- package/dist/cli/dist/invites-migrate.d.ts +3 -0
- package/dist/cli/dist/invites-migrate.js +33 -0
- package/dist/cli/dist/invites-migrate.js.map +1 -0
- package/dist/cli/dist/mcp.d.ts +7 -5
- package/dist/cli/dist/mcp.js +23 -18
- package/dist/cli/dist/mcp.js.map +1 -1
- package/dist/cli/dist/network.d.ts +11 -1
- package/dist/cli/dist/network.js +150 -87
- package/dist/cli/dist/network.js.map +1 -1
- package/dist/cli/dist/pending.d.ts +8 -0
- package/dist/cli/dist/pending.js +50 -0
- package/dist/cli/dist/pending.js.map +1 -0
- package/dist/cli/dist/public-settings.d.ts +5 -4
- package/dist/cli/dist/public-settings.js +13 -15
- package/dist/cli/dist/public-settings.js.map +1 -1
- package/dist/cli/dist/receipt.d.ts +1 -1
- package/dist/cli/dist/relay-auth.d.ts +3 -0
- package/dist/cli/dist/relay-auth.js +23 -0
- package/dist/cli/dist/relay-auth.js.map +1 -0
- package/dist/cli/dist/requests.d.ts +10 -0
- package/dist/cli/dist/requests.js +91 -0
- package/dist/cli/dist/requests.js.map +1 -0
- package/dist/cli/dist/sdk.d.ts +10 -0
- package/dist/cli/dist/sdk.js +7 -0
- package/dist/cli/dist/sdk.js.map +1 -0
- package/dist/cli/dist/setup-files.d.ts +24 -0
- package/dist/cli/dist/setup-files.js +190 -0
- package/dist/cli/dist/setup-files.js.map +1 -0
- package/dist/cli/dist/setup-hosts.d.ts +29 -0
- package/dist/cli/dist/setup-hosts.js +75 -0
- package/dist/cli/dist/setup-hosts.js.map +1 -0
- package/dist/cli/dist/setup.d.ts +61 -0
- package/dist/cli/dist/setup.js +243 -0
- package/dist/cli/dist/setup.js.map +1 -0
- package/dist/cli/dist/task-input.d.ts +1 -1
- package/dist/cli/dist/wake-hook.d.ts +1 -1
- package/dist/cli/dist/worker-json.d.ts +4 -0
- package/dist/cli/dist/worker-json.js +87 -0
- package/dist/cli/dist/worker-json.js.map +1 -0
- package/dist/examples/two-owner-demo/dist/run-demo.d.ts +13 -13
- package/dist/package.json +1 -1
- package/dist/packages/adapters/dist/command.d.ts +2 -2
- package/dist/packages/adapters/dist/credential-proxy.d.ts +2 -2
- package/dist/packages/adapters/dist/index.d.ts +1 -1
- package/dist/packages/adapters/dist/mcp.d.ts +2 -2
- package/dist/packages/adapters/dist/openai.d.ts +2 -2
- package/dist/packages/adapters/dist/sandbox.d.ts +2 -2
- package/dist/packages/core/dist/connection.d.ts +58 -0
- package/dist/packages/core/dist/connection.js +132 -0
- package/dist/packages/core/dist/connection.js.map +1 -0
- package/dist/packages/core/dist/delivery-status.d.ts +22 -0
- package/dist/packages/core/dist/delivery-status.js +53 -0
- package/dist/packages/core/dist/delivery-status.js.map +1 -0
- package/dist/packages/core/dist/discovery.d.ts +7 -6
- package/dist/packages/core/dist/discovery.js +19 -20
- package/dist/packages/core/dist/discovery.js.map +1 -1
- package/dist/packages/core/dist/edge.d.ts +1 -0
- package/dist/packages/core/dist/edge.js +1 -0
- package/dist/packages/core/dist/edge.js.map +1 -1
- package/dist/packages/core/dist/index.d.ts +3 -0
- package/dist/packages/core/dist/index.js +3 -0
- package/dist/packages/core/dist/index.js.map +1 -1
- package/dist/packages/core/dist/protocol.d.ts +24 -0
- package/dist/packages/core/dist/protocol.js +54 -0
- package/dist/packages/core/dist/protocol.js.map +1 -0
- package/dist/packages/core/dist/receipts.d.ts +1 -0
- package/dist/packages/core/dist/receipts.js +1 -1
- package/dist/packages/core/dist/receipts.js.map +1 -1
- package/dist/packages/core/dist/schema.d.ts +1 -0
- package/dist/packages/core/dist/schema.js +13 -2
- package/dist/packages/core/dist/schema.js.map +1 -1
- package/dist/packages/ledger/dist/index.d.ts +1 -1
- package/dist/packages/relay/dist/admission.d.ts +14 -0
- package/dist/packages/relay/dist/admission.js +70 -0
- package/dist/packages/relay/dist/admission.js.map +1 -0
- package/dist/packages/relay/dist/fetch.d.ts +8 -2
- package/dist/packages/relay/dist/fetch.js +41 -12
- package/dist/packages/relay/dist/fetch.js.map +1 -1
- package/dist/packages/relay/dist/index.d.ts +23 -12
- package/dist/packages/relay/dist/index.js +130 -78
- package/dist/packages/relay/dist/index.js.map +1 -1
- package/dist/packages/relay/dist/journal.d.ts +1 -1
- package/dist/packages/relay/dist/notifications.d.ts +1 -1
- package/dist/packages/relay/dist/retry.d.ts +23 -0
- package/dist/packages/relay/dist/retry.js +43 -1
- package/dist/packages/relay/dist/retry.js.map +1 -1
- package/dist/packages/relay/dist/ssrf.d.ts +3 -2
- package/dist/packages/relay/dist/ssrf.js.map +1 -1
- package/dist/packages/relay/dist/worker.js +1 -1
- package/dist/packages/relay/dist/worker.js.map +1 -1
- package/dist/packages/runtime/dist/a2a.d.ts +1 -1
- package/dist/packages/runtime/dist/a2a.js +1 -1
- package/dist/packages/runtime/dist/adapter.d.ts +2 -2
- package/dist/packages/runtime/dist/application-config.d.ts +20 -0
- package/dist/packages/runtime/dist/application-config.js +222 -0
- package/dist/packages/runtime/dist/application-config.js.map +1 -0
- package/dist/packages/runtime/dist/approval-providers.d.ts +24 -3
- package/dist/packages/runtime/dist/approval-providers.js +79 -3
- package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
- package/dist/packages/runtime/dist/connection-admission-review.d.ts +39 -0
- package/dist/packages/runtime/dist/connection-admission-review.js +86 -0
- package/dist/packages/runtime/dist/connection-admission-review.js.map +1 -0
- package/dist/packages/runtime/dist/connection-persistence.d.ts +35 -0
- package/dist/packages/runtime/dist/connection-persistence.js +181 -0
- package/dist/packages/runtime/dist/connection-persistence.js.map +1 -0
- package/dist/packages/runtime/dist/connection-records.d.ts +167 -0
- package/dist/packages/runtime/dist/connection-records.js +132 -0
- package/dist/packages/runtime/dist/connection-records.js.map +1 -0
- package/dist/packages/runtime/dist/connection-router.d.ts +45 -0
- package/dist/packages/runtime/dist/connection-router.js +130 -0
- package/dist/packages/runtime/dist/connection-router.js.map +1 -0
- package/dist/packages/runtime/dist/connection-service.d.ts +159 -0
- package/dist/packages/runtime/dist/connection-service.js +239 -0
- package/dist/packages/runtime/dist/connection-service.js.map +1 -0
- package/dist/packages/runtime/dist/connection-transport.d.ts +14 -0
- package/dist/packages/runtime/dist/connection-transport.js +89 -0
- package/dist/packages/runtime/dist/connection-transport.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-records.d.ts +180 -0
- package/dist/packages/runtime/dist/delivery-records.js +205 -0
- package/dist/packages/runtime/dist/delivery-records.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-status-router.d.ts +27 -0
- package/dist/packages/runtime/dist/delivery-status-router.js +150 -0
- package/dist/packages/runtime/dist/delivery-status-router.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-status.d.ts +43 -0
- package/dist/packages/runtime/dist/delivery-status.js +193 -0
- package/dist/packages/runtime/dist/delivery-status.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-store.d.ts +125 -0
- package/dist/packages/runtime/dist/delivery-store.js +1047 -0
- package/dist/packages/runtime/dist/delivery-store.js.map +1 -0
- package/dist/packages/runtime/dist/gateway.d.ts +4 -3
- package/dist/packages/runtime/dist/gateway.js.map +1 -1
- package/dist/packages/runtime/dist/held-request-review.d.ts +49 -0
- package/dist/packages/runtime/dist/held-request-review.js +122 -0
- package/dist/packages/runtime/dist/held-request-review.js.map +1 -0
- package/dist/packages/runtime/dist/held-request-store.d.ts +112 -0
- package/dist/packages/runtime/dist/held-request-store.js +290 -0
- package/dist/packages/runtime/dist/held-request-store.js.map +1 -0
- package/dist/packages/runtime/dist/idempotency-store.d.ts +53 -0
- package/dist/packages/runtime/dist/idempotency-store.js +331 -0
- package/dist/packages/runtime/dist/idempotency-store.js.map +1 -0
- package/dist/packages/runtime/dist/inbox.d.ts +1 -1
- package/dist/packages/runtime/dist/index.d.ts +27 -1
- package/dist/packages/runtime/dist/index.js +26 -0
- package/dist/packages/runtime/dist/index.js.map +1 -1
- package/dist/packages/runtime/dist/invite-store.d.ts +76 -0
- package/dist/packages/runtime/dist/invite-store.js +337 -0
- package/dist/packages/runtime/dist/invite-store.js.map +1 -0
- package/dist/packages/runtime/dist/key-store.d.ts +77 -0
- package/dist/packages/runtime/dist/key-store.js +226 -0
- package/dist/packages/runtime/dist/key-store.js.map +1 -0
- package/dist/packages/runtime/dist/local-identity.d.ts +33 -0
- package/dist/packages/runtime/dist/local-identity.js +278 -0
- package/dist/packages/runtime/dist/local-identity.js.map +1 -0
- package/dist/packages/runtime/dist/mcp-rpc.d.ts +19 -0
- package/dist/packages/runtime/dist/mcp-rpc.js +175 -0
- package/dist/packages/runtime/dist/mcp-rpc.js.map +1 -0
- package/dist/packages/runtime/dist/mcp-server.d.ts +46 -19
- package/dist/packages/runtime/dist/mcp-server.js +427 -184
- package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
- package/dist/packages/runtime/dist/mcp-tool-catalog.d.ts +1 -1
- package/dist/packages/runtime/dist/mcp-tool-catalog.js +172 -13
- package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
- package/dist/packages/runtime/dist/mcp.d.ts +2 -2
- package/dist/packages/runtime/dist/message-status.d.ts +32 -0
- package/dist/packages/runtime/dist/message-status.js +29 -0
- package/dist/packages/runtime/dist/message-status.js.map +1 -0
- package/dist/packages/runtime/dist/outbox.d.ts +91 -0
- package/dist/packages/runtime/dist/outbox.js +462 -0
- package/dist/packages/runtime/dist/outbox.js.map +1 -0
- package/dist/packages/runtime/dist/policy.d.ts +1 -1
- package/dist/packages/runtime/dist/protocol-peer-store.d.ts +40 -0
- package/dist/packages/runtime/dist/protocol-peer-store.js +176 -0
- package/dist/packages/runtime/dist/protocol-peer-store.js.map +1 -0
- package/dist/packages/runtime/dist/protocol-release.d.ts +26 -0
- package/dist/packages/runtime/dist/protocol-release.js +76 -0
- package/dist/packages/runtime/dist/protocol-release.js.map +1 -0
- package/dist/packages/runtime/dist/quota.d.ts +1 -1
- package/dist/packages/runtime/dist/relay-selection.d.ts +20 -0
- package/dist/packages/runtime/dist/relay-selection.js +34 -0
- package/dist/packages/runtime/dist/relay-selection.js.map +1 -0
- package/dist/packages/runtime/dist/requester-pending-store.d.ts +59 -0
- package/dist/packages/runtime/dist/requester-pending-store.js +266 -0
- package/dist/packages/runtime/dist/requester-pending-store.js.map +1 -0
- package/dist/packages/runtime/dist/secret-store.d.ts +19 -0
- package/dist/packages/runtime/dist/secret-store.js +51 -0
- package/dist/packages/runtime/dist/secret-store.js.map +1 -0
- package/dist/packages/runtime/dist/session-audit.d.ts +29 -7
- package/dist/packages/runtime/dist/session-audit.js +149 -29
- package/dist/packages/runtime/dist/session-audit.js.map +1 -1
- package/dist/packages/runtime/dist/session.d.ts +101 -9
- package/dist/packages/runtime/dist/session.js +696 -96
- package/dist/packages/runtime/dist/session.js.map +1 -1
- package/dist/packages/runtime/dist/task-journal.d.ts +18 -3
- package/dist/packages/runtime/dist/task-journal.js +271 -18
- package/dist/packages/runtime/dist/task-journal.js.map +1 -1
- package/dist/packages/runtime/dist/verifier.d.ts +3 -2
- package/dist/packages/runtime/dist/verifier.js +1 -0
- package/dist/packages/runtime/dist/verifier.js.map +1 -1
- package/dist/packages/runtime/dist/worker-trust-store.d.ts +111 -0
- package/dist/packages/runtime/dist/worker-trust-store.js +592 -0
- package/dist/packages/runtime/dist/worker-trust-store.js.map +1 -0
- package/dist/packages/sandbox/dist/container.d.ts +1 -1
- package/dist/packages/sandbox/dist/index.d.ts +1 -1
- package/dist/spec/README.ja.md +21 -1
- package/dist/spec/README.md +20 -1
- package/dist/spec/agent-card.schema.json +11 -1
- package/dist/spec/delivery-status.schema.json +106 -0
- package/dist/spec/examples/protocol-versions/sample-agent-card.json +35 -0
- package/dist/spec/examples/sample-delivery-status.json +21 -0
- package/dist/spec/examples/sample-task-manifest.0.1.0.json +173 -0
- package/dist/spec/examples/sample-task-manifest.0.2.0.json +173 -0
- package/dist/spec/task-manifest.0.1.0.schema.json +422 -0
- package/dist/spec/task-manifest.0.2.0.schema.json +422 -0
- package/dist/spec/task-manifest.schema.json +9 -418
- package/docs/sdk.ja.md +133 -0
- package/docs/sdk.md +138 -0
- package/package.json +15 -3
package/README.ja.md
CHANGED
|
@@ -14,11 +14,13 @@ Windows PowerShell:
|
|
|
14
14
|
irm https://sealbridge.dev/install.ps1 | iex
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
インストーラーは npm で公開待ちの sealbridge 0.3.0 を固定指定しています。更新したインストーラーは npm 公開後にデプロイしてください。Node 22以上があれば `npm i -g sealbridge` または `npx sealbridge@latest` も使えます。
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Node 22 以上と同じインストール先の npm が正常に動く場合は再利用します。それ以外は既存の Node を変更せず、npm 同梱の Node をユーザー専用ディレクトリに導入します。Nodeが必要な場合は公式Node 22.22.0のチェックサムを検証します。秘密情報の入力・テレメトリー・管理者権限・Git・pnpmは不要です。macOS/Linuxでは新しいターミナルを開くか `. "$HOME/.profile"` を実行してください(パイプ実行では親シェルのPATHを変更できません)。Windowsでは現在と次回のPATHを設定します。`sealbridge doctor`、`sealbridge demo` で確認できます。doctorは中継器のヘルスチェックを1回行います。オフライン警告があってもインストールは保持します。
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
リリース注記:次の機能は sealbridge npm パッケージの 0.3.0 から利用できます。CLI 0.2.2 以前では対応していません:`doctor --offline`。
|
|
22
|
+
|
|
23
|
+
インストーラーと `sealbridge doctor` は、Node 実行ファイルの解決済みパスとバージョンを表示します。Windows では解決済み Node と同じ場所に npm が必要です。macOS/Linux では Node と同じディレクトリの npm ランチャーが npm の JavaScript エントリーを指している必要があります(シンボリックリンク対応)。その Node で npm を直接実行します。Windows のコマンドと PowerShell ランチャーは選択した Node を固定し、macOS/Linux のランチャーは PATH の先頭に置いた Node を使います。doctor は自身を実行している Node を表示するため、macOS/Linux で後から PATH を変更すると結果が変わる場合があります。正常な項目は短い `(OK)` 行で表示し、対処方法は `(WARN)` 行だけに表示します。鍵は初回使用時に作成します。インストーラーと doctor は鍵を生成しません。`sealbridge doctor --offline` は中継器へ接続せずローカル設定を検査します。
|
|
22
24
|
|
|
23
25
|
削除はスクリプトを保存して `sh install.sh --uninstall` または `& ./install.ps1 -Uninstall`(PowerShellでの --uninstall 表記)を実行します。鍵は保持します。Unixではシェル設定の `# sealbridge installer` 行も削除してください。npmのみの導入は `npm uninstall -g sealbridge` で削除できます。保存先は `~/.local/share/sealbridge` と `%LOCALAPPDATA%\Sealbridge` です。
|
|
24
26
|
|
|
@@ -43,8 +45,12 @@ irm https://sealbridge.dev/install.ps1 | iex
|
|
|
43
45
|
[](./LICENSE)
|
|
44
46
|
[](https://x.com/takapon01234)
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
[](docs/media/sealbridge-demo.mp4)
|
|
49
|
+
|
|
50
|
+
30秒のデモ、音声なし — [MP4を見る](docs/media/sealbridge-demo.mp4)。
|
|
51
|
+
|
|
52
|
+
> **ステータス**: Sealbridge `v0.3.0` を npm パッケージ `sealbridge` としてリリース準備中で、公開待ちです。以前の `v1.0.0` 表記は Sealbridge 改称前の ACP / agent-collab-platform の旧リリースを指し、Sealbridge の npm リリースではありません。
|
|
53
|
+
> **目的**: 異なる所有者の自律エージェントが、相手のランタイムや認証情報を信頼せずに、仕事の分割・委譲・実行・検証・検収を行うためのオープンソースのプロトコルと参照実装です。
|
|
48
54
|
> **作成者**: [@takapon01234](https://x.com/takapon01234)
|
|
49
55
|
|
|
50
56
|
- CI では、967件の自動単体・統合・適合性テスト(`pnpm test`)と、敵対的セキュリティテストスイート(`pnpm test:security-proof`)を実行します。
|
|
@@ -63,26 +69,168 @@ irm https://sealbridge.dev/install.ps1 | iex
|
|
|
63
69
|
git clone https://github.com/sealbridge/sealbridge.git && cd sealbridge && pnpm install --frozen-lockfile && pnpm build && pnpm sealbridge demo
|
|
64
70
|
```
|
|
65
71
|
|
|
66
|
-
|
|
72
|
+
### ローカルホスト設定
|
|
73
|
+
|
|
74
|
+
リリース注記:次の機能は sealbridge npm パッケージの 0.3.0 から利用できます。CLI 0.2.2 以前では対応していません:`setup`、`accept`。
|
|
75
|
+
|
|
76
|
+
このコマンドを含むリリースでは `sealbridge setup --help` を確認し、
|
|
77
|
+
`sealbridge setup --host cursor` または `sealbridge setup --host claude-desktop`
|
|
78
|
+
(macOS/Windows)を実行します。`setup` だけなら検出したユーザーホストが1つのときに選択し、
|
|
79
|
+
複数なら端末で選びます。`--host` の繰り返し、`--all-detected` にも対応します。
|
|
80
|
+
Claude Code は `--host claude-code --project` と絶対パスが必須です。
|
|
81
|
+
`--dry-run` は計画、`--print` は登録案だけを表示し、どちらも書き込みません。
|
|
82
|
+
ソース版は先にビルドし `node cli/dist/index.js setup` を使います。
|
|
83
|
+
|
|
84
|
+
setup は依頼者鍵(`--worker` ならワーカー鍵も)を作成・再利用し、既存の
|
|
85
|
+
`config.json` の relays 形式で既定値を記録します。絶対パスの Node/CLI で
|
|
86
|
+
`mcp-server --require-approval` を登録し、送信前と最終検収時にホストのフォーム
|
|
87
|
+
elicitation を要求します。ホストの対応状況はオフラインでは検出できず、非対応なら
|
|
88
|
+
送信前に `APPROVAL_CHANNEL_UNAVAILABLE` を返します。明示的に
|
|
89
|
+
`--no-require-approval` を指定すると従来の `mcp-server` を登録し、ホストは
|
|
90
|
+
依頼ごとの確認なしに送信し、最終結果を自動承認できます。適用時・`--dry-run`・
|
|
91
|
+
`--print` は登録ごとの承認モードを表示します。通信もプロセス起動もしません。
|
|
92
|
+
`--relay URL` は代替既定値の記録で、保存済みの先頭と異なれば停止します。
|
|
93
|
+
既存の Sealbridge 登録も完全一致が必要です。承認モードが異なる登録は
|
|
94
|
+
`SETUP_APPROVAL_MODE_CONFLICT` で停止し、変更しません。
|
|
95
|
+
`--update-existing --dry-run` または `--update-existing --print` で確認後、
|
|
96
|
+
`--update-existing` で Sealbridge 登録だけを置換できます。従来の登録を維持するには
|
|
97
|
+
`--no-require-approval` を指定します。設定画面を閉じて適用してください。
|
|
98
|
+
変更する既存ファイルの原文を `<data-root>/setup/backups` に保存します。
|
|
99
|
+
バックアップはホストの資格情報を含む場合があります。複数ファイルは一括確定できません。
|
|
100
|
+
部分失敗なら結果を確認し、原因を解消して再実行します。ホストを再読込しツールを確認してください。
|
|
101
|
+
登録だけでは仕事を承認せず、ホストの動作確認は別途必要です。setup を実行しなければ
|
|
102
|
+
既存設定は変わらず、同じオプションで再実行しても変更しません。
|
|
103
|
+
|
|
104
|
+
[エージェント向け手順](sites/connect-agent.txt) に、人間が実行する
|
|
105
|
+
`sealbridge accept --paste` と `acp_list_invites`/`workerRef`、または
|
|
106
|
+
`acp_discover_workers` から返った `workerDid` と `relayUrl` を
|
|
107
|
+
`acp_delegate_task` へ渡す手順を記載しています。招待取込・オープン検索には
|
|
108
|
+
それぞれ対応するリリースが必要です。help とツール一覧を確認してください。
|
|
109
|
+
ホスト設定は厳密な JSON のみ対応し、TOML/JSONC は今後の対応です。
|
|
110
|
+
|
|
111
|
+
`mcp-server`、`delegate`、`worker start`、`discover`、`invite create` は `--key` と `--relay` を省略できます。既定の中継器は `https://relay.sealbridge.dev` です。MCP の初期化・ツール一覧は通信せず、検索は公開ディレクトリを取得し、依頼は暗号化したタスクを送ります。中継器には経路メタデータが見えます。招待作成はローカル署名のみで、ワーカーを起動しません。
|
|
112
|
+
|
|
113
|
+
鍵は `<data-root>/identities/requester.private.json` と `worker.private.json` に保存し再利用します。MCP と delegate は依頼者、worker start と CLI の招待作成はワーカーの鍵を使います。MCP の署名ツールはサーバーの依頼者鍵(または明示した鍵)を使います。MCP は必要になるまで鍵を読み込みません。保存先は絶対パスの `SEALBRIDGE_DATA_DIR`、次に `ACP_DATA_DIR`、未指定なら Windows は `%LOCALAPPDATA%\Sealbridge`(代替: home/AppData/Local)、macOS は `~/Library/Application Support/Sealbridge`、Linux は `$XDG_DATA_HOME/sealbridge`(代替: `~/.local/share/sealbridge`)です。
|
|
114
|
+
|
|
115
|
+
POSIX ではディレクトリ 0700・鍵 0600 とし、所有者・種類・モードを検査します。Windows は LOCALAPPDATA 配下の DACL を継承します。Node のモードはユーザー限定 DACL を設定せず、この版では ACL を検証しません。保存先を変更した場合は親のアクセス設定を継承するため、利用者が管理します。検出可能なリンク・通常ファイル以外は拒否します。ただし macOS の root 所有の `/var`・`/tmp` から対応する `/private` ディレクトリへのリンクは認めます。同じディレクトリ内のハードリンクが使えない場合は `IDENTITY_CREATION_UNSUPPORTED` です。
|
|
116
|
+
|
|
117
|
+
既定の鍵がない場合、役割に一致する `~/.acp/{requester,worker}.private.json` と旧 contacts 保存先の `owner.private.json`(依頼者のみ)を元の場所で再利用します。異なる依頼者鍵が競合すると `IDENTITY_SELECTION_REQUIRED` になるため `--key` で選択してください。既定保存先の鍵を優先し、不正・読取不可の鍵を置換しません。`keygen <path>` は未使用の明示パスへの作成専用です。
|
|
118
|
+
|
|
119
|
+
リリース注記:次の機能は sealbridge npm パッケージの 0.3.0 から利用できます。CLI 0.2.2 以前では対応していません:`config key-store`、`doctor --offline`。
|
|
120
|
+
|
|
121
|
+
秘密鍵の既定保存先はファイルです。`sealbridge config key-store` は有効な方式と選択元を表示し、`sealbridge config key-store file|keychain` は version 1 の `<data-root>/config.json` に中継器設定とともに `"keyStore"` を保存します。優先順位はプログラム指定 > `SEALBRIDGE_KEY_STORE` > config > 既定の file です。`--key <path>` は常にファイルを指定します。設定時は利用可否を確認し、他方式に既存の鍵があれば表示します。鍵の移動・作成・削除は行いません。他の設定項目を保持し、同じ値の再設定では既存バイト列を維持します。保存後も環境変数の指定が優先されます。
|
|
122
|
+
|
|
123
|
+
`--key` 省略時、board post/serve/dispatch は requester、board claim は worker、contacts・invite open・invite request-reissue は requester、invite reissue は worker を使います。既存の明示ファイル読込と MCP ツール名は維持します。board 一覧・contacts 一覧・MCP 一覧では鍵を作成しません。contacts ファイルと返信招待の既定ディレクトリは従来どおりです。invite open は旧 requester ファイルを含む役割の鍵を再利用し、初回は選択した方式に従います。ファイル方式の出力は `local.keyFile`、keychain 方式はファイルパスの代わりに `local.keyStore` と `local.role` を含みます。`invite share` は鍵ストアへアクセスしません。
|
|
124
|
+
|
|
125
|
+
keychain 方式は任意の [`@napi-rs/keyring`](https://github.com/Brooooooklyn/keyring-node)(MIT ライセンス、2.x の 2.1.2 以降)を動的に読み込みます。Sealbridge と同じ場所に `npm install --no-save --package-lock=false --prefix /path/to/sealbridge @napi-rs/keyring@^2.1.2`、ソースチェックアウトでは `pnpm --filter @acp/runtime add --optional @napi-rs/keyring@^2.1.2` で導入します。グローバル導入だけでは足りず、runtime モジュールから解決できる必要があります。Linux では Secret Service を指定し、メモリ内だけのストアは選択しません。ネイティブ配布物には依存ライブラリのライセンス表記も含まれます。
|
|
126
|
+
|
|
127
|
+
保存内容は Ed25519 の秘密 JWK JSON で、`kid` に公開 DID を格納します。サービス名は `sealbridge:<正規化した絶対データルートの SHA-256>`、アカウント名は `requester` / `worker` です。作成時に鍵ファイルは書かず、データルート内で鍵情報を含まない一時的な `.keychain-<role>.lock` を使います。同時作成は `KEY_STORE_BUSY` です。終了時にロックが残った場合は、書込プロセスを閉じてから手動で削除します。
|
|
128
|
+
|
|
129
|
+
明示した keychain を利用できない場合は `KEY_STORE_UNAVAILABLE` とし、ファイルに切り替えません。未指定時はファイルが既定ですが、資格情報ストアを検査でき、keychain に同じ役割の鍵があれば明示選択が必要です。ファイルもあれば `KEY_STORE_CONFLICT`、なければ `KEY_STORE_SELECTION_REQUIRED` です。明示選択はどちらの鍵も移動・削除しません。モジュールやストアへアクセスできない未設定環境ではファイル動作を維持し、keychain の存在は検査できません。自動移行は行いません。`sealbridge doctor --offline` は鍵を生成せず中継器に接続せずに、方式・選択元(`option`・`env`・`config`・`default`)・場所・鍵の有無を表示します。OS の資格情報アクセス画面が出る場合があります。
|
|
130
|
+
|
|
131
|
+
組み込みアプリは runtime の `KeyStore`(`load`、`createIfMissing`、`exists`、`describe`)を実装し、`AcpMcpServer` に `identityOptions: { keyStore: myStore }`、または `resolveStoredIdentity` / `inspectStoredIdentity` に `{ keyStore: myStore }` を渡せます。値または Promise を返せます。`createIfMissing` は既存の鍵を保持し、`describe` は方式・場所のメタデータのみを返します。`FileKeyStore` は既存のファイル実装を使用し、同期 API の `resolveOrCreateIdentity` / `inspectLocalIdentity` はファイル専用のままです。
|
|
132
|
+
|
|
133
|
+
明示した `--relay` は接続先を固定します。未指定なら検証済み招待の中継器が公開既定値より優先されます。明示の許可リスト(プログラムの空リストを含む)と注入した transport の優先順位は維持します。ループバック接続には引き続き `--allow-private-relay` が必要です。
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
リリース注記:次の機能は sealbridge npm パッケージの 0.3.0 から利用できます。CLI 0.2.2 以前では対応していません:`accept`、`invites`、`acp_list_invites`、`acp_remove_invite`。
|
|
137
|
+
|
|
138
|
+
招待はモデル実行の外で、ご自身でターミナルに保存します。
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
sealbridge accept "https://sealbridge.app/i#acp-invite:..." --alias reviewer
|
|
142
|
+
# または人が操作する TTY で貼り付けます:
|
|
143
|
+
sealbridge accept --paste --alias reviewer
|
|
144
|
+
# またはファイル・アプリからのパイプで読み込みます:
|
|
145
|
+
sealbridge accept --stdin --alias reviewer < invitation.txt
|
|
146
|
+
sealbridge invites list
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
ホストには `acp_list_invites {}` を呼び出してもらい、返された `saved:…` の参照または正確な別名を
|
|
150
|
+
`acp_delegate_task {"workerRef":"reviewer","title":"Review diff","description":"Review these changes","input":{"diff":"..."}}`
|
|
151
|
+
に渡します。モデルに招待トークンを渡す必要はありません。招待ページはローカル検証後に accept コマンドを表示します。
|
|
152
|
+
保存時は通信せず、相互招待や連絡先の承諾権限を作成しません。仕事の承認にもなりません。
|
|
153
|
+
依頼時は設定済みの承認方針に従い入力を外部へ送信します。名前・説明は表示データとして扱います。
|
|
154
|
+
|
|
155
|
+
招待の所持者は期限または失効まで提案を送れる場合があります。署名付き保存先は
|
|
156
|
+
`<data-root>/invites/<sha256-local-owner-DID>.json` です。CLI と MCP は同じ端末・OS アカウント・
|
|
157
|
+
データルート・依頼者鍵を使います。リモート MCP の場合はその端末で保存してください。
|
|
158
|
+
POSIX はディレクトリ 0700・ファイル 0600、Windows は親の DACL を継承し ACL は検証しません。
|
|
159
|
+
上書き保存先の親アクセス権はユーザーが管理します。位置引数のリンクはシェル履歴やプロセス一覧に
|
|
160
|
+
残る場合があります。`--paste` は人の TTY を必須とし、argv・シェル履歴へのリンクの記載を避けますが、
|
|
161
|
+
端末履歴を消去しません。非 TTY は直ちに `INVITE_INPUT_UNAVAILABLE` を返します。
|
|
162
|
+
|
|
163
|
+
`--stdin` はパイプ・ファイルからリンクを EOF まで読みます(68 KiB、読み取り全体で 10 秒)。
|
|
164
|
+
アプリは `sealbridge accept --stdin --alias reviewer` を起動し、子プロセスの stdin にリンクを
|
|
165
|
+
書き込んでパイプを閉じます。前後の空白・CRLF と空行を除き、空入力・複数の非空行は拒否します。
|
|
166
|
+
TTY は `INVITE_STDIN_REQUIRES_PIPE` を返すため、端末では `--paste` を使ってください。
|
|
167
|
+
位置引数・`--paste`・`--stdin` は併用できません。入力リンクや読み取りエラーの内容は出力しません。
|
|
168
|
+
既存のトークンを含まない JSON 出力には `alias`、`workerRef`、`agentDid`、`displayName`、
|
|
169
|
+
`effectiveExpiresAt` が含まれます。JSON 用の追加フラグは不要です。
|
|
170
|
+
|
|
171
|
+
別名は先頭が英数字の ASCII 英数字・ハイフン・アンダースコア 1–64 文字で、大文字小文字を区別します。
|
|
172
|
+
省略時は表示名と安定したダイジェスト接尾辞から生成します。同一招待の保存は冪等で、別名の衝突は
|
|
173
|
+
`ALIAS_EXISTS` です。期限切れも一覧に残りますが依頼には使えません。更新は明示的に
|
|
174
|
+
`sealbridge invites remove reviewer`(または `acp_remove_invite {"workerRef":"reviewer"}`)後に再保存します。
|
|
175
|
+
削除はローカルで冪等です。発行者の招待やワーカーの受諾設定は変更しません。
|
|
176
|
+
排他ロックと同一ディレクトリの一時ファイルで置換します。`INVITE_STORE_BUSY` は既存ロックを削除しません。
|
|
177
|
+
書き込みプロセスが動いていないことを確認後、ご自身で対応する `<store-file>.lock` を削除して再試行できます。
|
|
178
|
+
|
|
179
|
+
保存する招待トークンにも共通の key-store 選択(プログラム指定 > 環境変数 > config > file)を適用します。
|
|
180
|
+
file 方式では従来の署名付き JSON 形式とバイト列を維持します。keychain 方式の新規項目は署名付き
|
|
181
|
+
メタデータに `inviteSecret` 参照と `tokenDigest` を記録し、トークンは同じデータルート別サービスの
|
|
182
|
+
`invite:<entry id>` アカウントへ保存します。既存のインライン項目は自動移行せず読み込めます。
|
|
183
|
+
file に戻しても既存参照は keychain から解決し、新規保存はインラインに戻ります。一覧や MCP の結果に
|
|
184
|
+
トークンを含めません。利用不能は `KEY_STORE_UNAVAILABLE`、文字列の欠落・不一致は
|
|
185
|
+
`INVITE_SECRET_MISSING`・`INVITE_SECRET_MISMATCH` とし、ファイルに切り替えません。
|
|
186
|
+
削除は参照先の文字列の削除と欠落確認を先に行い、その後にメタデータを置換します。
|
|
187
|
+
`INVITE_SECRET_DELETE_FAILED` ではメタデータを維持し、同じ別名・参照で `remove`・
|
|
188
|
+
`invites remove`・`acp_remove_invite` を再実行できます。文字列削除後に置換が失敗すると
|
|
189
|
+
解決は `INVITE_SECRET_MISSING` になりますが、削除の再実行は文字列なしで完了できます。
|
|
190
|
+
|
|
191
|
+
既存の依頼者鍵を使い、明示的にインラインのトークンを移行できます。
|
|
192
|
+
|
|
193
|
+
```sh
|
|
194
|
+
sealbridge invites migrate --to keychain --dry-run
|
|
195
|
+
sealbridge invites migrate --to keychain
|
|
196
|
+
# 必要なら既存の依頼者ファイルを指定:
|
|
197
|
+
sealbridge invites migrate --to keychain --key /path/to/requester.private.json
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
dry run は書き込まず対象件数を表示します。適用時は全件の書込・読戻しを確認してから、トークンを
|
|
201
|
+
含まない署名付きメタデータへ一括置換します。失敗時は元のメタデータファイルを維持します。
|
|
202
|
+
失敗前に書いた文字列が残る場合は再実行時に再利用します。方式の設定や依頼者鍵は変更しません。
|
|
203
|
+
参照・別名・保存日時は維持します。組み込みアプリは同期の `SecretStore.get/set/delete` を
|
|
204
|
+
`InviteStoreOptions.secretStore` または MCP の `identityOptions.secretStore` に注入できます。
|
|
205
|
+
設定したネイティブ方式は `await InviteStore.open(owner, options)` で読み込みます。
|
|
206
|
+
`new InviteStore(owner, options)` は同期のファイル・注入方式 API を維持します。
|
|
207
|
+
独自の identity `KeyStore` だけを注入した場合はインライン保存を維持し、外部保存には別途
|
|
208
|
+
`secretStore` を指定します。明示した鍵ファイルは署名者の選択にのみ使い、招待には共通の方式選択を適用します。
|
|
209
|
+
|
|
210
|
+
組み込みでは `store.import(link, alias, { pendingConfirmation: true })` で確認待ちとして保存できます。
|
|
211
|
+
`SavedInvite.importState` は `unconfirmed` になり、`listUnconfirmed()` はトークンを含まない情報を返します。
|
|
212
|
+
`removeUnconfirmed({ olderThan: timestamp })` は日時より厳密に古い確認待ちだけを削除し、`{ removed }` を返します。
|
|
213
|
+
使う前に `retain(workerRef)` で保存を確定します。それまでは `resolve` が `INVITE_CONFIRMATION_REQUIRED` を返します。
|
|
214
|
+
通常の import(重複を含む)も保存を確定し、確認待ちとしての再取込は過去の保存を変更しません。
|
|
215
|
+
`connections confirm-invite` は接続確認の試行前に保存を確定します。拒否・中断時も保持し、所有者の同意確認は別に行います。
|
|
216
|
+
マーカーがない既存項目は整理の対象外です。これらのメソッドは通信しません。
|
|
217
|
+
再試行と組み込み時の契約は[招待のライフサイクル](docs/connections/invite-lifecycle.ja.md)を参照してください。
|
|
218
|
+
|
|
219
|
+
中継器の既定候補は `<data-root>/config.json` に保存できます。
|
|
67
220
|
|
|
68
221
|
```json
|
|
69
222
|
{
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
"command": "node",
|
|
73
|
-
"args": [
|
|
74
|
-
"/path/to/sealbridge/cli/dist/index.js",
|
|
75
|
-
"mcp-server",
|
|
76
|
-
"--key",
|
|
77
|
-
"/tmp/alice.private.json",
|
|
78
|
-
"--relay",
|
|
79
|
-
"https://relay.sealbridge.dev"
|
|
80
|
-
]
|
|
81
|
-
}
|
|
82
|
-
}
|
|
223
|
+
"version": 1,
|
|
224
|
+
"relays": ["https://relay.sealbridge.dev", "https://relay.example"]
|
|
83
225
|
}
|
|
84
226
|
```
|
|
85
227
|
|
|
228
|
+
ファイルがない場合は `{ "version": 1, "relays": ["https://relay.sealbridge.dev"] }` をメモリ内で使い、読取時にファイルや鍵を作成しません。CLI の通信操作と MCP の中継器操作で読み込み、MCP の初期化・ツール一覧では読み込みません。保存先とファイルには鍵ストアと同じ権限を使います(POSIX では 0700/0600)。
|
|
229
|
+
|
|
230
|
+
ローカル候補は先頭だけを使います。残りの候補へ通信・登録せず、HTTP 401 を含む失敗後にも切り替えません。フェイルオーバー、複数中継器への送信、並列検索、別中継器への自動再送はありません。選択順序は注入した transport、明示の固定先、検証済み招待、ローカル候補の先頭、組込み既定値です。招待の中継器は候補リストに含まれていなくても選べますが、既存の許可リストは引き続き適用し、候補によって拡張しません。カード・招待・マニフェスト・検索結果・監査経路は単一の URL を維持します。
|
|
231
|
+
|
|
232
|
+
候補の URL は origin と pathname(末尾スラッシュなし)に正規化し、順序を維持して重複を除きます。通信前に全候補をローカル検証し、不正・読取不可の設定では操作を停止します。互換形式 `{ "version": 1, "relay": "https://relay.example" }` は単一候補として受け入れ、読取で書き換えません。矛盾する `relay` と `relays` は拒否します。既存の CLI `--relay`、MCP `relayUrl`、コンストラクターの `relay` は単一値のままです。設定管理コマンドや MCP 引数の追加はありません。
|
|
233
|
+
|
|
86
234
|
MCP ホストは、信頼できないツール引数を渡すことがあります。`--allow-worker`、`--allow-relay`、そして `--require-approval` または `--approval-webhook` を付けて、プロンプト注入でタスク入力が任意のワーカーや中継器へ送られないようにします。フラグの説明は下の MCP の節にあります。
|
|
87
235
|
|
|
88
236
|
## 1画面サマリ
|
|
@@ -159,16 +307,16 @@ pnpm build
|
|
|
159
307
|
|
|
160
308
|
公開中継器は非信頼の転送路です。セッションのペイロードは受信者の `did:key` へ暗号化され、中継器が保存するのは暗号文です。経路のメタデータは見えたままです。`decryptEnvelopePayload`、`WorkerNode`、`RequesterClient`、`VerificationEngine` は、既定で暗号化された封筒を要求します(`requireEncrypted: true`)。平文のセッション封筒は `UNENCRYPTED_ENVELOPE_REJECTED` で拒否されます。`{ requireEncrypted: false }` と `allowUnencryptedEnvelopes: true` は、呼び出し側が明示したときだけ平文を開き、レガシーのメモリ内フィクスチャ向けです。自前で動かす場合は `packages/relay/wrangler.toml.example` を `packages/relay/wrangler.toml` にコピーし、自分の Wrangler アカウントでデプロイします。ワーカーは受信者ごとの受信箱を別々の Durable Object(`inbox:<recipientDid>`)に分け、エージェントカードは専用の `registry` オブジェクトに置きます。
|
|
161
309
|
|
|
162
|
-
|
|
310
|
+
新しく受理する封筒の保持期間は既定24時間です(`ACP_ENVELOPE_TTL_MS` またはローカルの `--envelope-ttl-ms`)。更新前に保存した期限は維持します。再送記録とエージェントカードは1時間で期限切れになります。再送記録の期限切れ・入替後も、キュー内に同じ ID があれば拒否します。両方の記録がなくなった後の再送履歴は保持しません。受信箱の上限はリース中も含め256件、1件256 KiB、合計4 MiBです。送信者ごとの上限は宛先ごとに既定256件です。キュー・全体容量や送信者の件数による一時拒否は HTTP 429、`{"error":"RELAY_RETRY_LATER","retryable":true,"retryAfterMs":60000}`、`Retry-After: 60` を返し、その封筒を保存しません。1件または宛先のバイト上限に単体でも収まらない封筒は恒久エラーの HTTP 400 です。既存クライアントは送信を自動再試行せず `RELAY_REJECTED: 429` を返します。[保持と受理の設定](docs/relay-reliability.ja.md#保持と受理)を参照してください。`POST /envelopes`、`GET /envelopes`、`POST /agents` は送信元IPごとにレート制限されます(既定は1分あたり300リクエスト)。レート制限は従来の HTTP 429 を維持します。既存の中継器へ新しいビルドを載せる前に、下のデプロイ手順を読んでください。
|
|
163
311
|
|
|
164
312
|
**自前中継器のデプロイ**
|
|
165
313
|
|
|
166
|
-
|
|
314
|
+
公開中継器で既定値・受理応答を変えるには、運用者による Worker のデプロイ・設定更新が必要です。この変更ではデプロイしません。ローカル・組み込みの中継器は更新後に新しい既定値を使います。現在の宛先別受信箱は保存済み期限・クラス名・マイグレーションタグを維持します。宛先別に分ける前の版を置き換える場合は、先に通信を排出してください。その版の単一 `acp-relay` オブジェクトは現在のワーカーから読みません。
|
|
167
315
|
|
|
168
|
-
1.
|
|
316
|
+
1. 宛先別に分ける前の版では送信を止め、キューを排出するか、設定した保持期間を待ちます。配置を変える前に古いキューが空であることを確認してください。
|
|
169
317
|
2. `packages/relay/wrangler.toml.example` を `packages/relay/wrangler.toml` にコピーし、自分の Wrangler アカウントでデプロイします。`pnpm --filter @acp/relay exec wrangler deploy`
|
|
170
|
-
3.
|
|
171
|
-
4. Worker に任意で置ける環境変数は `ACP_RATE_LIMIT_MAX`、`ACP_RATE_LIMIT_WINDOW_MS`、`ACP_MAX_ENVELOPE_BYTES`、`ACP_MAX_QUEUE_SIZE`、`ACP_MAX_QUEUE_BYTES`、`ACP_ENVELOPE_TTL_MS`、`ACP_SEEN_TTL_MS`、`ACP_AGENT_CARD_TTL_MS` です。任意の `RATE_LIMITER` バインディングは、アイソレート内のウィンドウに加えて検査されます。
|
|
318
|
+
3. エージェントは次の起動時に再登録します。古いオブジェクトの未配送の封筒は移行されません。必要な再試行は呼び出し側が明示的に行います。
|
|
319
|
+
4. Worker に任意で置ける環境変数は `ACP_RATE_LIMIT_MAX`、`ACP_RATE_LIMIT_WINDOW_MS`、`ACP_MAX_ENVELOPE_BYTES`、`ACP_MAX_QUEUE_SIZE`、`ACP_MAX_QUEUE_BYTES`、`ACP_MAX_ENVELOPES_PER_SENDER`、`ACP_ENVELOPE_TTL_MS`、`ACP_SEEN_TTL_MS`、`ACP_AGENT_CARD_TTL_MS` です。任意の `RATE_LIMITER` バインディングは、アイソレート内のウィンドウに加えて検査されます。
|
|
172
320
|
|
|
173
321
|
Durable Object のクラス名は変わらないので、例にある `v1` マイグレーションはそのまま使えます。新しいオブジェクト名は、同じクラスの別インスタンスです。古い `acp-relay` インスタンスは、参照が残っていないことを確認してから Wrangler で削除できます。
|
|
174
322
|
|
|
@@ -195,6 +343,28 @@ pnpm sealbridge worker start --key /tmp/bob.private.json \
|
|
|
195
343
|
|
|
196
344
|
`sealbridge worker` は `--publish` を付けない限り、公開リレーのディレクトリへ AgentCard を登録しません。招待トークンを直接渡してください。`sealbridge discover` に出るのは `--publish` したワーカーだけです。
|
|
197
345
|
|
|
346
|
+
ワーカー起動時の標準出力は従来どおり、1行目がトークン、2行目が HTTPS 招待リンクです。
|
|
347
|
+
`--invite-output none` で両方を省略できます。`--invite-output file:/absolute/path/invite.txt`
|
|
348
|
+
または `--invite-output fd:3` は、トークンと改行だけを別の出力先へ渡し、標準出力には複製しません。
|
|
349
|
+
ファイルは未使用パスへモード `0600` で排他的に作成します。親ディレクトリは事前に作成し、
|
|
350
|
+
POSIX では現在のユーザーが所有し、グループ・他ユーザーの権限を付けないでください(通常 `0700`)。
|
|
351
|
+
既存ファイルと検出可能なリンクは拒否します。Windows は親の ACL を継承し、ACL は検証しません。
|
|
352
|
+
`fd:<n>` は POSIX 専用です。Windows では引数解析時に `INVITE_OUTPUT_FD_UNSUPPORTED_PLATFORM` で
|
|
353
|
+
拒否し、鍵の作成・リレーへの登録・待受開始は行いません。Windows の Node が継承する追加の stdio
|
|
354
|
+
パイプは、同期ファイル書き込みに使える通常のファイル記述子ではありません。
|
|
355
|
+
Windows で招待を別の出力先へ渡すには `file:<path>` を使ってください。
|
|
356
|
+
継承する記述子は 2 より大きく、パイプ・ソケット・ファイルを指定します。ファイルは
|
|
357
|
+
現在のユーザーが所有し、グループ・他ユーザーの権限がないことが必要です。出力先と寿命は親プロセスが
|
|
358
|
+
管理し、ワーカーは記述子を閉じません。配送に失敗すると `INVITE_OUTPUT_UNAVAILABLE` で停止し、
|
|
359
|
+
招待の表示と待受開始は行いません。
|
|
360
|
+
|
|
361
|
+
すべてのモードで、招待の配送(または省略)後、待受開始前に stderr へ `invite_ready` JSON を1行出します。
|
|
362
|
+
フィールドは `event`、`inviteDigest`(`sha256:` とトークンの完全な16進ダイジェスト)、
|
|
363
|
+
`expiresAt`(ISO 日時)、`workerDid`、`relay` です。トークンや招待リンクは含みません。
|
|
364
|
+
このイベントは中継器への接続完了を表しません。状態・イベント JSON は共通のフィールド選択処理を使い、
|
|
365
|
+
診断キーとダイジェストを維持し、認識しない自由形式の値を `[redacted]` に置き換えます。
|
|
366
|
+
承認プロンプトと、明示的に有効にした受信箱・受信フックの内容は従来どおりです。
|
|
367
|
+
|
|
198
368
|
`--inbox /path/to/inbox.jsonl` を指定すると、対話エージェント向けの受信箱を保存します。
|
|
199
369
|
提案の検証と受諾承認後、実行前に復号済みの `{ receivedAt, taskId,
|
|
200
370
|
requesterOwnerDid, requesterAgentDid, title, description, input }` を1行ずつ追記します。
|
|
@@ -212,10 +382,149 @@ DID による検索は `agentDid` の完全一致を `ownerDid` の別名一致
|
|
|
212
382
|
|
|
213
383
|
`--max-input-tokens`、`--max-output-tokens`、`--max-tool-invocations`、`--max-wall-clock-seconds` は、ワーカーが受ける契約の上限です。どれかを超える提案は、`--auto-accept` でも `ACCEPT` の前に拒否されます。マニフェストの `timeoutSeconds` は `--max-wall-clock-seconds` と比較します。`--max-concurrent-tasks` は同時実行数の上限です(既定は 8)。`--max-requests-per-minute` は、依頼者 DID ごとの提案回数の上限です。
|
|
214
384
|
|
|
215
|
-
`--allow-requester <did>`
|
|
385
|
+
`--allow-requester <did>` は対象を制限するだけで、信頼を付けません。すべての limited の依頼に検査と所有者が開く操作が必要です。CLI contacts の明示的な信頼は独立して維持します。
|
|
386
|
+
|
|
387
|
+
### つながりによる受付
|
|
388
|
+
|
|
389
|
+
[English](docs/connections/admission.md)
|
|
390
|
+
|
|
391
|
+
リリース注記:次の機能は sealbridge npm パッケージの 0.3.0 から利用できます。CLI 0.2.2 以前では対応していません:`requests`、`accept`、`connections`、`pending`、`worker start --allow-task-type`、`acp_list_connections`、`acp_list_connection_requests`。
|
|
392
|
+
|
|
393
|
+
状態は所有者の端末ごとの `none`・`pending`・`connected`・`blocked` です。
|
|
394
|
+
connected は期限なしの limited 同意です。すべてのアダプターで、limited の依頼は
|
|
395
|
+
検査完了と所有者が開く操作を経てから受諾します。自動承認方針では省略できません。
|
|
396
|
+
既定の検査器は `unavailable` を返すため、内容は保留のままです。公開リリース前に
|
|
397
|
+
検査プロバイダーが必要です。
|
|
398
|
+
|
|
399
|
+
未接続の相手からの有効な依頼は、暗号化済み封筒として最大24時間または依頼の期限まで
|
|
400
|
+
保存し、終端の `PENDING_OWNER_APPROVAL`・`retryable:false`・CLI 終了値3を返します。
|
|
401
|
+
自動再試行はしません。署名・スキーマ・能力・申告予算・公開スキル・運用者の制限は
|
|
402
|
+
保存や招待の結び付けより前に確認します。新しい受付情報には題名・説明のプレビューを
|
|
403
|
+
保存しません。未検査の `requests show` は `INSPECTION_INCOMPLETE` です。
|
|
404
|
+
平文の受信箱と受信フックは、検査と所有者が開く操作の後だけ使います。
|
|
405
|
+
|
|
406
|
+
```sh
|
|
407
|
+
sealbridge worker start --adapter sandbox --publish --allow-task-type json --max-input-tokens 50000
|
|
408
|
+
sealbridge discover --skill json-task
|
|
409
|
+
sealbridge requests list
|
|
410
|
+
sealbridge requests show REQUEST_ID
|
|
411
|
+
sealbridge requests approve REQUEST_ID
|
|
412
|
+
sealbridge requests discard REQUEST_ID
|
|
413
|
+
sealbridge requests deny REQUEST_ID
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
`--publish` はディレクトリへの掲載だけを行います。未掲載のワーカーも同じ受付規則です。
|
|
417
|
+
`--allow-requester` は対象を制限するだけで信頼を付けません。予算は
|
|
418
|
+
`--max-input-tokens`・`--max-output-tokens`・`--max-tool-invocations`・
|
|
419
|
+
`--max-wall-clock-seconds`、頻度は `--max-requests-per-minute` で設定します。
|
|
420
|
+
公開設定の `public` は掲載だけを制御し、`alwaysAsk:false` は
|
|
421
|
+
`CONNECTION_OPENING_REQUIRED` を返します。
|
|
422
|
+
|
|
423
|
+
招待は発行者だけが同意済みの接続申し込みで、最初に使った所有者 DID に結び付きます。
|
|
424
|
+
別の所有者が同じ有効な招待を使うと保留です。接続解除後も招待の期限まで結び付けを保持します。
|
|
425
|
+
期限切れ・相手の不一致・失効した招待は保存前に拒否します。成立済みの接続は招待の期限や
|
|
426
|
+
失効では消えません。後続の依頼は古いトークンを添付せず、確認済みの相手 DID を使います。
|
|
427
|
+
保存済み `workerRef` は引き続き招待を選び、使うたびに期限を確認します。
|
|
428
|
+
取り込みやプレビューだけでは、どちらの役割にも接続同意を付けません。
|
|
429
|
+
|
|
430
|
+
```sh
|
|
431
|
+
sealbridge accept --paste --alias reviewer
|
|
432
|
+
sealbridge connections confirm-invite reviewer --role requester
|
|
433
|
+
sealbridge connections request --to PEER_DID --relay https://relay.sealbridge.dev --role worker
|
|
434
|
+
sealbridge connections list --role worker
|
|
435
|
+
sealbridge connections approve REQUEST_ID --role worker
|
|
436
|
+
sealbridge connections reject REQUEST_ID
|
|
437
|
+
sealbridge connections withdraw REQUEST_ID
|
|
438
|
+
sealbridge connections disconnect PEER_DID
|
|
439
|
+
sealbridge connections block PEER_DID
|
|
440
|
+
sealbridge connections unblock PEER_DID
|
|
441
|
+
sealbridge connections prior-approved
|
|
442
|
+
sealbridge connections connect-prior PEER_DID --relay https://relay.sealbridge.dev
|
|
443
|
+
sealbridge connections sync --role requester --relay https://relay.sealbridge.dev --once
|
|
444
|
+
sealbridge connections status reviewer --role requester
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
確認送信後に `sync --once` を実行し、`connections status reviewer` で照会します。
|
|
448
|
+
保存済み workerRef または相手の所有者 DID も指定できます。既定の役割は requester です。
|
|
449
|
+
照会はローカルの記録だけを読み、送信や鍵の作成はしません。`pending_peer` は相手の承認が
|
|
450
|
+
ローカルに未適用、`connected` はローカルの limited 接続です。交換記録がある場合は
|
|
451
|
+
`acknowledgementPending` も返します。同じ情報を
|
|
452
|
+
`WorkerTrustStore.connectionStatus(peerOwnerDid)` から取得できます。
|
|
453
|
+
ほかの状態は `none`・`pending_owner`・`inactive`・`expired`・`blocked` です。
|
|
454
|
+
このプロトコルは相手側の拒否を通知しません。期限切れの申し込みの詳細は既存の削除処理まで
|
|
455
|
+
照会でき、成立済みの接続は期限切れで消えません。
|
|
456
|
+
詳しくは[接続状態の照会](docs/connections/connection-exchange.ja.md#接続状態の照会)を参照してください。
|
|
457
|
+
|
|
458
|
+
判断には人間の TTY または注入された人間用審査プロバイダーが必要で、`--yes` はありません。
|
|
459
|
+
ローカルの役割・DID と相手の所有者 DID を確認してください。requester と worker の既定鍵は別です。
|
|
460
|
+
送信側の同意は送信前に保存し、申し込みは14日で失効します。reject は申し込みだけを7日間
|
|
461
|
+
受け付けなくし、その間も依頼は保留できます。discard は内容だけを削除し、deny はブロックです。
|
|
462
|
+
ブロックは片方向で、相手に応答しません。解除・ブロックは次の受付から効き、受諾済みの仕事は
|
|
463
|
+
明示的な CANCEL で止めます。同時の申し込みは2つの DID を昇順にして同じ接続 ID を導きます。
|
|
464
|
+
承認・ACK の状態を保存してからリレー受信確認を返します。sync は依頼を再送しません。
|
|
465
|
+
内容の24時間と送信済み同意の14日は別の期限です。
|
|
466
|
+
|
|
467
|
+
依頼の承認と接続への同意は別の判断です。CLI や MCP フォームで順に確認でき、明示的な
|
|
468
|
+
接続同意がなければ申し込みを添付しません。相手の署名付き同意がない保留依頼を承認した場合、
|
|
469
|
+
こちらから申し込みます。こちらの判断だけで相手の同意は作りません。接続の確認後は依頼者の
|
|
470
|
+
所有者が新しい依頼を明示的に開始します。`pending resubmit` も未使用の監査・出力パスを使い、
|
|
471
|
+
新しい依頼として改めて検査し、所有者が開きます。
|
|
472
|
+
|
|
473
|
+
既存の署名付き受付・招待ファイルは読み取れ、一覧・読み取りで書き換えません。従来の有限の
|
|
474
|
+
許可は保留を省略せず、接続へ自動変換しません。残っている承認履歴は `prior-approved` から
|
|
475
|
+
所有者の操作で申し込みます。相手の同意も必要です。従来の拒否はブロックとして残ります。
|
|
476
|
+
CLI の明示的な contacts 設定は独立して維持します。`requests approve ID --trust trusted` は
|
|
477
|
+
別系統の従来の24時間許可です。接続の操作から trusted は作りません。最初の変更で v2 に進むため、
|
|
478
|
+
旧版へ戻す必要があれば事前に v1 を保存してください。新旧の書き込み処理は併用しません。
|
|
479
|
+
接続・版の記録は1,000件・1 MiBの境界を維持し、成立済みの記録を自動削除しません。
|
|
480
|
+
|
|
481
|
+
廃止した CLI の `--open`・`--access-mode`・`--open-*`・`--allow-any-requester` と JS の
|
|
482
|
+
`accessMode`・`openPolicy`・`allowAnyRequester` は移行案内付きの `ACCESS_MODE_REMOVED` です。
|
|
483
|
+
MCP 検索の旧 `accessMode` 引数は JSON-RPC -32602 です。検索は署名と期限を確認した
|
|
484
|
+
最新の掲載カードすべてを返し、運用モードの欄は返しません。旧カードの署名済み原本は保持します。
|
|
485
|
+
`acp_list_connections {}`・`acp_list_connection_requests {}` は鍵を作らず、サーバーの署名者の
|
|
486
|
+
ローカル情報だけを返します。所有者の判断は人間用 CLI で行います。
|
|
487
|
+
|
|
488
|
+
board の claim と dispatch は、選択した投稿者の現在の接続が必要です。
|
|
489
|
+
未接続なら `CONNECTION_REQUIRED` で、接続だけでは依頼・リースを承認しません。
|
|
490
|
+
接続と版を確認してからリースを消費します。保存済みのタスク封筒は、同じ署名済みバイト列と ID で受理または元の期限まで再試行し、リースを再消費しません。
|
|
491
|
+
一度だけの入場券と別の応募キューは後続の検討です。
|
|
492
|
+
|
|
493
|
+
[プロトコル版とリリース時計](docs/connections/protocol-versions.ja.md)も参照してください。
|
|
494
|
+
|
|
495
|
+
依頼側は CLI/MCP の保留依頼を既存のデータルート内の
|
|
496
|
+
`requesters/<requester-did-hash>/pending.private.json` に24時間保存します(POSIX 0600)。
|
|
497
|
+
非公開レコードにはタスク本文・入力と、使用した場合は招待参照を含みます。
|
|
498
|
+
一覧・エラーには招待情報やタスク本文を返しません。保留応答には `pendingId`、
|
|
499
|
+
`originalTaskId` と次の操作案内が加わります。元のタスク ID または依頼者 DID を
|
|
500
|
+
ワーカー所有者に伝え、審査対象を確認してください。
|
|
501
|
+
|
|
502
|
+
```sh
|
|
503
|
+
sealbridge pending list
|
|
504
|
+
sealbridge pending resubmit PENDING_ID --audit ./fresh-audit.jsonl --out ./fresh-result.json
|
|
505
|
+
sealbridge pending remove PENDING_ID
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
同じ依頼者の鍵・データルートを使い、明示的な鍵には `--key FILE` を指定します。
|
|
509
|
+
再送は現在の承認方針(CLI の既定は対話承認)に従い、`--auto-approve` は所有者が
|
|
510
|
+
明示的に許可した場合だけ指定します。監査・出力には未使用のパスを指定します。
|
|
511
|
+
中継器・承認設定を再確認し、保存済み招待の期限・失効も引き続き確認します。
|
|
512
|
+
保存した workerRef を使った保留記録には参照だけを保持し、招待トークンを複製せず、明示的な再送時に参照を解決し直します。
|
|
513
|
+
MCP は `acp_list_pending_requests {}` と `acp_resubmit_pending_request {pendingId}` を提供し、
|
|
514
|
+
現在の送信先確認と必須のホスト承認を適用します。再送は新しいタスク ID を作り、
|
|
515
|
+
再度の保留は同じレコードを更新、完了は resolved、その他のエラーは failed として記録します。
|
|
516
|
+
保存期限は延長せず、期限切れのレコードは次の保存更新時に削除します。一覧は最後に観測したローカル状態で、遠隔の承認状態は取得せず、
|
|
517
|
+
自動再送もしません。再送時に対応版を選び直し、新しい検査と所有者が開く操作を行います。状態照会・通知は今後の検討事項です。
|
|
518
|
+
|
|
519
|
+
`--allowed-peer DID` は繰り返し・カンマ区切りで、全信頼レベルの受信とセッション送信(進捗・復旧を含む)を制限します。対象外には応答しないため、別の手段で伝えてください。公開登録は引き続き `--publish` の指定が必要です。
|
|
216
520
|
|
|
217
521
|
**ターミナル 3 — 依頼側 Alice**
|
|
218
522
|
|
|
523
|
+
既定の検査プロバイダーは利用不可のため、この例は終端の `PENDING_OWNER_APPROVAL`
|
|
524
|
+
(終了値3)を返し、成果物や検収済み監査は作りません。自動再試行はしません。
|
|
525
|
+
完了には検査プロバイダーを設定し、接続の審査後に新しい依頼を所有者が開く必要があります。
|
|
526
|
+
`--auto-accept` ではこれらの操作を省略できません。
|
|
527
|
+
|
|
219
528
|
```sh
|
|
220
529
|
pnpm sealbridge keygen /tmp/alice.private.json
|
|
221
530
|
# プロンプトが出たら Bob のトークン全体を貼り付ける
|
|
@@ -229,7 +538,7 @@ pnpm sealbridge audit-verify /tmp/alice-audit.jsonl
|
|
|
229
538
|
pnpm sealbridge discover --relay http://127.0.0.1:8787 --allow-private-relay
|
|
230
539
|
```
|
|
231
540
|
|
|
232
|
-
|
|
541
|
+
受付と所有者が開く操作を経た後の結果は、双方の `SETTLED`、JSON の成果物、`"valid":true` と `"status":"VALID"` です。トラストアンカーファイルも `--expect-final-state` / `--expect-last-hash` / `--expect-entry-count` も無いとき、`statusLabel` は `VALID (no trust anchor: truncation not checked)` です。ハッシュ鎖は検証できていますが、より古い妥当な接頭辞は排除していません。Alice は署名・ダイジェスト・予算、JSON Schema、登録済みの隔離チェックを検証し、最後に署名付きの最終承認を取ります。`--auto-approve` は最終検収をポリシー承認にする明示的な選択です。人間が確認するときは外してください。`acp://invite?token=...` も受け付けます。招待の代わりに `--to <Bob の DID> --relay <URL>` も使えます。Bob は手元の `/tmp/bob-audit.jsonl` を自分で検証できます。
|
|
233
542
|
|
|
234
543
|
**アダプタを選ぶ**
|
|
235
544
|
|
|
@@ -281,23 +590,48 @@ docker run --rm -i -v sealbridge-data:/data sealbridge
|
|
|
281
590
|
## MCP、進捗、失効、クォーラム
|
|
282
591
|
|
|
283
592
|
```sh
|
|
284
|
-
pnpm sealbridge mcp-server
|
|
593
|
+
pnpm sealbridge mcp-server
|
|
285
594
|
```
|
|
286
595
|
|
|
596
|
+
リリース注記:次の機能は sealbridge npm パッケージの 0.3.0 から利用できます。CLI 0.2.2 以前では対応していません:`acp_list_invites`、`acp_remove_invite`、`acp_list_pending_requests`、`acp_resubmit_pending_request`。
|
|
597
|
+
|
|
287
598
|
`sealbridge mcp-server` は、依存ライブラリを増やさない JSON-RPC 2.0 の MCP サーバーです。標準入力に、改行区切り JSON と `Content-Length` フレームの両方を受けます。Claude Code、Cursor、Codex、Grok Bot から次のツールを呼べます。
|
|
288
599
|
|
|
289
600
|
| ツール | 戻り値 |
|
|
290
601
|
| -------------------------- | ---------------------------------------------------------------------- |
|
|
602
|
+
| `acp_list_invites` | 保存した参照・別名・公開メタデータ・期限状態 |
|
|
603
|
+
| `acp_remove_invite` | ローカル削除結果。発行者の招待は失効しません |
|
|
291
604
|
| `acp_delegate_task` | 検証済み成果物、`taskId`、状態、監査の要約 |
|
|
292
605
|
| `acp_delegate_multi` | 複数ワーカーへの `race` または `quorum` 委任 |
|
|
293
606
|
| `acp_verify_audit_bundle` | 暗号検証レポート。トラストアンカーで末尾切断を見たかも含む |
|
|
294
607
|
| `acp_create_invite` | 署名済み `acp-invite` トークン |
|
|
295
608
|
| `acp_revoke_token` | このプロセスに保存した署名済み `RevocationNotice` |
|
|
296
|
-
| `acp_discover_workers` |
|
|
609
|
+
| `acp_discover_workers` | 既定では公開済み open ワーカーの現在のカード |
|
|
297
610
|
| `acp_inspect_revocations` | このサーバープロセスに記録された失効通知 |
|
|
611
|
+
| `acp_message_status` | 送信側のローカル状態。送信・更新取得・ポーリングはしません |
|
|
612
|
+
| `acp_list_pending_requests` | タスク本文・招待情報を含まないローカルの保留記録 |
|
|
613
|
+
| `acp_resubmit_pending_request` | 所有者の審査後、現在の確認・承認を適用して新しいタスクを送信 |
|
|
298
614
|
|
|
299
615
|
`initialize` は、この手順を示したサーバー `instructions` を返します。同じ実装が `@acp/runtime` の `AcpMcpServer` です。サーバー鍵は、ツールが行う依頼側の承認に署名します。`acp_discover_workers` はディレクトリの読み取り専用です。`GET /agents` の前に、委任と同じリレー許可リストと `validateRelayEndpointUrl` を使い、タスク入力は送りません。`acp_inspect_revocations` はメモリ上のレジストリを読むだけで、ワーカーには接続しません。
|
|
300
616
|
|
|
617
|
+
フラグなしの `sealbridge mcp-server` で `acp_discover_workers {}` を呼ぶと、既定の `https://relay.sealbridge.dev` に公開されたワーカーを列挙します。結果を選び、その `workerDid` と `relayUrl` をそのまま `acp_delegate_task` に渡します。
|
|
618
|
+
|
|
619
|
+
```json
|
|
620
|
+
{
|
|
621
|
+
"workerDid": "<検索結果の workerDid>",
|
|
622
|
+
"relayUrl": "<検索結果の relayUrl>",
|
|
623
|
+
"title": "Echo JSON",
|
|
624
|
+
"description": "入力された JSON を返す",
|
|
625
|
+
"input": { "hello": "world" }
|
|
626
|
+
}
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
単一ワーカーへの委任で `description` を省略すると、タイトルを使います。既定ではワーカー許可リストの設定は不要ですが、明示された許可リストは引き続き適用されます。
|
|
630
|
+
|
|
631
|
+
MCP 検索は最新の署名と期限を確認した掲載カードすべてを返します。`skillId` と `taskType` で絞り込み、旧 `accessMode` は JSON-RPC -32602 です。元の署名付きカード・スキル・`protocolVersions`・`workerDid`・`relayUrl`・`acceptance: "worker_decides"` を返し、運用モードは返しません。
|
|
632
|
+
|
|
633
|
+
掲載は `--publish` で選び、接続や依頼の承認を意味しません。未接続の依頼は終端の `PENDING_OWNER_APPROVAL` です。拒否時に別の相手へ切り替えたり自動再試行したりしません。
|
|
634
|
+
|
|
301
635
|
`acp_delegate_task` と `acp_delegate_multi` は、タスク入力を中継器経由で対象ワーカーへ送ります。ホストが引数を組み立てるときは、送信先を制限します。
|
|
302
636
|
|
|
303
637
|
```sh
|
|
@@ -311,7 +645,11 @@ pnpm sealbridge mcp-server \
|
|
|
311
645
|
|
|
312
646
|
`--allow-worker <did>` と `--allow-relay <url>` は、繰り返しとカンマ区切りの両方を受けます。`--allow-worker` があるとき、素のワーカー DID は一覧と一致しなければなりません。招待トークンは、その `agentDid` または `ownerDid` のどちらかが一覧にあれば許可されます。それ以外は、接続する前に `MCP_WORKER_NOT_ALLOWED` で拒否します。`--allow-relay` があるとき、リレー URL は末尾スラッシュを除いたオリジンとパスへ正規化します。設定した `--relay`、ツールの `relayUrl`、招待トークンに埋め込まれたリレー URL は、すべて一覧と一致しなければなりません。一致しなければ `MCP_RELAY_NOT_ALLOWED` です。ツール呼び出しや招待が `--relay` と別の中継器を選ぶ場合も、その URL が一覧になければ拒否します。許可リストを付けないプログラムからの利用では、`allowAnyRelay: true` を明示したときだけ別の中継器を選べます。許可リストがあるときは、そちらが優先されます。設定したリレー URL は `validateRelayEndpointUrl` で検査します。
|
|
313
647
|
|
|
314
|
-
`--require-approval`
|
|
648
|
+
`--require-approval`(プログラムでは `requireInteractiveApproval: true`)は、タスク送信前と最終検収時に MCP のフォーム elicitation を要求します。ホストはフォーム対応を広告し、プロトコル `2025-06-18` を使用する必要があります。従来の空の `elicitation: {}` もフォーム対応として扱いますが、URL のみの対応では利用できません。`action: accept` かつ真偽値の `approved: true` の場合だけ承認します。各フォームの待機は最大60秒で、タスクの残り期限も超えません。複数ワーカーには送信先ごとに総数を示して確認します。送信時は解決済みタスクと入力、検収時は成果物と署名済みメタデータを表示し、大きすぎる確認内容は `APPROVAL_REVIEW_TOO_LARGE` で拒否します。
|
|
649
|
+
|
|
650
|
+
フォーム非対応のホストでは、タスク送信前に `APPROVAL_CHANNEL_UNAVAILABLE` を返します。elicitation 対応ホスト、または `--approval-webhook` を使用してください。標準出力への端末プロンプト表示や MCP 標準入力からの承認読み取りは、TTY でも行いません。通常の CLI worker/delegate の端末承認は従来どおりです。フォーム表示と利用者の決定の返却はホストに依存します。
|
|
651
|
+
|
|
652
|
+
`--require-approval` も明示的な webhook/provider 設定もない場合、従来の policy-auto 動作は変わりません。`--approval-webhook <url>` は所有者決定モードを維持し、`{ taskId, summaryHash, reason, approverDid }` を POST して HTTP 2xx かつ `{ approved: true }` の場合のみ続行します。拒否または非2xxは `APPROVAL_REJECTED` です。独自の承認器は `AcpMcpServer.approvalProvider` で指定できます。許可リスト検査の後、送信承認では確定したマニフェスト・宛先・入力を確認します。最終検収の失敗は送信後にも発生するため、失敗が未送信を意味するとは限りません。関連テストは `conformance/mcp-host-approval.test.ts`、`conformance/mcp-approval-session.test.ts`、`conformance/p1-7-mcp-outbound-policy.test.ts` です。
|
|
315
653
|
|
|
316
654
|
ワーカーは実行中に `PROGRESS`(`percent`、`step`、`message`、途中のトークン数やツール回数)を送れます。ほかのセッション封筒と同じ暗号と相互署名の監査に入ります。`delegate(request, { onProgress })` は、`DELIVER` の前に復号した更新を受け取ります。申告された使用量は `QuotaMeter` に計上されます。
|
|
317
655
|
|
|
@@ -333,6 +671,12 @@ HTTP の受信、SSE ストリーム、WebSocket の受信と購読には、宛
|
|
|
333
671
|
node examples/network-collab/run.mjs
|
|
334
672
|
```
|
|
335
673
|
|
|
674
|
+
## マニフェストのプロトコル版
|
|
675
|
+
|
|
676
|
+
ライブラリはマニフェスト0.1.0と0.2.0を検証し、明示的な互換方針を提供します。
|
|
677
|
+
送信は相互に対応する最新の版を選び、0.2.0 を優先します。設定済みのリリース時計は [版の説明](docs/connections/protocol-versions.ja.md)を参照してください。
|
|
678
|
+
スキーマ・方針・相手の観測については[プロトコル版](docs/connections/protocol-versions.ja.md)を参照してください。
|
|
679
|
+
|
|
336
680
|
## 5つの設計原則
|
|
337
681
|
|
|
338
682
|
1. **認証情報を共有しない。** 依頼側は、API キーや生の資格情報を受託側へ渡しません。必要な権限は、期限・回数・スコープ・委譲深さを絞った `CapabilityToken`(UCAN / Biscuit 風)として発行し、依頼側 Gateway がプロキシ検証します。
|
|
@@ -341,12 +685,25 @@ node examples/network-collab/run.mjs
|
|
|
341
685
|
4. **BYOK と署名付き利用レシート。** LLM の費用は、契約クォータの範囲で実行側が自己負担します(BYOK)。実行側ランタイムが計量し、`UsageReceipt` に署名します。決済手段はコアから切り離し、後からプラグインにできます。
|
|
342
686
|
5. **信頼できない入力と、双方が持つ監査証跡。** 他オーナーからのデータは `untrusted` としてサンドボックスで処理します。すべての状態遷移は Ed25519 署名の追記専用ハッシュチェーンになり、双方がコピーを保持します。
|
|
343
687
|
|
|
688
|
+
### つながりの状態と永続化
|
|
689
|
+
|
|
690
|
+
`@acp/runtime` は、所有者のローカル操作用のつながり状態・永続化APIを提供します。
|
|
691
|
+
connected は期限なしの limited に対応し、ライブ経路の受付に使います。
|
|
692
|
+
接続 metadata は、検証済みの招待・エージェントカードから得た任意の `peerDisplayName` を保持します。
|
|
693
|
+
`listConnections()`・`connections list`・`connectionStatus()`・`connections status`・
|
|
694
|
+
MCP の接続一覧・過去の承認候補一覧は、
|
|
695
|
+
招待の削除後も既知の表示名を返します。表示名は情報としてのみ扱い、識別と同意の判断は
|
|
696
|
+
DID に基づきます。同じ表示名でも所有者 DID は異なる場合があります。
|
|
697
|
+
旧記録や相手のカードが不明な場合は省略でき、読み取りで書き換えません。通信形式の変更はありません。
|
|
698
|
+
|
|
699
|
+
APIとストアの互換性は[つながりの状態と永続化](docs/connections/connection-state.ja.md)を参照してください。
|
|
700
|
+
|
|
344
701
|
## ドキュメント
|
|
345
702
|
|
|
346
703
|
| ファイル | 内容 |
|
|
347
704
|
| :------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- |
|
|
348
705
|
| [`SECURITY_PROOF.ja.md`](./SECURITY_PROOF.ja.md) | 敵対的セキュリティテストスイート(形式的証明ではない)と `pnpm test:security-proof` |
|
|
349
|
-
| [`ARCHITECTURE.ja.md`](./ARCHITECTURE.ja.md) | 全体像、信頼境界、タスク状態機械、5
|
|
706
|
+
| [`ARCHITECTURE.ja.md`](./ARCHITECTURE.ja.md) | 全体像、信頼境界、タスク状態機械、5つの制御、既存プロトコルとの比較、信頼の前提 |
|
|
350
707
|
| [`REPO_STRUCTURE.ja.md`](./REPO_STRUCTURE.ja.md) | モノレポ構成、技術選定、MVP の範囲、マイルストーン M0〜M3、実装タスクの分割 |
|
|
351
708
|
| [`spec/README.ja.md`](./spec/README.ja.md) | プロトコル概要、メッセージエンベロープ、正規化と署名 |
|
|
352
709
|
| [`spec/task-manifest.schema.json`](./spec/task-manifest.schema.json) | `TaskManifest` の JSON Schema(Draft 2020-12) |
|
|
@@ -355,6 +712,20 @@ node examples/network-collab/run.mjs
|
|
|
355
712
|
| [`AGENTS.md`](AGENTS.md) | 自律 Worker / Requester の運用手順 |
|
|
356
713
|
| [`SKILL.md`](SKILL.md) | 持ち運び用エージェントスキル |
|
|
357
714
|
|
|
715
|
+
### つながり交換ライブラリ
|
|
716
|
+
|
|
717
|
+
署名付きの申し込み・承認・ACK と、永続化・検査・所有者確認・通信を注入する
|
|
718
|
+
`ConnectionService` を公開します。runtime・CLI・MCP・board に所有者ごとの永続化と保留内容の審査を接続します。
|
|
719
|
+
接続の申し込み時刻と既定の14日後の期限は、一度取得した時刻から計算します。ワーカーと CLI が発行するカードも、最大30日を含め同じ方法で有効期間を計算します。
|
|
720
|
+
詳細は[つながり交換](docs/connections/connection-exchange.ja.md)を参照してください。
|
|
721
|
+
|
|
722
|
+
組み込み側は `ConnectionAdmissionReview` を明示的に使い、保留中の受信接続の公開情報を
|
|
723
|
+
一覧し、所有者の操作後に `approve(id)`(limited の同意)または `reject(id)` を呼べます。
|
|
724
|
+
CLI は `connections review list|approve ID|reject ID` で、判断には本人の確認が必要です。
|
|
725
|
+
組み込み検査は接続情報だけが対象です。既定の受信・タスク検査は `unavailable` のままで、
|
|
726
|
+
タスクは開きません。[受信接続の審査](docs/connections/admission.ja.md#受信接続の審査)を参照してください。
|
|
727
|
+
|
|
728
|
+
|
|
358
729
|
## ローカルの M0–M1 実装
|
|
359
730
|
|
|
360
731
|
Node.js 22 LTS と pnpm 10 が必要です。WP-1 から WP-6 は `@acp/core`、`@acp/ledger`、`@acp/sandbox`、`@acp/runtime`、`@acp/relay`、`@acp/cli`、`@acp/two-owner-demo` として実装されています。
|
|
@@ -396,6 +767,19 @@ pnpm sealbridge audit-verify /tmp/alice-audit.jsonl \
|
|
|
396
767
|
|
|
397
768
|
[デモの手順](examples/two-owner-demo/README.md)、[ワイヤ規約](spec/README.ja.md)、[適合性テスト](conformance/README.md)、[M1 セキュリティモデル](docs/security-model.md)、[敵対的セキュリティテストスイート](SECURITY_PROOF.ja.md) を読んでください。M1 は署名付きリレーエンベロープと、制限付き JavaScript 子プロセスです。M2/M3 は任意の強化 OCI 実行と、ペイロードのエンドツーエンド暗号化を追加します。ルートのコードは Apache-2.0 です。DelegateOS から取り込んだ部分の MIT 表記は [NOTICE](NOTICE) に残しています。
|
|
398
769
|
|
|
770
|
+
## 組み込み SDK
|
|
771
|
+
|
|
772
|
+
型付き ESM 入口 `sealbridge/sdk` は、保存済み招待・鍵と秘密のストア・接続の審査・
|
|
773
|
+
MCP のホストなどの公開 API を提供します。0.3.0 から利用でき、CLI 0.2.2 以前では対応していません。
|
|
774
|
+
既存の CLI と内部パスも引き続き利用できます。
|
|
775
|
+
[公開範囲と互換性の契約](docs/sdk.ja.md)を参照してください。
|
|
776
|
+
|
|
777
|
+
## 保留内容のライブラリ
|
|
778
|
+
|
|
779
|
+
`@acp/runtime` は、暗号化済みリクエストの保存と注入用の検査プロバイダーを提供します。
|
|
780
|
+
内容の表示には検査完了の受領書が必要で、既定のプロバイダーは保留を継続します。
|
|
781
|
+
API とホストの役割は[保留内容のライブラリ契約](docs/connections/held-content.ja.md)を参照してください。
|
|
782
|
+
|
|
399
783
|
## 作成者・リンク
|
|
400
784
|
|
|
401
785
|
- **作成者 (X / Twitter)**: [@takapon01234](https://x.com/takapon01234)
|
|
@@ -407,3 +791,81 @@ pnpm sealbridge audit-verify /tmp/alice-audit.jsonl \
|
|
|
407
791
|
公式サイトは https://sealbridge.dev、招待受信ページは `https://sealbridge.app/i#<invite>` を想定しています。静的サイトのソース・ビルド・公開手順は [Web サイトの運用](docs/sites.ja.md) を参照してください。このリポジトリへの追加だけでは公開されません。
|
|
408
792
|
|
|
409
793
|
推奨の中継 URL は `https://relay.sealbridge.dev` です。従来の `https://acp-relay.agent-collab.workers.dev` も同じ中継器として引き続き利用できます。既存の署名付き招待を編集せず、そのまま利用してください。新ホストへ切り替える場合は MCP の中継許可リストも更新します。
|
|
794
|
+
|
|
795
|
+
## 保存済みの送信待ち
|
|
796
|
+
|
|
797
|
+
CLI worker/delegate・board・MCP ホストは、承認済みのタスク封筒を
|
|
798
|
+
`<data-root>/delivery/<sha256-local-signer-DID>/` に保存します。
|
|
799
|
+
イベントと監査エントリの両方を保存してから送信します。一時的な送信失敗では、
|
|
800
|
+
同じ署名済み暗号文・封筒 ID を、1分、5分、15分、その後は1時間ごとに再試行します。
|
|
801
|
+
検証済みの relay の待機指定があれば、さらに待ちます。relay の受理または元のタスク期限で
|
|
802
|
+
再試行を止めます。受理はキューへの保存であり、所有者による開封・エージェントの実行・
|
|
803
|
+
検収完了を示しません。`PENDING_OWNER_APPROVAL` は終端のままで、再依頼は明示操作です。
|
|
804
|
+
|
|
805
|
+
同じ署名者・データルートでゲートウェイを次回起動すると送信待ちを再開します。
|
|
806
|
+
停止中は再試行しません。通信の復旧は任意の双方向セッションの復元やアダプターの再実行を
|
|
807
|
+
意味しません。既定のワーカーのタスクジャーナルと受信記録で記録済み依頼の再実行を抑止し、
|
|
808
|
+
明示した inbox/audit のジャーナルパスを優先します。heartbeat と接続同意用 outbox は従来どおりです。
|
|
809
|
+
|
|
810
|
+
C1 の永続化はゲートウェイのプロセス再起動を対象とし、送信・受領確認より前に書き込みとアトミックな置換を完了します。封筒・受信記録・既定のタスクジャーナルではファイルやディレクトリを fsync せず、電源断時の永続化は保証しません。lease・再試行・relay 受理の管理情報は、中断後に同じ封筒 ID で再送する場合があります。明示した inbox/audit のタスクジャーナルは従来の flush 方針を維持します。変更のないレコードとディレクトリ一覧の検証を再利用し、索引更新・復元時の走査・定期削除はバッチまたはレコードごとにイベントループへ制御を返します。
|
|
811
|
+
|
|
812
|
+
セッションの送信と処理済み受信記録は、準備時に署名者ロックを取得せず、一意の一時ファイルへ非同期に書き込みます。ハンドルを閉じてからアトミックに公開し、同じ署名者・relay の独立したタスクは並行して書き込めます。公開時に署名者ロックの下で容量と受信記録の状態を再確認し、ファイルシステムの再試行待機は行いません。既定のタスクジャーナルは追記ハンドルと変更のない検証済みチェックポイントを再利用し、圧縮時とワーカー停止時にハンドルを閉じます。
|
|
813
|
+
並行する依頼は、署名者の送信ストアを共有し、それぞれのタスクと relay の対応を維持します。
|
|
814
|
+
|
|
815
|
+
POSIX のディレクトリ・ファイルは 0700/0600、Windows は親の DACL を継承します。
|
|
816
|
+
稼働中の送信は、受理の結果を取得した後に完了済みバッチの暗号文を削除します。
|
|
817
|
+
保守処理は期限切れの送信待ちを閉じてからメッセージ情報を削除し、残った完了・終了済み
|
|
818
|
+
バッチも削除します。中身を含まないメッセージ情報と
|
|
819
|
+
受信重複処理の記録は `max(createdAt, 元の deliveryDeadline)` の7日後まで保持します。
|
|
820
|
+
読み取り・再試行で期限を延ばしません。保守処理は起動時と稼働中の毎分に行い、停止中の
|
|
821
|
+
期限切れファイルは次回の保守まで残る場合があります。ローカル上限は送信待ち1,024通、
|
|
822
|
+
封筒 JSON 合計32 MiB、封筒1通256 KiB、メッセージ・受信記録は各10,000件です。
|
|
823
|
+
容量不足・保存失敗は固定のエラーとして報告し、未保存の送信や有効な記録の追い出しは行いません。
|
|
824
|
+
|
|
825
|
+
組み込みホストは `deliveryService` または `deliveryOptions` を注入し、
|
|
826
|
+
`startDelivery()`/`stopDelivery()` で稼働を制御できます。独自の transport で再起動後も
|
|
827
|
+
送るには固定の relay URL と resolver が必要です。名前のない注入 transport は従来の
|
|
828
|
+
一時的な動作です。初期化・道具の一覧・ローカル読み取りでは送信を開始せず、鍵も作りません。
|
|
829
|
+
transport の `send()` 単体は1回の試行のままです。この変更に relay の配備は不要で、
|
|
830
|
+
受理後の封筒には既存の relay の保持期間が適用されます。
|
|
831
|
+
[relay の動作](docs/relay-reliability.ja.md)も参照してください。
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
MCP の送信の3道具 (`acp_delegate_task`・`acp_delegate_multi`・
|
|
835
|
+
`acp_resubmit_pending_request`) は任意の `idempotencyKey` を受け付けます。
|
|
836
|
+
Unicode 文字列を正規化せず UTF-8 の1〜200バイトで指定します
|
|
837
|
+
(例: `"idempotencyKey":"review-2026-11-02"`)。同じ署名者・道具・キー・内容なら
|
|
838
|
+
再起動後も最初の結果を返し、送信と承認を繰り返しません。内容が違えば
|
|
839
|
+
`IDEMPOTENCY_CONFLICT` となり、新しいキーが必要です。キーと結果は元の期限
|
|
840
|
+
(複数では最も遅い子の期限)の7日後まで保持します。保留の再参照では再依頼せず、
|
|
841
|
+
試行回数も増やしません。別サーバーは `IDEMPOTENCY_IN_PROGRESS`、中断後は
|
|
842
|
+
`APPROVAL_INTERRUPTED` または `IDEMPOTENCY_RESULT_UNAVAILABLE` を返し、承認や実行を
|
|
843
|
+
やり直しません。最終検収は別で、キー省略時の動作は従来どおりです。
|
|
844
|
+
保持期間・ランタイムのフック・復旧は[relay の動作](docs/relay-reliability.ja.md)を参照します。
|
|
845
|
+
relay のデプロイは不要です。
|
|
846
|
+
|
|
847
|
+
### 受信側の配達状態
|
|
848
|
+
|
|
849
|
+
検証済みの 0.2.0 タスクでは、受信側署名付き `DeliveryStatus` で本文を含まない
|
|
850
|
+
保留・開く・アダプターへの引き渡し・終了を記録します。タスク連番・双方向監査とは別です。
|
|
851
|
+
未接続の相手には `received_held` と `closed` だけを返し、後の接続承認でも元の履歴を
|
|
852
|
+
送りません。検査・表示だけでは開かず、結果成功時の後片付けでは閉じません。
|
|
853
|
+
接続解除は待機中の詳細を、ブロックは待機中の全状態を送信対象から外します。
|
|
854
|
+
版の宣言がない相手は従来の 0.1.0 の動作です。記録は元の配達期限から7日後まで保持し、
|
|
855
|
+
稼働中の保守が期限切れを削除します。引き渡しは既読や実行の証明ではありません。
|
|
856
|
+
両ゲートウェイの対応が必要で、relay の配備は不要です。
|
|
857
|
+
状態の記録元・保持・動作は [relay の動作](docs/relay-reliability.ja.md)を参照してください。
|
|
858
|
+
|
|
859
|
+
### ローカルの送信状態
|
|
860
|
+
|
|
861
|
+
`idempotencyKey` 付き送信のキャッシュ再参照でも、元のメッセージ ID・タスク ID を使います。
|
|
862
|
+
状態照会は送信結果のキャッシュとは独立して、その ID に保存された最新の観測を返します。
|
|
863
|
+
|
|
864
|
+
`acp_message_status {"messageId":"<元の PROPOSE UUID>"}` または
|
|
865
|
+
`acp_message_status {"taskId":"<元のタスク ID>"}` は、送信・更新取得・ポーリング・削除を
|
|
866
|
+
せず送信側の記録を読みます。指定は一方だけにし、複数一致するタスク ID は `messageId` で
|
|
867
|
+
選びます。元の期限(作成時刻が後ならその時刻)の7日後に失効し、不明・別の署名者・
|
|
868
|
+
期限切れは `found:false` です。当初未接続の相手の詳細は `received_held`/`closed` だけです。
|
|
869
|
+
受信側の主張は双方向監査とは別で、引き渡しは既読・実行の証明ではありません。
|
|
870
|
+
委任結果のキャッシュや保留の明示的な再依頼とは別の読み取りです。relay の配備は不要で、
|
|
871
|
+
詳細な観測には相手の C4 対応が必要です。[relay の動作](docs/relay-reliability.ja.md)を参照してください。
|