sealbridge 0.4.2 → 0.5.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 (115) hide show
  1. package/README.ja.md +4 -2
  2. package/README.md +6 -2
  3. package/dist/cli/dist/accept.d.ts +2 -1
  4. package/dist/cli/dist/accept.js +18 -7
  5. package/dist/cli/dist/accept.js.map +1 -1
  6. package/dist/cli/dist/index.js +46 -13
  7. package/dist/cli/dist/index.js.map +1 -1
  8. package/dist/cli/dist/invite-links.d.ts +14 -0
  9. package/dist/cli/dist/invite-links.js +263 -0
  10. package/dist/cli/dist/invite-links.js.map +1 -0
  11. package/dist/cli/dist/invite-output.d.ts +1 -1
  12. package/dist/cli/dist/invite-output.js +3 -2
  13. package/dist/cli/dist/invite-output.js.map +1 -1
  14. package/dist/cli/dist/network.js +16 -23
  15. package/dist/cli/dist/network.js.map +1 -1
  16. package/dist/cli/dist/receipt.d.ts +12 -2
  17. package/dist/cli/dist/receipt.js +6 -5
  18. package/dist/cli/dist/receipt.js.map +1 -1
  19. package/dist/cli/dist/sdk.d.ts +6 -4
  20. package/dist/cli/dist/sdk.js +3 -2
  21. package/dist/cli/dist/sdk.js.map +1 -1
  22. package/dist/examples/two-owner-demo/dist/run-demo.js +3 -1
  23. package/dist/examples/two-owner-demo/dist/run-demo.js.map +1 -1
  24. package/dist/package.json +1 -1
  25. package/dist/packages/core/dist/context-grant.d.ts +13 -0
  26. package/dist/packages/core/dist/context-grant.js +65 -0
  27. package/dist/packages/core/dist/context-grant.js.map +1 -0
  28. package/dist/packages/core/dist/delegation.d.ts +17 -0
  29. package/dist/packages/core/dist/delegation.js +126 -0
  30. package/dist/packages/core/dist/delegation.js.map +1 -0
  31. package/dist/packages/core/dist/edge.d.ts +2 -0
  32. package/dist/packages/core/dist/edge.js +2 -0
  33. package/dist/packages/core/dist/edge.js.map +1 -1
  34. package/dist/packages/core/dist/index.d.ts +4 -0
  35. package/dist/packages/core/dist/index.js +4 -0
  36. package/dist/packages/core/dist/index.js.map +1 -1
  37. package/dist/packages/core/dist/invite-link.d.ts +72 -0
  38. package/dist/packages/core/dist/invite-link.js +225 -0
  39. package/dist/packages/core/dist/invite-link.js.map +1 -0
  40. package/dist/packages/core/dist/invite-sas.d.ts +7 -0
  41. package/dist/packages/core/dist/invite-sas.js +15 -0
  42. package/dist/packages/core/dist/invite-sas.js.map +1 -0
  43. package/dist/packages/core/dist/relay-auth.d.ts +1 -1
  44. package/dist/packages/core/dist/relay-auth.js +1 -1
  45. package/dist/packages/core/dist/relay-auth.js.map +1 -1
  46. package/dist/packages/core/dist/schema.d.ts +1 -1
  47. package/dist/packages/core/dist/schema.js +4 -0
  48. package/dist/packages/core/dist/schema.js.map +1 -1
  49. package/dist/packages/core/dist/types.d.ts +52 -0
  50. package/dist/packages/ledger/dist/index.d.ts +70 -2
  51. package/dist/packages/ledger/dist/index.js +404 -26
  52. package/dist/packages/ledger/dist/index.js.map +1 -1
  53. package/dist/packages/relay/dist/fetch.js +4 -0
  54. package/dist/packages/relay/dist/fetch.js.map +1 -1
  55. package/dist/packages/relay/dist/invites.d.ts +42 -0
  56. package/dist/packages/relay/dist/invites.js +347 -0
  57. package/dist/packages/relay/dist/invites.js.map +1 -0
  58. package/dist/packages/relay/dist/worker.d.ts +3 -0
  59. package/dist/packages/relay/dist/worker.js +21 -0
  60. package/dist/packages/relay/dist/worker.js.map +1 -1
  61. package/dist/packages/runtime/dist/a2a.js +1 -1
  62. package/dist/packages/runtime/dist/adapter.d.ts +1 -0
  63. package/dist/packages/runtime/dist/approval-providers.d.ts +4 -0
  64. package/dist/packages/runtime/dist/approval-providers.js +3 -0
  65. package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
  66. package/dist/packages/runtime/dist/connection-persistence.d.ts +1 -1
  67. package/dist/packages/runtime/dist/context-grant-audit.d.ts +8 -0
  68. package/dist/packages/runtime/dist/context-grant-audit.js +41 -0
  69. package/dist/packages/runtime/dist/context-grant-audit.js.map +1 -0
  70. package/dist/packages/runtime/dist/delegation.d.ts +37 -0
  71. package/dist/packages/runtime/dist/delegation.js +125 -0
  72. package/dist/packages/runtime/dist/delegation.js.map +1 -0
  73. package/dist/packages/runtime/dist/gateway.d.ts +1 -0
  74. package/dist/packages/runtime/dist/gateway.js.map +1 -1
  75. package/dist/packages/runtime/dist/index.d.ts +2 -0
  76. package/dist/packages/runtime/dist/index.js +2 -0
  77. package/dist/packages/runtime/dist/index.js.map +1 -1
  78. package/dist/packages/runtime/dist/mcp-server.js +22 -8
  79. package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
  80. package/dist/packages/runtime/dist/mcp-tool-catalog.js +44 -5
  81. package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
  82. package/dist/packages/runtime/dist/session-audit.d.ts +6 -1
  83. package/dist/packages/runtime/dist/session-audit.js +35 -4
  84. package/dist/packages/runtime/dist/session-audit.js.map +1 -1
  85. package/dist/packages/runtime/dist/session.d.ts +21 -1
  86. package/dist/packages/runtime/dist/session.js +427 -62
  87. package/dist/packages/runtime/dist/session.js.map +1 -1
  88. package/dist/packages/runtime/dist/task-journal.d.ts +10 -1
  89. package/dist/packages/runtime/dist/task-journal.js +26 -1
  90. package/dist/packages/runtime/dist/task-journal.js.map +1 -1
  91. package/dist/packages/runtime/dist/verifier.d.ts +5 -2
  92. package/dist/packages/runtime/dist/verifier.js +14 -4
  93. package/dist/packages/runtime/dist/verifier.js.map +1 -1
  94. package/dist/spec/audit-entry.schema.json +25 -1
  95. package/dist/spec/audit-evidence.schema.json +179 -0
  96. package/dist/spec/audit-file-record.schema.json +177 -0
  97. package/dist/spec/audit-interruption.schema.json +110 -0
  98. package/dist/spec/context-grant-audit-payload.schema.json +24 -0
  99. package/dist/spec/context-grant.schema.json +146 -0
  100. package/dist/spec/delegation-attachment.schema.json +167 -0
  101. package/dist/spec/delegation-link.schema.json +141 -0
  102. package/dist/spec/examples/context-pooling/approval_redelegation/sample-delegation-attachment.json +413 -0
  103. package/dist/spec/examples/context-pooling/hand_over/sample-context-grant.json +18 -0
  104. package/dist/spec/examples/context-pooling/hand_over/sample-task-manifest.0.2.0.json +94 -0
  105. package/dist/spec/examples/context-pooling/sample-context-grant-audit-payload.json +4 -0
  106. package/dist/spec/examples/context-pooling/view_only/sample-context-grant.json +18 -0
  107. package/dist/spec/examples/context-pooling/view_only/sample-task-manifest.0.2.0.json +94 -0
  108. package/dist/spec/examples/sample-audit-evidence.json +138 -0
  109. package/dist/spec/examples/sample-audit-file-record.json +31 -0
  110. package/dist/spec/examples/sample-audit-interruption.json +29 -0
  111. package/dist/spec/task-manifest.0.2.0.schema.json +87 -1
  112. package/docs/context-grants.md +221 -0
  113. package/docs/sdk.ja.md +4 -0
  114. package/docs/sdk.md +4 -0
  115. package/package.json +3 -2
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { createHash } from 'node:crypto';
3
+ /**
4
+ * Link-path verification number. inviteDigest is the existing canonical
5
+ * `sha256:<64 lowercase hex digits>` string (digest of the verified Invite),
6
+ * encoded as UTF-8 including the prefix, not decoded hex or a hash of token text.
7
+ * Read the first four SHA-256 bytes as an unsigned big-endian integer.
8
+ */
9
+ export function inviteLinkVerificationNumber(inviteDigest) {
10
+ if (typeof inviteDigest !== 'string' || inviteDigest.length !== 71 || !/^sha256:[0-9a-f]{64}$/.test(inviteDigest))
11
+ throw new Error('INVALID_INVITE_DIGEST');
12
+ const hash = createHash('sha256').update('sealbridge/sas/v1', 'utf8').update(inviteDigest, 'utf8').digest();
13
+ return (hash.readUInt32BE(0) % 1_000_000).toString().padStart(6, '0');
14
+ }
15
+ //# sourceMappingURL=invite-sas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-sas.js","sourceRoot":"","sources":["../src/invite-sas.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,YAAoB;IAC/D,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/G,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5G,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { KeyPair } from './types.js';
2
- export type RelayAuthAction = 'receive' | 'stream' | 'subscribe';
2
+ export type RelayAuthAction = 'receive' | 'stream' | 'subscribe' | 'invite-manage';
3
3
  export interface RelayAuthPayload {
4
4
  type: 'RelayAuth';
5
5
  recipientDid: string;
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { signPayload, verifySigned } from './crypto.js';
4
- const RELAY_AUTH_ACTIONS = new Set(['receive', 'stream', 'subscribe']);
4
+ const RELAY_AUTH_ACTIONS = new Set(['receive', 'stream', 'subscribe', 'invite-manage']);
5
5
  /**
6
6
  * Canonical origin for HTTP, SSE, and WebSocket on the same host:port.
7
7
  * `ws:` becomes `http:` and `wss:` becomes `https:` before `origin` is taken.
@@ -1 +1 @@
1
- {"version":3,"file":"relay-auth.js","sourceRoot":"","sources":["../src/relay-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-auth.js","sourceRoot":"","sources":["../src/relay-auth.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Ajv2020 } from 'ajv/dist/2020.js';
2
2
  import type { TaskManifest, Schema } from './types.js';
3
3
  export declare function createAjv(): Ajv2020;
4
4
  export declare const specDirectory: URL;
5
- export declare const SCHEMA_NAMES: readonly ["task-manifest", "task-manifest.0.1.0", "task-manifest.0.2.0", "agent-card", "delivery-status", "envelope", "usage-receipt", "ack-receipt", "capability-token", "approval-receipt", "audit-entry"];
5
+ export declare const SCHEMA_NAMES: readonly ["task-manifest", "task-manifest.0.1.0", "task-manifest.0.2.0", "agent-card", "delivery-status", "envelope", "usage-receipt", "ack-receipt", "capability-token", "approval-receipt", "audit-entry", "context-grant", "context-grant-audit-payload", "delegation-link", "delegation-attachment", "audit-interruption", "audit-evidence", "audit-file-record"];
6
6
  export declare function loadSchema(name: string): Schema;
7
7
  /** Spec files are static. Rebuilding Ajv for every envelope check dominates a session. */
8
8
  export declare function schemaRegistry(): Ajv2020;
@@ -3,6 +3,7 @@ import { readFileSync, readdirSync } from 'node:fs';
3
3
  import { Ajv2020 } from 'ajv/dist/2020.js';
4
4
  import formats from 'ajv-formats';
5
5
  import { isManifestProtocolVersion } from './protocol.js';
6
+ import { validateManifestContextGrant } from './context-grant.js';
6
7
  export function createAjv() {
7
8
  const ajv = new Ajv2020({ allErrors: true, strict: false, validateFormats: true });
8
9
  formats(ajv);
@@ -12,6 +13,8 @@ export const specDirectory = new URL('../../../spec/', import.meta.url);
12
13
  export const SCHEMA_NAMES = [
13
14
  'task-manifest', 'task-manifest.0.1.0', 'task-manifest.0.2.0', 'agent-card',
14
15
  'delivery-status', 'envelope', 'usage-receipt', 'ack-receipt', 'capability-token', 'approval-receipt', 'audit-entry',
16
+ 'context-grant', 'context-grant-audit-payload', 'delegation-link', 'delegation-attachment',
17
+ 'audit-interruption', 'audit-evidence', 'audit-file-record',
15
18
  ];
16
19
  export function loadSchema(name) {
17
20
  if (!SCHEMA_NAMES.some(known => known === name))
@@ -43,6 +46,7 @@ export function validateManifest(value) {
43
46
  if (version !== undefined && !isManifestProtocolVersion(version))
44
47
  throw new Error('PROTOCOL_VERSION_UNSUPPORTED');
45
48
  validateSchema(isManifestProtocolVersion(version) ? 'task-manifest.' + version : 'task-manifest', value);
49
+ validateManifestContextGrant(value);
46
50
  }
47
51
  export function assertSynchronousSchema(schema) {
48
52
  if (!schema || typeof schema !== 'object')
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -97,6 +97,7 @@ export interface BudgetSpec {
97
97
  onOverrun: 'hard_stop' | 'request_hitl_amendment';
98
98
  }
99
99
  export interface TaskManifest {
100
+ contextGrant?: ContextGrant;
100
101
  protocolVersion: string;
101
102
  taskId: string;
102
103
  createdAt: string;
@@ -170,3 +171,54 @@ export interface TaskManifest {
170
171
  };
171
172
  signatures?: Record<string, Signature>;
172
173
  }
174
+ export type DeliveryMode = 'view_only' | 'approval_redelegation' | 'hand_over';
175
+ export interface ContextGrant {
176
+ deliveryMode: DeliveryMode;
177
+ /** Opaque selection declarations; CP1 does not extract data from a source. */
178
+ selectors: string[];
179
+ fieldsAllowed?: string[];
180
+ fieldsDenied?: string[];
181
+ angle: string;
182
+ expiresAt: string;
183
+ maxBytes: number;
184
+ retention: 'ephemeral_view' | 'keep_deliverable';
185
+ inputRetentionAllowed?: boolean;
186
+ outputSchema?: Schema;
187
+ }
188
+ export type ContextGrantOptions = Pick<ContextGrant, 'selectors' | 'angle'> & Partial<Omit<ContextGrant, 'selectors' | 'angle'>>;
189
+ export type ContextGrantAuditEventType = 'CONTEXT_GRANT' | 'CONTEXT_OPENED' | 'CONTEXT_DISCARDED' | 'CONTEXT_DELETION_ATTEMPTED' | 'CONTEXT_MODE';
190
+ export interface ContextGrantAuditPayload {
191
+ grantDigest: string;
192
+ deliveryMode: DeliveryMode;
193
+ }
194
+ /** Cross-task provenance, distinct from the same-task capability chain. */
195
+ export interface DelegationLimits {
196
+ deadline: string;
197
+ expiresAt: string;
198
+ budget: TaskManifest['budget'];
199
+ sandboxPolicy: TaskManifest['sandboxPolicy'];
200
+ verification: TaskManifest['verification'];
201
+ depthRemaining: number;
202
+ }
203
+ export interface DelegationLinkPayload {
204
+ type: 'DelegationLink';
205
+ parentTaskId: string;
206
+ parentContractDigest: string;
207
+ childTaskId: string;
208
+ childContractDigest: string;
209
+ delegatorOwnerDid: string;
210
+ delegateeOwnerDid: string;
211
+ depthRemaining: number;
212
+ limits: DelegationLimits;
213
+ issuedAt: string;
214
+ prevLinkDigest: string | null;
215
+ }
216
+ export type DelegationLink = Signed<DelegationLinkPayload>;
217
+ export interface DelegationProof {
218
+ link: DelegationLink;
219
+ childContract: import('./contract.js').TaskContract;
220
+ }
221
+ export interface DelegationAttachment {
222
+ parentContract: import('./contract.js').TaskContract;
223
+ children: DelegationProof[];
224
+ }
@@ -28,23 +28,64 @@ export interface AuditBundle {
28
28
  receiver: Signed<Signed<Checkpoint>>;
29
29
  };
30
30
  }
31
+ /** Local storage format 1; never a wire event or bilateral checkpoint. */
32
+ export interface AuditInterruption {
33
+ type: 'AuditInterruption';
34
+ formatVersion: 1;
35
+ taskId: string;
36
+ actors: [string, string];
37
+ seq: number;
38
+ prevEntryHash: string;
39
+ acknowledgedPrefix: {
40
+ count: number;
41
+ lastSeq: number;
42
+ head: string;
43
+ entriesDigest: string;
44
+ };
45
+ phase: 'OWNER_APPROVAL' | 'ACCEPT_ACK_WAIT';
46
+ reason: 'SESSION_TIMEOUT' | 'WORKER_STOPPED' | 'WORKER_RESTART_OBSERVED';
47
+ observedAt: string;
48
+ }
49
+ export interface InterruptedAuditBundle {
50
+ entries: AuditEntry[];
51
+ interruption: Signed<AuditInterruption>;
52
+ }
53
+ export type AuditEvidence = AuditBundle | InterruptedAuditBundle;
54
+ export type AuditFileRecord = {
55
+ entry: AuditEntry;
56
+ } | {
57
+ checkpoint: AuditBundle['checkpoint'];
58
+ } | {
59
+ interruption: Signed<AuditInterruption>;
60
+ };
61
+ export interface InterruptionStore {
62
+ /** Idempotent only for exactly the same signed terminal record and prefix.
63
+ * beforeWrite must synchronously persist the signed intent; promises are rejected. */
64
+ closeInterrupted(bundle: InterruptedAuditBundle, beforeWrite?: () => void): void;
65
+ }
31
66
  export interface AuditStore {
32
67
  read(): AuditEntry[];
33
68
  append(entry: AuditEntry, checkpoint: AuditBundle['checkpoint']): void;
34
69
  seal?(checkpoint: AuditBundle['checkpoint']): void;
35
70
  }
36
- export declare class MemoryStore implements AuditStore {
71
+ export declare class MemoryStore implements AuditStore, InterruptionStore {
37
72
  #private;
38
73
  read(): AuditEntry[];
39
74
  append(entry: AuditEntry): void;
75
+ seal(checkpoint: AuditBundle['checkpoint']): void;
76
+ closeInterrupted(bundle: InterruptedAuditBundle, beforeWrite?: () => void): void;
40
77
  }
41
- export declare class JsonlStore implements AuditStore {
78
+ export declare class JsonlStore implements AuditStore, InterruptionStore {
42
79
  readonly path: string;
43
80
  constructor(path: string);
81
+ /** All cooperating writers use this exclusive file lock. Never share with an older writer.
82
+ * A lock left by process death is an explicit local recovery operation, never stolen. */
83
+ private exclusive;
44
84
  private records;
45
85
  read(): AuditEntry[];
46
86
  append(entry: AuditEntry): void;
47
87
  seal(checkpoint: AuditBundle['checkpoint']): void;
88
+ closeInterrupted(bundle: InterruptedAuditBundle, beforeWrite?: () => void): void;
48
89
  }
49
90
  export declare function parseJsonl(text: string): AuditBundle;
50
91
  export declare class BilateralLedger {
@@ -82,3 +123,30 @@ export interface AuditVerificationResult {
82
123
  */
83
124
  export declare const AUDIT_VALID_WITHOUT_TRUST_ANCHOR = "VALID (no trust anchor: truncation not checked)";
84
125
  export declare function verifyAudit(bundle: AuditBundle, expected?: AuditVerificationOptions): AuditVerificationResult;
126
+ export interface AuditEvidenceTrustAnchor extends AuditTrustAnchor {
127
+ expectedClosureKind?: 'bilateral' | 'interruption';
128
+ expectedInterruptionHash?: string;
129
+ }
130
+ export interface AuditEvidenceVerificationOptions extends AuditEvidenceTrustAnchor {
131
+ trustAnchor?: AuditEvidenceTrustAnchor;
132
+ }
133
+ export interface InterruptedAuditVerificationResult {
134
+ valid: false;
135
+ status: 'UNILATERALLY_CLOSED' | 'INVALID';
136
+ statusLabel: string;
137
+ reason: string;
138
+ prefixVerified: boolean;
139
+ terminalSignatureVerified: boolean;
140
+ bilateralCheckpointVerified: false;
141
+ trustAnchorVerified: boolean;
142
+ /** For interruption only: an actual tail condition was compared, not identity alone. */
143
+ truncationChecked: boolean;
144
+ closureKind: 'interruption';
145
+ }
146
+ export type AuditEvidenceVerificationResult = AuditVerificationResult | InterruptedAuditVerificationResult;
147
+ /** Read either terminal form, retaining physical JSONL locations out of band. */
148
+ export declare function parseAuditJsonl(text: string): AuditEvidence;
149
+ /** Both formats are verified locally. A worker-only observation never becomes VALID. */
150
+ export declare function verifyAuditEvidence(bundle: unknown, expected?: AuditEvidenceVerificationOptions): AuditEvidenceVerificationResult;
151
+ /** Creates a worker observation; callers must preserve the original prefix and journal the intent before writing. */
152
+ export declare function createAuditInterruption(entries: AuditEntry[], worker: KeyPair, phase: AuditInterruption['phase'], reason: AuditInterruption['reason'], observedAt?: string): Signed<AuditInterruption>;