sealbridge 0.5.0 → 0.6.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.
Files changed (44) hide show
  1. package/README.ja.md +4 -4
  2. package/README.md +5 -4
  3. package/dist/cli/dist/sdk.d.ts +4 -4
  4. package/dist/cli/dist/sdk.js +2 -2
  5. package/dist/cli/dist/sdk.js.map +1 -1
  6. package/dist/cli/dist/task-review.d.ts +1 -8
  7. package/dist/cli/dist/task-review.js +4 -17
  8. package/dist/cli/dist/task-review.js.map +1 -1
  9. package/dist/cli/dist/tasks.js +1 -1
  10. package/dist/cli/dist/tasks.js.map +1 -1
  11. package/dist/package.json +1 -1
  12. package/dist/packages/core/dist/content-inspection-rules.d.ts +22 -0
  13. package/dist/packages/core/dist/content-inspection-rules.js +34 -0
  14. package/dist/packages/core/dist/content-inspection-rules.js.map +1 -0
  15. package/dist/packages/core/dist/content-inspection.d.ts +43 -0
  16. package/dist/packages/core/dist/content-inspection.js +192 -0
  17. package/dist/packages/core/dist/content-inspection.js.map +1 -0
  18. package/dist/packages/core/dist/index.d.ts +2 -0
  19. package/dist/packages/core/dist/index.js +2 -0
  20. package/dist/packages/core/dist/index.js.map +1 -1
  21. package/dist/packages/runtime/dist/a2a.js +1 -1
  22. package/dist/packages/runtime/dist/application-config.js +69 -6
  23. package/dist/packages/runtime/dist/application-config.js.map +1 -1
  24. package/dist/packages/runtime/dist/held-request-store.d.ts +2 -0
  25. package/dist/packages/runtime/dist/held-request-store.js +3 -2
  26. package/dist/packages/runtime/dist/held-request-store.js.map +1 -1
  27. package/dist/packages/runtime/dist/held-task-content.d.ts +14 -0
  28. package/dist/packages/runtime/dist/held-task-content.js +33 -0
  29. package/dist/packages/runtime/dist/held-task-content.js.map +1 -0
  30. package/dist/packages/runtime/dist/index.d.ts +2 -0
  31. package/dist/packages/runtime/dist/index.js +2 -0
  32. package/dist/packages/runtime/dist/index.js.map +1 -1
  33. package/dist/packages/runtime/dist/mcp-server.js +1 -1
  34. package/dist/packages/runtime/dist/rule-content-review-child.d.ts +1 -0
  35. package/dist/packages/runtime/dist/rule-content-review-child.js +25 -0
  36. package/dist/packages/runtime/dist/rule-content-review-child.js.map +1 -0
  37. package/dist/packages/runtime/dist/rule-content-review.d.ts +9 -0
  38. package/dist/packages/runtime/dist/rule-content-review.js +217 -0
  39. package/dist/packages/runtime/dist/rule-content-review.js.map +1 -0
  40. package/dist/packages/runtime/dist/session.js +2 -1
  41. package/dist/packages/runtime/dist/session.js.map +1 -1
  42. package/docs/sdk.ja.md +104 -2
  43. package/docs/sdk.md +116 -2
  44. package/package.json +1 -1
package/README.ja.md CHANGED
@@ -14,7 +14,7 @@ Windows PowerShell:
14
14
  irm https://sealbridge.dev/install.ps1 | iex
15
15
  ```
16
16
 
17
- インストーラーは npm で公開待ちの sealbridge 0.5.0 を固定指定しています。更新したインストーラーは sealbridge@0.5.0 の npm 公開後にのみデプロイしてください。Node 22以上があれば `npm i -g sealbridge` または `npx sealbridge@latest` も使えます。
17
+ インストーラーは npm で公開待ちの sealbridge 0.6.0 を固定指定しています。更新したインストーラーは sealbridge@0.6.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
 
@@ -49,7 +49,7 @@ Node 22 以上と同じインストール先の npm が正常に動く場合は
49
49
 
50
50
  30秒のデモ、音声なし — [MP4を見る](docs/media/sealbridge-demo.mp4)。
51
51
 
52
- > **ステータス**: Sealbridge `v0.5.0` を 2026-11-06 UTC 付けのリリースとして npm パッケージ `sealbridge` で準備中で、公開待ちです。Sealbridge `v0.4.1` は 2026-11-05 UTC に npm パッケージ `sealbridge` として公開されました。Sealbridge `v0.4.0` は 2026-11-05 UTC に npm パッケージ `sealbridge` として公開されました。Sealbridge `v0.3.0` は 2026-11-03 UTC に npm パッケージ `sealbridge` として公開されました。以前の `v1.0.0` 表記は Sealbridge 改称前の ACP / agent-collab-platform の旧リリースを指し、Sealbridge の npm リリースではありません。
52
+ > **ステータス**: Sealbridge `v0.6.0` を 2026-11-08 UTC 付けのリリースとして npm パッケージ `sealbridge` で準備中で、公開待ちです。Sealbridge `v0.5.0` は 2026-11-06 UTC に npm パッケージ `sealbridge` として公開されました。Sealbridge `v0.4.1` は 2026-11-05 UTC に npm パッケージ `sealbridge` として公開されました。Sealbridge `v0.4.0` は 2026-11-05 UTC に npm パッケージ `sealbridge` として公開されました。Sealbridge `v0.3.0` は 2026-11-03 UTC に npm パッケージ `sealbridge` として公開されました。以前の `v1.0.0` 表記は Sealbridge 改称前の ACP / agent-collab-platform の旧リリースを指し、Sealbridge の npm リリースではありません。
53
53
  > **目的**: 異なる所有者の自律エージェントが、相手のランタイムや認証情報を信頼せずに、仕事の分割・委譲・実行・検証・検収を行うためのオープンソースのプロトコルと参照実装です。
54
54
  > **作成者**: [@takapon01234](https://x.com/takapon01234)
55
55
 
@@ -411,7 +411,7 @@ TTY がなければ limited タスクは保留です。`--auto-accept` は検査
411
411
  接続同意は `connections` で行います。従来の `requests approve` は検査済みの依頼に対する
412
412
  接続同意の意味を維持し、実行を承認しません。`--trust trusted` は別の従来の権限付与です。
413
413
 
414
- 未接続の相手からの有効な依頼は、暗号化済み封筒として最大24時間または依頼の期限まで
414
+ 未接続の相手からの有効な依頼は、暗号化済み封筒として、24時間、依頼の期限、ワーカーがすでに読んだ grant の期限の早い方まで
415
415
  保存し、終端の `PENDING_OWNER_APPROVAL`・`retryable:false`・CLI 終了値3を返します。
416
416
  自動再試行はしません。署名・スキーマ・能力・申告予算・公開スキル・運用者の制限は
417
417
  保存や招待の結び付けより前に確認します。新しい受付情報には題名・説明のプレビューを
@@ -481,7 +481,7 @@ sealbridge connections status reviewer --role requester
481
481
  ブロックは片方向で、相手に応答しません。解除・ブロックは次の受付から効き、受諾済みの仕事は
482
482
  明示的な CANCEL で止めます。同時の申し込みは2つの DID を昇順にして同じ接続 ID を導きます。
483
483
  承認・ACK の状態を保存してからリレー受信確認を返します。sync は依頼を再送しません。
484
- 内容の24時間と送信済み同意の14日は別の期限です。
484
+ 内容の保存期限と送信済み同意の14日は別の期限です。
485
485
 
486
486
  依頼の承認と接続への同意は別の判断です。CLI や MCP フォームで順に確認でき、明示的な
487
487
  接続同意がなければ申し込みを添付しません。相手の署名付き同意がない保留依頼を承認した場合、
package/README.md CHANGED
@@ -16,7 +16,7 @@ Windows PowerShell:
16
16
  irm https://sealbridge.dev/install.ps1 | iex
17
17
  ```
18
18
 
19
- The installers pin sealbridge 0.5.0, pending publication on npm. Deploy the updated installers only after sealbridge@0.5.0 is on npm. With Node 22+, you can also use `npm i -g sealbridge` or `npx sealbridge@latest`.
19
+ The installers pin sealbridge 0.6.0, pending publication on npm. Deploy the updated installers only after sealbridge@0.6.0 is on npm. With Node 22+, you can also use `npm i -g sealbridge` or `npx sealbridge@latest`.
20
20
 
21
21
  The installer reuses Node 22 or newer only when its co-installed npm runs successfully; otherwise it installs Node with bundled npm in a user-local directory without changing the existing Node. It verifies the official Node 22.22.0 archive checksum when Node is needed, and asks for no secrets. No telemetry, sudo, Git or pnpm is required. On macOS/Linux open a new terminal or run `. "$HOME/.profile"` after installing; a piped shell cannot change its parent shell's PATH. Windows updates the current session and user PATH. Run `sealbridge doctor`, then `sealbridge demo`. Doctor makes one relay health request; offline warnings do not undo installation.
22
22
 
@@ -53,7 +53,7 @@ To uninstall, download the same script and run `sh install.sh --uninstall` or `&
53
53
 
54
54
  30-second demo, no audio — [watch the MP4](docs/media/sealbridge-demo.mp4).
55
55
 
56
- > **Status**: Sealbridge `v0.5.0` is being prepared for release dated 2026-11-06 UTC on npm as `sealbridge`; publication is pending. Sealbridge `v0.4.1` was published on npm as `sealbridge` on 2026-11-05 UTC. Sealbridge `v0.4.0` was published on npm as `sealbridge` on 2026-11-05 UTC. Sealbridge `v0.3.0` was published on npm as `sealbridge` on 2026-11-03 UTC. The earlier `v1.0.0` label refers to the legacy pre-Sealbridge ACP / agent-collab-platform release, not a Sealbridge npm release.
56
+ > **Status**: Sealbridge `v0.6.0` is being prepared for release dated 2026-11-08 UTC on npm as `sealbridge`; publication is pending. Sealbridge `v0.5.0` was published on npm as `sealbridge` on 2026-11-06 UTC. Sealbridge `v0.4.1` was published on npm as `sealbridge` on 2026-11-05 UTC. Sealbridge `v0.4.0` was published on npm as `sealbridge` on 2026-11-05 UTC. Sealbridge `v0.3.0` was published on npm as `sealbridge` on 2026-11-03 UTC. The earlier `v1.0.0` label refers to the legacy pre-Sealbridge ACP / agent-collab-platform release, not a Sealbridge npm release.
57
57
  > **Target**: An open-source protocol and reference implementation that lets autonomous agents owned by different people split, delegate, run, verify, and accept work without trusting each other's runtimes or credentials.
58
58
  > **Author**: [@takapon01234](https://x.com/takapon01234)
59
59
 
@@ -835,8 +835,9 @@ Connection consent stays on `connections`; legacy `requests approve` retains its
835
835
  connection-consent meaning and requires completed inspection. It never approves
836
836
  task execution. `requests approve --trust trusted` remains a separate legacy grant.
837
837
 
838
- Valid requests from unconnected peers are held as encrypted envelopes for at most
839
- 24 hours or the task deadline. They return terminal `PENDING_OWNER_APPROVAL`,
838
+ Valid requests from unconnected peers are held as encrypted envelopes until the
839
+ earliest of 24 hours, the task deadline, and a grant expiry the worker already
840
+ read. They return terminal `PENDING_OWNER_APPROVAL`,
840
841
  `retryable:false`, CLI exit 3. Do not retry automatically. Schema, signature,
841
842
  capability, declared budget, advertised skill and operator perimeter checks precede
842
843
  holding or invite redemption. New intake metadata has no title or description
@@ -1,8 +1,8 @@
1
1
  /** Supported embedding surface for sealbridge/sdk. Keep exports explicit. */
2
- export { InviteStore, KeychainSecretStore, openKeychainSecretStore, FileKeyStore, KeychainKeyStore, inspectStoredIdentity, resolveStoredIdentity, selectKeyStore, keyStoreSelection, keychainService, resolveDataRoot, readApplicationConfig, setApplicationKeyStore, WorkerTrustStore, workerIntakePath, ConnectionService, ConnectionRouter, syncConnections, StoredConnectionExchange, ConnectionAdmissionReview, HeldRequestReview, unavailableHeldContentReviewProvider, AcpMcpServer, buildTaskManifest, appendContextGrantAuditEvent, CONTEXT_GRANT_AUDIT_EVENTS, RequesterClient, WorkerNode, verifyDelegationAttachment, } from '../../packages/runtime/dist/index.js';
3
- export type { SavedInvite, InviteStoreOptions, SecretStore, DataRootOptions, LocalIdentityOptions, IdentityRole, IdentityStoreOptions, StoredIdentity, KeyStore, KeyStoreDescription, KeyStoreSelection, KeyringEntry, KeyringModule, ApplicationConfig, ApplicationConfigOptions, RelaySelectionOptions, ConnectionState, ConnectionStatus, ConnectionTrust, ConnectionPeer, ConnectionRecord, ConnectionSummary, PriorApprovedPeer, ConnectionServiceOptions, ConnectionServiceResult, ConnectionHumanReviewProvider, ConnectionInspectionPort, ConnectionPersistencePort, ConnectionOffer, ConnectionConsent, ConnectionOutboxEntry, ConnectionAcceptanceCommit, ConnectionRedemptionCommit, ConnectionTransport, ConnectionFrame, ConnectionRouterOptions, ConnectedEvent, ConnectionAdmissionReviewOptions, InboundConnectionSummary, HeldRequestReviewOptions, HeldContentReviewProvider, HeldInspectionContext, InspectionCompletion, AcpMcpServerOptions, ApprovalProvider, ChildDelegationRequest, } from '../../packages/runtime/dist/index.js';
4
- export { generateKeyPair, createSignedAgentCard, verifySignedAgentCard, createInviteToken, inviteTokenFromUri, isInviteTarget, parseAndVerifyInviteToken, discoverAgentCards, findDiscoveredAgentCard, generateInviteLinkKey, deriveInviteLinkKeys, inviteLinkClaimTag, inviteLinkAad, padInviteLinkToken, unpadInviteLinkToken, encryptInviteLink, decryptInviteLink, packInviteLinkCiphertext, unpackInviteLinkCiphertext, parseInviteLink, inviteLinkExpiry, inviteLinkVerificationNumber, INVITE_LINK_CONTEXT, INVITE_LINK_HKDF_INFO, INVITE_LINK_PAD_BLOCK_BYTES, INVITE_LINK_MAX_PADDED_BYTES, INVITE_LINK_DEFAULT_TTL_MS, INVITE_LINK_MAX_TTL_MS, INVITE_LINK_TOKEN_GRACE_MS, buildContextGrant, validateContextGrant, validateManifest, validateContextGrantUse, assertDelegationAttenuation, createDelegationLink, verifyDelegationChain, contextGrantAuditPayload, CONTEXT_GRANT_MAX_BYTES, CONTEXT_GRANT_MAX_LIFETIME_MS, CONTEXT_GRANT_DEFAULT_LIFETIME_MS, } from '../../packages/core/dist/index.js';
5
- export type { KeyPair, Json, Signed, SignedEnvelope, ContextGrant, ContextGrantOptions, DeliveryMode, TaskManifest, ContextGrantAuditEventType, ContextGrantAuditPayload, DelegationLimits, DelegationLinkPayload, DelegationLink, DelegationProof, DelegationAttachment, Invite, AgentSkill, DiscoveryAgentCard, CreateAgentCardOptions, SignedAgentCard, RelayEndpointPolicy, ConnectionRequest, ConnectionAccepted, ConnectionAck, ConnectionControl, InviteLinkKeys, InviteLinkCiphertext, InviteLinkStorage, InviteLinkRelayPolicy, ParsedInviteLink, } from '../../packages/core/dist/index.js';
2
+ export { InviteStore, KeychainSecretStore, openKeychainSecretStore, FileKeyStore, KeychainKeyStore, inspectStoredIdentity, resolveStoredIdentity, selectKeyStore, keyStoreSelection, keychainService, resolveDataRoot, readApplicationConfig, setApplicationKeyStore, WorkerTrustStore, workerIntakePath, ConnectionService, ConnectionRouter, syncConnections, StoredConnectionExchange, ConnectionAdmissionReview, HeldRequestReview, unavailableHeldContentReviewProvider, taskContent, createRuleBasedContentReviewProvider, AcpMcpServer, buildTaskManifest, appendContextGrantAuditEvent, CONTEXT_GRANT_AUDIT_EVENTS, RequesterClient, WorkerNode, verifyDelegationAttachment, } from '../../packages/runtime/dist/index.js';
3
+ export type { SavedInvite, InviteStoreOptions, SecretStore, DataRootOptions, LocalIdentityOptions, IdentityRole, IdentityStoreOptions, StoredIdentity, KeyStore, KeyStoreDescription, KeyStoreSelection, KeyringEntry, KeyringModule, ApplicationConfig, ApplicationConfigOptions, RelaySelectionOptions, ConnectionState, ConnectionStatus, ConnectionTrust, ConnectionPeer, ConnectionRecord, ConnectionSummary, PriorApprovedPeer, ConnectionServiceOptions, ConnectionServiceResult, ConnectionHumanReviewProvider, ConnectionInspectionPort, ConnectionPersistencePort, ConnectionOffer, ConnectionConsent, ConnectionOutboxEntry, ConnectionAcceptanceCommit, ConnectionRedemptionCommit, ConnectionTransport, ConnectionFrame, ConnectionRouterOptions, ConnectedEvent, ConnectionAdmissionReviewOptions, InboundConnectionSummary, HeldRequestReviewOptions, HeldContentReviewProvider, HeldInspectionContext, InspectionCompletion, HeldTaskContent, RuleBasedContentReviewOptions, AcpMcpServerOptions, ApprovalProvider, ChildDelegationRequest, } from '../../packages/runtime/dist/index.js';
4
+ export { inspectRuleContent, CONTENT_INSPECTION_RULES, CONTENT_INSPECTION_RULESET_VERSION, CONTENT_INSPECTION_RULESET_DIGEST, CONTENT_INSPECTION_LIMITS, generateKeyPair, createSignedAgentCard, verifySignedAgentCard, createInviteToken, inviteTokenFromUri, isInviteTarget, parseAndVerifyInviteToken, discoverAgentCards, findDiscoveredAgentCard, generateInviteLinkKey, deriveInviteLinkKeys, inviteLinkClaimTag, inviteLinkAad, padInviteLinkToken, unpadInviteLinkToken, encryptInviteLink, decryptInviteLink, packInviteLinkCiphertext, unpackInviteLinkCiphertext, parseInviteLink, inviteLinkExpiry, inviteLinkVerificationNumber, INVITE_LINK_CONTEXT, INVITE_LINK_HKDF_INFO, INVITE_LINK_PAD_BLOCK_BYTES, INVITE_LINK_MAX_PADDED_BYTES, INVITE_LINK_DEFAULT_TTL_MS, INVITE_LINK_MAX_TTL_MS, INVITE_LINK_TOKEN_GRACE_MS, buildContextGrant, validateContextGrant, validateManifest, validateContextGrantUse, assertDelegationAttenuation, createDelegationLink, verifyDelegationChain, contextGrantAuditPayload, CONTEXT_GRANT_MAX_BYTES, CONTEXT_GRANT_MAX_LIFETIME_MS, CONTEXT_GRANT_DEFAULT_LIFETIME_MS, } from '../../packages/core/dist/index.js';
5
+ export type { RuleInspectionInput, RuleInspectionOptions, RuleInspectionFinding, RuleInspectionReport, RuleInspectionRule, RuleInspectionKind, RuleInspectionDiagnosticCode, KeyPair, Json, Signed, SignedEnvelope, ContextGrant, ContextGrantOptions, DeliveryMode, TaskManifest, ContextGrantAuditEventType, ContextGrantAuditPayload, DelegationLimits, DelegationLinkPayload, DelegationLink, DelegationProof, DelegationAttachment, Invite, AgentSkill, DiscoveryAgentCard, CreateAgentCardOptions, SignedAgentCard, RelayEndpointPolicy, ConnectionRequest, ConnectionAccepted, ConnectionAck, ConnectionControl, InviteLinkKeys, InviteLinkCiphertext, InviteLinkStorage, InviteLinkRelayPolicy, ParsedInviteLink, } from '../../packages/core/dist/index.js';
6
6
  export type { RelayTransport } from '../../packages/relay/dist/index.js';
7
7
  export { connectionsCommand, connectionHumanReview } from './connections.js';
8
8
  export type { ConnectionsCommandOptions } from './connections.js';
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /** Supported embedding surface for sealbridge/sdk. Keep exports explicit. */
3
- export { InviteStore, KeychainSecretStore, openKeychainSecretStore, FileKeyStore, KeychainKeyStore, inspectStoredIdentity, resolveStoredIdentity, selectKeyStore, keyStoreSelection, keychainService, resolveDataRoot, readApplicationConfig, setApplicationKeyStore, WorkerTrustStore, workerIntakePath, ConnectionService, ConnectionRouter, syncConnections, StoredConnectionExchange, ConnectionAdmissionReview, HeldRequestReview, unavailableHeldContentReviewProvider, AcpMcpServer, buildTaskManifest, appendContextGrantAuditEvent, CONTEXT_GRANT_AUDIT_EVENTS, RequesterClient, WorkerNode, verifyDelegationAttachment, } from '../../packages/runtime/dist/index.js';
4
- export { generateKeyPair, createSignedAgentCard, verifySignedAgentCard, createInviteToken, inviteTokenFromUri, isInviteTarget, parseAndVerifyInviteToken, discoverAgentCards, findDiscoveredAgentCard, generateInviteLinkKey, deriveInviteLinkKeys, inviteLinkClaimTag, inviteLinkAad, padInviteLinkToken, unpadInviteLinkToken, encryptInviteLink, decryptInviteLink, packInviteLinkCiphertext, unpackInviteLinkCiphertext, parseInviteLink, inviteLinkExpiry, inviteLinkVerificationNumber, INVITE_LINK_CONTEXT, INVITE_LINK_HKDF_INFO, INVITE_LINK_PAD_BLOCK_BYTES, INVITE_LINK_MAX_PADDED_BYTES, INVITE_LINK_DEFAULT_TTL_MS, INVITE_LINK_MAX_TTL_MS, INVITE_LINK_TOKEN_GRACE_MS, buildContextGrant, validateContextGrant, validateManifest, validateContextGrantUse, assertDelegationAttenuation, createDelegationLink, verifyDelegationChain, contextGrantAuditPayload, CONTEXT_GRANT_MAX_BYTES, CONTEXT_GRANT_MAX_LIFETIME_MS, CONTEXT_GRANT_DEFAULT_LIFETIME_MS, } from '../../packages/core/dist/index.js';
3
+ export { InviteStore, KeychainSecretStore, openKeychainSecretStore, FileKeyStore, KeychainKeyStore, inspectStoredIdentity, resolveStoredIdentity, selectKeyStore, keyStoreSelection, keychainService, resolveDataRoot, readApplicationConfig, setApplicationKeyStore, WorkerTrustStore, workerIntakePath, ConnectionService, ConnectionRouter, syncConnections, StoredConnectionExchange, ConnectionAdmissionReview, HeldRequestReview, unavailableHeldContentReviewProvider, taskContent, createRuleBasedContentReviewProvider, AcpMcpServer, buildTaskManifest, appendContextGrantAuditEvent, CONTEXT_GRANT_AUDIT_EVENTS, RequesterClient, WorkerNode, verifyDelegationAttachment, } from '../../packages/runtime/dist/index.js';
4
+ export { inspectRuleContent, CONTENT_INSPECTION_RULES, CONTENT_INSPECTION_RULESET_VERSION, CONTENT_INSPECTION_RULESET_DIGEST, CONTENT_INSPECTION_LIMITS, generateKeyPair, createSignedAgentCard, verifySignedAgentCard, createInviteToken, inviteTokenFromUri, isInviteTarget, parseAndVerifyInviteToken, discoverAgentCards, findDiscoveredAgentCard, generateInviteLinkKey, deriveInviteLinkKeys, inviteLinkClaimTag, inviteLinkAad, padInviteLinkToken, unpadInviteLinkToken, encryptInviteLink, decryptInviteLink, packInviteLinkCiphertext, unpackInviteLinkCiphertext, parseInviteLink, inviteLinkExpiry, inviteLinkVerificationNumber, INVITE_LINK_CONTEXT, INVITE_LINK_HKDF_INFO, INVITE_LINK_PAD_BLOCK_BYTES, INVITE_LINK_MAX_PADDED_BYTES, INVITE_LINK_DEFAULT_TTL_MS, INVITE_LINK_MAX_TTL_MS, INVITE_LINK_TOKEN_GRACE_MS, buildContextGrant, validateContextGrant, validateManifest, validateContextGrantUse, assertDelegationAttenuation, createDelegationLink, verifyDelegationChain, contextGrantAuditPayload, CONTEXT_GRANT_MAX_BYTES, CONTEXT_GRANT_MAX_LIFETIME_MS, CONTEXT_GRANT_DEFAULT_LIFETIME_MS, } from '../../packages/core/dist/index.js';
5
5
  export { connectionsCommand, connectionHumanReview } from './connections.js';
6
6
  export { mcpServerCommand, parseMcpServerArgs, mcpServerOptionsFromArgs } from './mcp.js';
7
7
  export { parseJsonl, verifyAudit, parseAuditJsonl, verifyAuditEvidence, createAuditInterruption, JsonlStore, MemoryStore, BilateralLedger } from '../../packages/ledger/dist/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,6EAA6E;AAC7E,OAAO,EACL,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,EACzD,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAC5E,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EACnE,qBAAqB,EAAE,sBAAsB,EAC7C,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,wBAAwB,EAAE,yBAAyB,EACzG,iBAAiB,EAAE,oCAAoC,EACvD,YAAY,EACZ,iBAAiB,EAAE,4BAA4B,EAAE,0BAA0B,EAC3E,eAAe,EAAE,UAAU,EAAE,0BAA0B,GACxD,MAAM,cAAc,CAAC;AAetB,OAAO,EACL,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,EAC7D,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,yBAAyB,EAChF,kBAAkB,EAAE,uBAAuB,EAC3C,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,aAAa,EAC9E,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAC9E,wBAAwB,EAAE,0BAA0B,EAAE,eAAe,EAAE,gBAAgB,EACvF,4BAA4B,EAC5B,mBAAmB,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,4BAA4B,EACrG,0BAA0B,EAAE,sBAAsB,EAAE,0BAA0B,EAC9E,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,uBAAuB,EAClF,2BAA2B,EAAE,oBAAoB,EAAE,qBAAqB,EACxE,wBAAwB,EAAE,uBAAuB,EAAE,6BAA6B,EAChF,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAWnB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAG1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,uBAAuB,EAC7F,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,6EAA6E;AAC7E,OAAO,EACL,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,EACzD,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAC5E,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EACnE,qBAAqB,EAAE,sBAAsB,EAC7C,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,wBAAwB,EAAE,yBAAyB,EACzG,iBAAiB,EAAE,oCAAoC,EAAE,WAAW,EACpE,oCAAoC,EACpC,YAAY,EACZ,iBAAiB,EAAE,4BAA4B,EAAE,0BAA0B,EAC3E,eAAe,EAAE,UAAU,EAAE,0BAA0B,GACxD,MAAM,cAAc,CAAC;AAgBtB,OAAO,EACL,kBAAkB,EAAE,wBAAwB,EAAE,kCAAkC,EAChF,iCAAiC,EAAE,yBAAyB,EAC5D,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,EAC7D,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,yBAAyB,EAChF,kBAAkB,EAAE,uBAAuB,EAC3C,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,aAAa,EAC9E,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAC9E,wBAAwB,EAAE,0BAA0B,EAAE,eAAe,EAAE,gBAAgB,EACvF,4BAA4B,EAC5B,mBAAmB,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,4BAA4B,EACrG,0BAA0B,EAAE,sBAAsB,EAAE,0BAA0B,EAC9E,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,uBAAuB,EAClF,2BAA2B,EAAE,oBAAoB,EAAE,qBAAqB,EACxE,wBAAwB,EAAE,uBAAuB,EAAE,6BAA6B,EAChF,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAanB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAG1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,uBAAuB,EAC7F,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -1,13 +1,6 @@
1
- import type { Json, KeyPair, SignedEnvelope, TaskManifest } from '../../packages/core/dist/index.js';
2
1
  import type { HeldContentReviewProvider } from '../../packages/runtime/dist/index.js';
2
+ export { taskContent } from '../../packages/runtime/dist/index.js';
3
3
  /** JSON is literal owner-facing data. Escape format controls as well as terminal controls. */
4
4
  export declare function literalText(value: unknown): string;
5
- export declare function taskContent(envelope: SignedEnvelope, owner: KeyPair, contentDigest: string): {
6
- manifest: TaskManifest;
7
- input: Json;
8
- capabilityChains: string | number | boolean | Json[] | {
9
- [key: string]: Json;
10
- };
11
- };
12
5
  /** Completion means validated content was rendered, never that execution was authorized. */
13
6
  export declare function cliTaskInspection(output: (text: string) => void | Promise<void>): HeldContentReviewProvider;
@@ -1,31 +1,18 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- import { digest, openEnvelope, validateManifest, verifySigned } from '../../packages/core/dist/index.js';
3
- import { heldContentDigest } from '../../packages/runtime/dist/index.js';
2
+ import { digest } from '../../packages/core/dist/index.js';
3
+ import { taskContent } from '../../packages/runtime/dist/index.js';
4
+ export { taskContent } from '../../packages/runtime/dist/index.js';
4
5
  /** JSON is literal owner-facing data. Escape format controls as well as terminal controls. */
5
6
  export function literalText(value) {
6
7
  return JSON.stringify(value, null, 2).replace(/[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/gu, c => c === '\n' ? c :
7
8
  c.split('').map(unit => '\\u' + unit.charCodeAt(0).toString(16).padStart(4, '0')).join(''));
8
9
  }
9
- export function taskContent(envelope, owner, contentDigest) {
10
- const body = openEnvelope(envelope, owner);
11
- const manifest = body?.proposal?.payload;
12
- validateManifest(manifest);
13
- if (envelope.payload.eventType !== 'PROPOSE' || envelope.payload.seq !== 0 ||
14
- manifest.taskId !== envelope.payload.taskId || manifest.worker?.ownerDid !== owner.did ||
15
- manifest.requester.ownerDid !== envelope.payload.senderDid || !verifySigned(body.proposal, manifest.requester.ownerDid) ||
16
- heldContentDigest('task', body) !== contentDigest)
17
- throw new Error('INVALID_PROPOSAL');
18
- // Transport credentials and invitations are not task content.
19
- return { manifest, input: body.input, capabilityChains: body.capabilityChains ?? [] };
20
- }
21
10
  /** Completion means validated content was rendered, never that execution was authorized. */
22
11
  export function cliTaskInspection(output) {
23
12
  return { async inspect(envelope, context, signal) {
24
13
  if (context.kind !== 'task' || signal.aborted)
25
14
  throw new Error('INSPECTION_INCOMPLETE');
26
- const content = taskContent(envelope, context.owner, context.contentDigest);
27
- if (digest(envelope) !== context.envelopeDigest)
28
- throw new Error('INVALID_PROPOSAL');
15
+ const content = taskContent(envelope, context.owner, context.contentDigest, context.envelopeDigest);
29
16
  await output(literalText({ heldId: context.recordId, ...content }));
30
17
  if (signal.aborted)
31
18
  throw new Error('INSPECTION_INCOMPLETE');
@@ -1 +1 @@
1
- {"version":3,"file":"task-review.js","sourceRoot":"","sources":["../src/task-review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-review.js","sourceRoot":"","sources":["../src/task-review.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,8FAA8F;AAC9F,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAAC,MAA8C;IAC9E,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM;YAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACxF,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YACpG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC7D,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc;gBAC9F,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU;gBACxD,YAAY,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC;QACnG,CAAC,EAAE,CAAC;AACN,CAAC"}
@@ -49,7 +49,7 @@ export async function tasksCommand(args, options = {}) {
49
49
  // A cached receipt cannot stand in for display during this owner operation.
50
50
  if (held.inspectionStatus === 'complete') {
51
51
  const record = review.store.read(held.id);
52
- await output(literalText({ heldId: held.id, ...taskContent(record.envelope, key, held.contentDigest) }));
52
+ await output(literalText({ heldId: held.id, ...taskContent(record.envelope, key, held.contentDigest, record.envelopeDigest) }));
53
53
  }
54
54
  else if ((await review.inspect(held.id)).inspectionStatus !== 'complete')
55
55
  throw new Error('INSPECTION_INCOMPLETE');
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtI,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,KAAK,GAAG,ozBAAozB,CAAC;AAEn0B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,UAG/C,EAAE;IACJ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC,CAAC;IACJ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACpF,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,GAAa,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACzD,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;YACxG,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IAC7C,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5F,MAAM,GAAG,GAAG,CAAC,MAAM,qBAAqB,CAAC,IAA8B,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/F,IAAI,CAAC,GAAG,EAAE,CAAC;QAAC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1J,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC3D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAAC,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACtG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC/E,4EAA4E;IAC5E,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;QAC3C,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3G,CAAC;SAAM,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACrH,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO;IAC9B,IAAI,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;QAChF,aAAa,EAAE,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc;QACzD,MAAM,EAAE,0HAA0H,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;QACtJ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,0FAA0F;IAC1F,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK;QAC5F,iBAAiB,EAAE,MAAM,KAAK,SAAS,EAAE,QAAQ,EAAE,oGAAoG,EAAE,CAAC,CAAC,CAAC;AAChK,CAAC"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -1 +1 @@
1
- {"type":"module","version":"0.5.0"}
1
+ {"type":"module","version":"0.6.0"}
@@ -0,0 +1,22 @@
1
+ export type RuleInspectionKind = 'size' | 'format' | 'invisible_text' | 'injection' | 'url' | 'secret_request' | 'secret_present' | 'executable';
2
+ export interface RuleInspectionRule {
3
+ readonly id: string;
4
+ readonly kind: RuleInspectionKind;
5
+ readonly severity: 'info' | 'warn' | 'block';
6
+ readonly detector: 'bounds' | 'unicode' | 'phrase' | 'url' | 'secret' | 'code' | 'base64';
7
+ readonly noteCode: string;
8
+ readonly pattern?: string;
9
+ readonly flags?: string;
10
+ readonly terms?: readonly string[];
11
+ }
12
+ export declare const CONTENT_INSPECTION_LIMITS: Readonly<{
13
+ maxBytes: number;
14
+ maxDepth: 32;
15
+ maxNodes: 100000;
16
+ maxStringLength: number;
17
+ maxFindings: 100;
18
+ maxDecodedBytes: number;
19
+ }>;
20
+ export declare const CONTENT_INSPECTION_RULESET_VERSION = "1.0.0";
21
+ export declare const CONTENT_INSPECTION_RULES: readonly RuleInspectionRule[];
22
+ export declare const CONTENT_INSPECTION_RULESET_DIGEST: string;
@@ -0,0 +1,34 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { digest } from './crypto.js';
3
+ export const CONTENT_INSPECTION_LIMITS = Object.freeze({
4
+ maxBytes: 256 * 1024, maxDepth: 32, maxNodes: 100_000, maxStringLength: 64 * 1024,
5
+ maxFindings: 100, maxDecodedBytes: 64 * 1024,
6
+ });
7
+ export const CONTENT_INSPECTION_RULESET_VERSION = '1.0.0';
8
+ // Descriptors and detector implementation are versioned together. No caller-supplied rules.
9
+ const descriptors = [
10
+ { id: 'bounds', kind: 'size', severity: 'block', detector: 'bounds', noteCode: 'CONTENT_BOUND' },
11
+ { id: 'format', kind: 'format', severity: 'block', detector: 'bounds', noteCode: 'JSON_FORMAT' },
12
+ { id: 'unicode', kind: 'invisible_text', severity: 'warn', detector: 'unicode', noteCode: 'INVISIBLE_TEXT',
13
+ pattern: '[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u202a-\\u202e\\u2060-\\u206f\\ufeff\\u{e0000}-\\u{e007f}]', flags: 'gu' },
14
+ { id: 'instruction-phrases', kind: 'injection', severity: 'warn', detector: 'phrase', noteCode: 'INSTRUCTION_PHRASE',
15
+ pattern: 'ignore\\s+(?:all\\s+)?previous\\s+instructions|system\\s+prompt|以前の指示を無視|あなたは今から', flags: 'giu' },
16
+ { id: 'url', kind: 'url', severity: 'warn', detector: 'url', noteCode: 'URL_FORM',
17
+ pattern: '(?:[a-z][a-z0-9+.-]*://|(?:https?|ftp|file|mailto|tel|ssh|wss?|data|javascript):|www\\.)[^\\s<>"\\x60]+', flags: 'giu',
18
+ terms: ['bit.ly', 't.co', 'tinyurl.com', 'goo.gl', 'is.gd', 'buff.ly', 'ow.ly'] },
19
+ { id: 'secret-request', kind: 'secret_request', severity: 'warn', detector: 'secret', noteCode: 'SECRET_REQUEST',
20
+ pattern: 'api[ _-]?(?:key|キー)|\\.env\\b|~?/\\.ssh\\b|id_rsa|token|password|トークン|パスワード|秘密鍵|認証情報', flags: 'giu',
21
+ terms: ['send', 'paste', 'disclose', 'share', 'reveal', 'upload', '送', '貼', '開示', '教え', '共有'] },
22
+ { id: 'secret-present', kind: 'secret_present', severity: 'warn', detector: 'secret', noteCode: 'SECRET_FORM',
23
+ pattern: '-----BEGIN (?:RSA |EC |OPENSSH |DSA |ENCRYPTED )?PRIVATE KEY-----|(?:AKIA|ASIA)[A-Z0-9]{16}\\b|gh[pousr]_[A-Za-z0-9]{36,255}\\b|github_pat_[A-Za-z0-9_]{22,255}\\b|npm_[A-Za-z0-9]{36}\\b|sk-(?:proj-)?[A-Za-z0-9_-]{20,255}\\b', flags: 'gu' },
24
+ { id: 'code', kind: 'executable', severity: 'warn', detector: 'code', noteCode: 'CODE_FORM',
25
+ pattern: '^#![^\\r\\n]+|```|<script\\b|\\b(?:bash|sh|zsh)\\s+(?:-c\\b|[^\\s]+\\.sh\\b)|\\b(?:powershell|pwsh)(?:\\.exe)?\\s+-|\\b(?:Invoke-Expression|Start-Process)\\b|\\b(?:curl|wget)\\b[^\\r\\n|]{0,256}\\|\\s*(?:ba)?sh\\b', flags: 'gimu' },
26
+ { id: 'base64', kind: 'executable', severity: 'warn', detector: 'base64', noteCode: 'BASE64_FORM',
27
+ pattern: '(?<![A-Za-z0-9+/])[A-Za-z0-9+/]{80,}={0,2}(?![A-Za-z0-9+/=])', flags: 'gu' },
28
+ { id: 'binary-magic', kind: 'executable', severity: 'block', detector: 'base64', noteCode: 'BINARY_OR_ARCHIVE' },
29
+ ];
30
+ export const CONTENT_INSPECTION_RULES = Object.freeze(descriptors.map(rule => Object.freeze({ ...rule, ...(rule.terms ? { terms: Object.freeze([...rule.terms]) } : {}) })));
31
+ export const CONTENT_INSPECTION_RULESET_DIGEST = digest({
32
+ detectorVersion: CONTENT_INSPECTION_RULESET_VERSION, rules: CONTENT_INSPECTION_RULES, limits: CONTENT_INSPECTION_LIMITS,
33
+ });
34
+ //# sourceMappingURL=content-inspection-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-inspection-rules.js","sourceRoot":"","sources":["../src/content-inspection-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Json, TaskManifest } from './types.js';
2
+ import type { RuleInspectionKind } from './content-inspection-rules.js';
3
+ export interface RuleInspectionInput {
4
+ manifest: TaskManifest;
5
+ input: Json;
6
+ capabilityChains?: Json;
7
+ }
8
+ export interface RuleInspectionOptions {
9
+ maxBytes?: number;
10
+ maxDepth?: number;
11
+ maxNodes?: number;
12
+ maxStringLength?: number;
13
+ maxFindings?: number;
14
+ maxDecodedBytes?: number;
15
+ }
16
+ export interface RuleInspectionFinding {
17
+ ruleId: string;
18
+ kind: RuleInspectionKind;
19
+ severity: 'info' | 'warn' | 'block';
20
+ location?: {
21
+ path: string;
22
+ start?: number;
23
+ end?: number;
24
+ };
25
+ noteCode: string;
26
+ }
27
+ export type RuleInspectionDiagnosticCode = 'LIMIT_EXCEEDED' | 'ABORTED' | 'TIMEOUT' | 'INVALID_CONTENT' | 'INSPECTOR_FAILED';
28
+ export interface RuleInspectionReport {
29
+ inspectorId: 'rules';
30
+ inspectorVersion: string;
31
+ rulesetDigest: string;
32
+ contentDigest: string;
33
+ sizeBytes: number;
34
+ limits: Required<RuleInspectionOptions>;
35
+ status: 'ok' | 'error';
36
+ verdict: 'pass' | 'warn' | 'block' | 'error';
37
+ findings: RuleInspectionFinding[];
38
+ diagnostics: {
39
+ code: RuleInspectionDiagnosticCode;
40
+ }[];
41
+ }
42
+ /** Offline heuristic inspection. Limits are local and may only be lowered. Content is never executed. */
43
+ export declare function inspectRuleContent(content: RuleInspectionInput, options?: RuleInspectionOptions, signal?: AbortSignal): Promise<RuleInspectionReport>;
@@ -0,0 +1,192 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { digest } from './crypto.js';
3
+ import { validateManifest } from './schema.js';
4
+ import { CONTENT_INSPECTION_LIMITS, CONTENT_INSPECTION_RULES, CONTENT_INSPECTION_RULESET_DIGEST, CONTENT_INSPECTION_RULESET_VERSION } from './content-inspection-rules.js';
5
+ const pointer = (segment) => segment.replace(/~/gu, '~0').replace(/\//gu, '~1');
6
+ // Ordinary pointer keys locate content; keys containing potential evidence use a fixed marker.
7
+ function pathSegment(key) {
8
+ const redact = key.length > 80 || /[\p{C}]|[a-z][a-z0-9+.-]*:|api.?key|token|password|secret|\.env|\.ssh|id_rsa|パスワード|トークン|秘密/iu.test(key) ||
9
+ CONTENT_INSPECTION_RULES.some(rule => rule.pattern && new RegExp(rule.pattern, rule.flags).test(key));
10
+ return pointer(redact ? '[redacted]' : key);
11
+ }
12
+ function binaryMagic(bytes) {
13
+ const hex = bytes.subarray(0, 8).toString('hex');
14
+ return ['4d5a', '7f454c46', 'cafebabe', 'cefaedfe', 'cffaedfe', 'feedface', 'feedfacf',
15
+ '504b0304', '504b0506', '504b0708', '1f8b', '377abcaf271c', '526172211a07', '425a68', 'fd377a585a00', '0061736d']
16
+ .some(magic => hex.startsWith(magic)) || bytes.subarray(257, 262).toString('ascii') === 'ustar';
17
+ }
18
+ /** Offline heuristic inspection. Limits are local and may only be lowered. Content is never executed. */
19
+ export async function inspectRuleContent(content, options = {}, signal) {
20
+ const limits = { ...CONTENT_INSPECTION_LIMITS };
21
+ const findings = [];
22
+ let sizeBytes = 0, nodes = 0, decodedBytes = 0;
23
+ let contentDigest = digest(null);
24
+ let failure;
25
+ const stop = (code) => { throw code; };
26
+ const checkAbort = () => { if (signal?.aborted)
27
+ stop('ABORTED'); };
28
+ const addBytes = (bytes) => { sizeBytes += bytes; if (sizeBytes > limits.maxBytes)
29
+ stop('LIMIT_EXCEEDED'); };
30
+ const add = (rule, path, start, end) => {
31
+ if (findings.length >= limits.maxFindings)
32
+ stop('LIMIT_EXCEEDED');
33
+ findings.push({ ruleId: rule.id, kind: rule.kind, severity: rule.severity, noteCode: rule.noteCode,
34
+ ...(path === undefined ? {} : { location: { path, ...(start === undefined ? {} : { start, end }) } }) });
35
+ };
36
+ const seen = new Set();
37
+ const strings = [];
38
+ const count = async () => {
39
+ checkAbort();
40
+ if (++nodes > limits.maxNodes)
41
+ stop('LIMIT_EXCEEDED');
42
+ if (nodes % 256 === 0) {
43
+ await new Promise(resolve => setImmediate(resolve));
44
+ checkAbort();
45
+ }
46
+ };
47
+ const string = (value, path, order) => {
48
+ if (/[\uD800-\uDFFF]/u.test(value))
49
+ stop('INVALID_CONTENT');
50
+ if (Buffer.byteLength(value) > limits.maxStringLength)
51
+ stop('LIMIT_EXCEEDED');
52
+ addBytes(Buffer.byteLength(JSON.stringify(value)));
53
+ strings.push({ value, path, order });
54
+ };
55
+ // Validate JSON without invoking accessors/toJSON, then hash only the bounded snapshot.
56
+ async function visit(value, path, depth, order = '') {
57
+ await count();
58
+ if (depth > limits.maxDepth)
59
+ stop('LIMIT_EXCEEDED');
60
+ if (typeof value === 'string') {
61
+ string(value, path, order);
62
+ return value;
63
+ }
64
+ if (value === null || typeof value === 'boolean' || typeof value === 'number' && Number.isFinite(value)) {
65
+ addBytes(Buffer.byteLength(JSON.stringify(value)));
66
+ return value;
67
+ }
68
+ if (!value || typeof value !== 'object' || seen.has(value))
69
+ return stop('INVALID_CONTENT');
70
+ const array = Array.isArray(value);
71
+ if (!array && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)
72
+ return stop('INVALID_CONTENT');
73
+ seen.add(value);
74
+ const keys = Reflect.ownKeys(value);
75
+ if (keys.some(key => typeof key !== 'string'))
76
+ return stop('INVALID_CONTENT');
77
+ if (keys.length > limits.maxNodes - nodes + (array ? 1 : 0))
78
+ return stop('LIMIT_EXCEEDED');
79
+ const result = array ? [] : Object.create(null);
80
+ const ordered = array ? keys.filter(key => key !== 'length') : keys.sort((a, b) => pointer(a) < pointer(b) ? -1 : pointer(a) > pointer(b) ? 1 : 0);
81
+ if (array && ordered.length !== value.length)
82
+ return stop('INVALID_CONTENT');
83
+ addBytes(2);
84
+ for (let i = 0; i < ordered.length; i++) {
85
+ const key = ordered[i];
86
+ if (array && key !== String(i))
87
+ return stop('INVALID_CONTENT');
88
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
89
+ if (!descriptor.enumerable || !Object.hasOwn(descriptor, 'value'))
90
+ return stop('INVALID_CONTENT');
91
+ if (i)
92
+ addBytes(1);
93
+ const nextPath = path + '/' + pathSegment(key);
94
+ const nextOrder = order + '/' + pointer(key);
95
+ if (!array) {
96
+ await count();
97
+ string(key, nextPath, nextOrder);
98
+ addBytes(1);
99
+ }
100
+ const item = await visit(descriptor.value, nextPath, depth + 1, nextOrder);
101
+ if (array)
102
+ result.push(item);
103
+ else
104
+ result[key] = item;
105
+ }
106
+ seen.delete(value);
107
+ return result;
108
+ }
109
+ try {
110
+ checkAbort();
111
+ if (!options || typeof options !== 'object' || Object.keys(options).some(key => !Object.hasOwn(limits, key)))
112
+ stop('INVALID_CONTENT');
113
+ for (const key of Object.keys(limits)) {
114
+ const value = options[key];
115
+ if (value !== undefined) {
116
+ if (!Number.isSafeInteger(value) || value < 1 || value > CONTENT_INSPECTION_LIMITS[key])
117
+ stop('INVALID_CONTENT');
118
+ limits[key] = value;
119
+ }
120
+ }
121
+ const snapshot = await visit(content, '', 0);
122
+ if (!snapshot || typeof snapshot !== 'object' || !Object.hasOwn(snapshot, 'manifest') || !Object.hasOwn(snapshot, 'input') ||
123
+ Object.keys(snapshot).some(key => !['manifest', 'input', 'capabilityChains'].includes(key)))
124
+ stop('INVALID_CONTENT');
125
+ contentDigest = digest({ manifest: snapshot.manifest, input: snapshot.input });
126
+ try {
127
+ validateManifest(snapshot.manifest);
128
+ }
129
+ catch {
130
+ stop('INVALID_CONTENT');
131
+ }
132
+ // Arrays also follow lexical JSON Pointer order (10 precedes 2).
133
+ strings.sort((a, b) => a.order < b.order ? -1 : a.order > b.order ? 1 : 0);
134
+ for (const { value, path } of strings) {
135
+ await new Promise(resolve => setImmediate(resolve));
136
+ checkAbort();
137
+ for (const rule of CONTENT_INSPECTION_RULES) {
138
+ if (!rule.pattern)
139
+ continue;
140
+ const regex = new RegExp(rule.pattern, rule.flags);
141
+ for (const match of value.matchAll(regex)) {
142
+ checkAbort();
143
+ const start = match.index, end = start + match[0].length;
144
+ if (rule.detector === 'unicode' && match[0] === '\u200d' &&
145
+ /\p{Extended_Pictographic}[\uFE0F\p{Emoji_Modifier}]*$/u.test(value.slice(0, start)) &&
146
+ /^\p{Extended_Pictographic}/u.test(value.slice(end)))
147
+ continue;
148
+ if (rule.id === 'secret-request' && !rule.terms.some(term => value.toLowerCase().includes(term)))
149
+ continue;
150
+ if (rule.detector === 'url') {
151
+ try {
152
+ const url = new URL(match[0].startsWith('www.') ? 'https://' + match[0] : match[0]);
153
+ const host = url.hostname.toLowerCase();
154
+ if (url.protocol === 'https:' && !host.includes('xn--') && !/^\[|^\d+(?:\.\d+){3}$/u.test(host) &&
155
+ !rule.terms.includes(host.replace(/^www\./u, '')))
156
+ continue;
157
+ }
158
+ catch { /* A recognized URL form that cannot be parsed is still a finding. */ }
159
+ }
160
+ add(rule, path, start, end);
161
+ if (rule.id === 'base64') {
162
+ const text = match[0];
163
+ const length = Math.floor(text.replace(/=+$/u, '').length * 6 / 8);
164
+ if (decodedBytes + length > limits.maxDecodedBytes)
165
+ stop('LIMIT_EXCEEDED');
166
+ const bytes = Buffer.from(text, 'base64');
167
+ decodedBytes += bytes.length;
168
+ if (binaryMagic(bytes))
169
+ add(CONTENT_INSPECTION_RULES.find(rule => rule.id === 'binary-magic'), path, start, end);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ checkAbort();
175
+ }
176
+ catch (code) {
177
+ failure = ['LIMIT_EXCEEDED', 'ABORTED', 'INVALID_CONTENT'].includes(code)
178
+ ? code : 'INSPECTOR_FAILED';
179
+ if (failure === 'LIMIT_EXCEEDED' || failure === 'INVALID_CONTENT') {
180
+ // Leave room for the failure finding even when the finding cap was reached.
181
+ const rule = CONTENT_INSPECTION_RULES.find(rule => rule.id === (failure === 'LIMIT_EXCEEDED' ? 'bounds' : 'format'));
182
+ if (findings.length >= limits.maxFindings)
183
+ findings.pop();
184
+ findings.push({ ruleId: rule.id, kind: rule.kind, severity: rule.severity, noteCode: rule.noteCode });
185
+ }
186
+ }
187
+ return { inspectorId: 'rules', inspectorVersion: CONTENT_INSPECTION_RULESET_VERSION,
188
+ rulesetDigest: CONTENT_INSPECTION_RULESET_DIGEST, contentDigest, sizeBytes, limits,
189
+ status: failure ? 'error' : 'ok', verdict: failure ? 'error' : findings.some(f => f.severity === 'block') ? 'block' :
190
+ findings.some(f => f.severity === 'warn') ? 'warn' : 'pass', findings, diagnostics: failure ? [{ code: failure }] : [] };
191
+ }
192
+ //# sourceMappingURL=content-inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-inspection.js","sourceRoot":"","sources":["../src/content-inspection.ts"],"names":[],"mappings":"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"}
@@ -14,3 +14,5 @@ export * from './relay-auth.js';
14
14
  export * from './revocation.js';
15
15
  export * from './delivery-status.js';
16
16
  export * from './delegation.js';
17
+ export * from './content-inspection.js';
18
+ export * from './content-inspection-rules.js';
@@ -14,4 +14,6 @@ export * from './relay-auth.js';
14
14
  export * from './revocation.js';
15
15
  export * from './delivery-status.js';
16
16
  export * from './delegation.js';
17
+ export * from './content-inspection.js';
18
+ export * from './content-inspection-rules.js';
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC"}
@@ -7,7 +7,7 @@ export function agentCard(name, url) {
7
7
  name,
8
8
  description: 'Sealbridge owner gateway',
9
9
  supportedInterfaces: [{ url, protocolBinding: 'JSONRPC', protocolVersion: A2A_PROTOCOL_VERSION }],
10
- version: '0.5.0',
10
+ version: '0.6.0',
11
11
  capabilities: { streaming: false },
12
12
  defaultInputModes: ['application/json'],
13
13
  defaultOutputModes: ['application/json'],