@scopeblind/passport 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.
@@ -0,0 +1,278 @@
1
+ /**
2
+ * @scopeblind/passport — Type Definitions (Schema Freeze)
3
+ *
4
+ * Seven distinct signed object types that compose the passport system.
5
+ * Manifests are IMMUTABLE once signed. Status changes use separate records.
6
+ *
7
+ * Key model (alpha): Ed25519 only.
8
+ * The `auth_key_bindings` field exists for forward compatibility with
9
+ * P-256 DPoP request-auth keys, but is not populated until lease binding.
10
+ */
11
+ /** Role determines the ID prefix: sb:coach: or sb:agent: */
12
+ type PassportRole = 'coach' | 'agent';
13
+ interface PassportKeyPair {
14
+ /** Ed25519 public key (32 bytes) */
15
+ publicKey: Uint8Array;
16
+ /** Ed25519 secret key (64 bytes) */
17
+ secretKey: Uint8Array;
18
+ /** Derived identifier: sb:coach:<fingerprint> or sb:agent:<fingerprint> */
19
+ kid: string;
20
+ /** Role this key was generated for */
21
+ role: PassportRole;
22
+ /** ISO 8601 timestamp of key generation */
23
+ created_at: string;
24
+ }
25
+ type ManifestType = 'scopeblind:coach-manifest' | 'scopeblind:agent-manifest';
26
+ /** Fields shared by both coach and agent manifests */
27
+ interface BaseManifest {
28
+ /** Discriminator for manifest role */
29
+ type: ManifestType;
30
+ /** Unique identifier: sb:coach:<fingerprint> or sb:agent:<fingerprint> */
31
+ id: string;
32
+ /** Semver version string. Bumped on any config change. */
33
+ version: string;
34
+ /** ID + version of the predecessor, or null for genesis */
35
+ previous_version: string | null;
36
+ /** ISO 8601. Set once at creation. Manifests are immutable — no updated_at. */
37
+ created_at: string;
38
+ /** Base58-encoded Ed25519 public key */
39
+ public_key: string;
40
+ /**
41
+ * Optional P-256 DPoP key IDs bound to this passport.
42
+ * Populated in Sprint 3+ for protect-mcp lease validation.
43
+ * Empty or omitted in alpha.
44
+ */
45
+ auth_key_bindings?: string[];
46
+ }
47
+ interface CoachManifest extends BaseManifest {
48
+ type: 'scopeblind:coach-manifest';
49
+ /** Human-readable coach display name (max 32 chars) */
50
+ display_name: string;
51
+ }
52
+ interface AgentManifest extends BaseManifest {
53
+ type: 'scopeblind:agent-manifest';
54
+ /** Public-facing marketing and search metadata */
55
+ public_profile: AgentPublicProfile;
56
+ /** Cryptographic commitments to agent internals */
57
+ configuration_attestations: AgentConfigAttestations;
58
+ /** Declared capabilities and lease compatibility */
59
+ capability_declarations: AgentCapabilities;
60
+ /** Links to evidence on Acta, keyed by receipt type */
61
+ evidence_pointers: AgentEvidencePointers;
62
+ }
63
+ interface AgentPublicProfile {
64
+ name: string;
65
+ description: string;
66
+ /** Granular domain lanes, e.g. ["coding:bugfix", "analysis:decision"] */
67
+ domain_lanes: string[];
68
+ }
69
+ interface AgentConfigAttestations {
70
+ /** SHA-256 hash commitment to the underlying model (not a marketing tier) */
71
+ model_family_hash: string;
72
+ /** How memory is handled between sessions */
73
+ memory_mode: 'stateless' | 'isolated' | 'shared';
74
+ /** SHA-256 hash of the system prompt. Change triggers a new manifest version. */
75
+ prompt_hash: string;
76
+ }
77
+ interface AgentCapabilities {
78
+ /** Pre-built protect-mcp policy templates this agent is compatible with */
79
+ lease_template_compatibility: string[];
80
+ /** Tool classes the agent requires (e.g. ["database-read", "filesystem-read"]) */
81
+ requested_tool_classes: string[];
82
+ }
83
+ interface AgentEvidencePointers {
84
+ /** Acta topic slugs for arena battle receipts */
85
+ arena_topics?: string[];
86
+ /** Acta topic slugs for real work receipts */
87
+ work_topics?: string[];
88
+ /** Acta topic slugs for restraint/policy compliance receipts */
89
+ restraint_topics?: string[];
90
+ }
91
+ /** Union type for any manifest */
92
+ type Manifest = CoachManifest | AgentManifest;
93
+ /**
94
+ * Signed by the COACH's key, proving ownership of an agent.
95
+ * Separate from the agent manifest to enable transfer, team ownership,
96
+ * and leasing without mutating the manifest.
97
+ */
98
+ interface OwnershipAttestation {
99
+ type: 'scopeblind:ownership-attestation';
100
+ /** Coach's sb:coach:<id> */
101
+ coach_id: string;
102
+ /** Agent's sb:agent:<id> */
103
+ agent_id: string;
104
+ /** Semver version of the agent manifest this attestation covers */
105
+ agent_manifest_version: string;
106
+ /** ISO 8601 */
107
+ granted_at: string;
108
+ }
109
+ /**
110
+ * Separate from the manifest because manifests are immutable.
111
+ * Signed by the entity's own key (self-revocation) or an authority key.
112
+ */
113
+ interface StatusRecord {
114
+ type: 'scopeblind:status-record';
115
+ /** The coach or agent ID whose status is changing */
116
+ target_id: string;
117
+ /** New status */
118
+ status: 'active' | 'suspended' | 'revoked';
119
+ /** Optional human-readable reason */
120
+ reason?: string;
121
+ /** ISO 8601 */
122
+ changed_at: string;
123
+ /** Who issued this status change */
124
+ issuer_id: string;
125
+ }
126
+ type EvidenceReceiptType = 'blindllm:arena-battle' | 'blindllm:coach-uplift' | 'blindllm:formal-debate' | 'protectmcp:restraint';
127
+ /** Agent identity reference within a battle */
128
+ interface BattleParticipant {
129
+ /** sb:agent:<id> or sb:model:<id> for pure baselines */
130
+ id: string;
131
+ /** Semver of the agent manifest at time of battle */
132
+ manifest_version: string;
133
+ }
134
+ interface ArenaBattleReceipt {
135
+ type: 'blindllm:arena-battle';
136
+ battle_id: string;
137
+ lane_id: string;
138
+ agent_a: BattleParticipant;
139
+ agent_b: BattleParticipant;
140
+ /** Present only if coaching was used */
141
+ coach?: {
142
+ id: string;
143
+ coached_side: 'A' | 'B';
144
+ note_hash: string;
145
+ note_length: number;
146
+ };
147
+ winner: 'A' | 'B' | 'tie';
148
+ /** ISO 8601 */
149
+ issued_at: string;
150
+ /** BlindLLM issuer key that signed this receipt */
151
+ issuer_id: string;
152
+ }
153
+ interface CoachUpliftReceipt {
154
+ type: 'blindllm:coach-uplift';
155
+ battle_id: string;
156
+ coach_id: string;
157
+ coached_side: 'A' | 'B';
158
+ uplift_verdict: 'stronger' | 'same' | 'weaker';
159
+ /** ISO 8601 */
160
+ issued_at: string;
161
+ issuer_id: string;
162
+ }
163
+ interface FormalDebateParticipant {
164
+ /** sb:agent:<id> or sb:model:<id> */
165
+ id: string;
166
+ /** Semver of the participant manifest at time of debate */
167
+ manifest_version: string;
168
+ /** Optional coach/owner for the participant */
169
+ coach_id?: string;
170
+ }
171
+ interface FormalDebateReceipt {
172
+ type: 'blindllm:formal-debate';
173
+ debate_id: string;
174
+ spec_id: string;
175
+ lane_id: string;
176
+ artifact_hash: string;
177
+ resolution_hash: string;
178
+ pro: FormalDebateParticipant;
179
+ con: FormalDebateParticipant;
180
+ audience_winner: 'pro' | 'con' | 'tie';
181
+ judge_winner: 'pro' | 'con' | 'tie';
182
+ restraint_result: 'clean' | 'flagged';
183
+ /** ISO 8601 */
184
+ issued_at: string;
185
+ issuer_id: string;
186
+ }
187
+ interface RestraintReceipt {
188
+ type: 'protectmcp:restraint';
189
+ /** The agent whose tool call was evaluated */
190
+ agent_id: string;
191
+ agent_manifest_version: string;
192
+ /** The tool that was called */
193
+ tool_name: string;
194
+ /** Whether the call was allowed or denied */
195
+ decision: 'allow' | 'deny';
196
+ /** If denied, was it an active refusal by the agent or a policy block? */
197
+ denial_type?: 'policy-block' | 'agent-refusal';
198
+ /** ISO 8601 */
199
+ issued_at: string;
200
+ issuer_id: string;
201
+ }
202
+ /** Union type for all evidence receipts */
203
+ type EvidenceReceipt = ArenaBattleReceipt | CoachUpliftReceipt | FormalDebateReceipt | RestraintReceipt;
204
+ /**
205
+ * Links a passport's Ed25519 identity to one or more P-256 DPoP
206
+ * request-auth keys. Used by protect-mcp to verify that an incoming
207
+ * DPoP-authenticated request belongs to a known passport.
208
+ *
209
+ * NOT IMPLEMENTED IN ALPHA. Type defined for schema completeness.
210
+ */
211
+ interface AuthKeyBinding {
212
+ type: 'scopeblind:auth-key-binding';
213
+ /** The passport ID (coach or agent) */
214
+ passport_id: string;
215
+ /** P-256 DPoP key identifier being bound */
216
+ auth_kid: string;
217
+ /** Purpose of the binding */
218
+ purpose: 'request-auth' | 'tool-call' | 'lease';
219
+ /** ISO 8601 */
220
+ bound_at: string;
221
+ /** Optional expiry */
222
+ expires_at?: string;
223
+ }
224
+ /**
225
+ * Wrapper for any signed passport object.
226
+ * Uses @veritasacta/artifacts canonicalization + Ed25519 signing.
227
+ */
228
+ interface SignedEnvelope<T> {
229
+ /** The signed payload */
230
+ payload: T;
231
+ /** Ed25519 signature metadata */
232
+ signature: {
233
+ /** Always 'EdDSA' for Ed25519 */
234
+ alg: 'EdDSA';
235
+ /** The signer's passport kid */
236
+ kid: string;
237
+ /** Hex-encoded Ed25519 signature (128 chars) */
238
+ sig: string;
239
+ };
240
+ }
241
+ /** A complete passport bundle for export/import */
242
+ interface PassportBundle {
243
+ /** The passport keypair (secret key included for owner, omitted for verification) */
244
+ key: PassportKeyPair;
245
+ /** All manifests issued by this passport (version chain) */
246
+ manifests: SignedEnvelope<Manifest>[];
247
+ /** Ownership attestations (for coaches who own agents) */
248
+ ownership_attestations: SignedEnvelope<OwnershipAttestation>[];
249
+ /** Status records */
250
+ status_records: SignedEnvelope<StatusRecord>[];
251
+ }
252
+ /** Encrypted bundle for portable export */
253
+ interface EncryptedPassportBundle {
254
+ /** Encryption algorithm */
255
+ enc: 'aes-256-gcm';
256
+ /** Base64url-encoded encrypted PassportBundle JSON */
257
+ ciphertext: string;
258
+ /** Base64url-encoded initialization vector */
259
+ iv: string;
260
+ /** Whether passphrase protection was used */
261
+ passphrase_protected: boolean;
262
+ }
263
+ /**
264
+ * One canonical payload signed by the coach per battle.
265
+ * NOT micro-action signing. The client signs this once,
266
+ * then BlindLLM verifies and issues its own receipt.
267
+ */
268
+ interface CoachContribution {
269
+ type: 'scopeblind:coach-contribution';
270
+ battle_id: string;
271
+ coach_id: string;
272
+ coached_side: 'A' | 'B';
273
+ note_hash: string;
274
+ note_length: number;
275
+ uplift_verdict?: 'stronger' | 'same' | 'weaker';
276
+ }
277
+
278
+ export type { AgentPublicProfile as A, BaseManifest as B, CoachContribution as C, EncryptedPassportBundle as E, FormalDebateReceipt as F, Manifest as M, OwnershipAttestation as O, PassportBundle as P, RestraintReceipt as R, SignedEnvelope as S, PassportKeyPair as a, PassportRole as b, AgentConfigAttestations as c, AgentCapabilities as d, AgentEvidencePointers as e, AgentManifest as f, CoachManifest as g, StatusRecord as h, ArenaBattleReceipt as i, CoachUpliftReceipt as j, AuthKeyBinding as k, BattleParticipant as l, EvidenceReceipt as m, EvidenceReceiptType as n, FormalDebateParticipant as o, ManifestType as p };
@@ -0,0 +1,278 @@
1
+ /**
2
+ * @scopeblind/passport — Type Definitions (Schema Freeze)
3
+ *
4
+ * Seven distinct signed object types that compose the passport system.
5
+ * Manifests are IMMUTABLE once signed. Status changes use separate records.
6
+ *
7
+ * Key model (alpha): Ed25519 only.
8
+ * The `auth_key_bindings` field exists for forward compatibility with
9
+ * P-256 DPoP request-auth keys, but is not populated until lease binding.
10
+ */
11
+ /** Role determines the ID prefix: sb:coach: or sb:agent: */
12
+ type PassportRole = 'coach' | 'agent';
13
+ interface PassportKeyPair {
14
+ /** Ed25519 public key (32 bytes) */
15
+ publicKey: Uint8Array;
16
+ /** Ed25519 secret key (64 bytes) */
17
+ secretKey: Uint8Array;
18
+ /** Derived identifier: sb:coach:<fingerprint> or sb:agent:<fingerprint> */
19
+ kid: string;
20
+ /** Role this key was generated for */
21
+ role: PassportRole;
22
+ /** ISO 8601 timestamp of key generation */
23
+ created_at: string;
24
+ }
25
+ type ManifestType = 'scopeblind:coach-manifest' | 'scopeblind:agent-manifest';
26
+ /** Fields shared by both coach and agent manifests */
27
+ interface BaseManifest {
28
+ /** Discriminator for manifest role */
29
+ type: ManifestType;
30
+ /** Unique identifier: sb:coach:<fingerprint> or sb:agent:<fingerprint> */
31
+ id: string;
32
+ /** Semver version string. Bumped on any config change. */
33
+ version: string;
34
+ /** ID + version of the predecessor, or null for genesis */
35
+ previous_version: string | null;
36
+ /** ISO 8601. Set once at creation. Manifests are immutable — no updated_at. */
37
+ created_at: string;
38
+ /** Base58-encoded Ed25519 public key */
39
+ public_key: string;
40
+ /**
41
+ * Optional P-256 DPoP key IDs bound to this passport.
42
+ * Populated in Sprint 3+ for protect-mcp lease validation.
43
+ * Empty or omitted in alpha.
44
+ */
45
+ auth_key_bindings?: string[];
46
+ }
47
+ interface CoachManifest extends BaseManifest {
48
+ type: 'scopeblind:coach-manifest';
49
+ /** Human-readable coach display name (max 32 chars) */
50
+ display_name: string;
51
+ }
52
+ interface AgentManifest extends BaseManifest {
53
+ type: 'scopeblind:agent-manifest';
54
+ /** Public-facing marketing and search metadata */
55
+ public_profile: AgentPublicProfile;
56
+ /** Cryptographic commitments to agent internals */
57
+ configuration_attestations: AgentConfigAttestations;
58
+ /** Declared capabilities and lease compatibility */
59
+ capability_declarations: AgentCapabilities;
60
+ /** Links to evidence on Acta, keyed by receipt type */
61
+ evidence_pointers: AgentEvidencePointers;
62
+ }
63
+ interface AgentPublicProfile {
64
+ name: string;
65
+ description: string;
66
+ /** Granular domain lanes, e.g. ["coding:bugfix", "analysis:decision"] */
67
+ domain_lanes: string[];
68
+ }
69
+ interface AgentConfigAttestations {
70
+ /** SHA-256 hash commitment to the underlying model (not a marketing tier) */
71
+ model_family_hash: string;
72
+ /** How memory is handled between sessions */
73
+ memory_mode: 'stateless' | 'isolated' | 'shared';
74
+ /** SHA-256 hash of the system prompt. Change triggers a new manifest version. */
75
+ prompt_hash: string;
76
+ }
77
+ interface AgentCapabilities {
78
+ /** Pre-built protect-mcp policy templates this agent is compatible with */
79
+ lease_template_compatibility: string[];
80
+ /** Tool classes the agent requires (e.g. ["database-read", "filesystem-read"]) */
81
+ requested_tool_classes: string[];
82
+ }
83
+ interface AgentEvidencePointers {
84
+ /** Acta topic slugs for arena battle receipts */
85
+ arena_topics?: string[];
86
+ /** Acta topic slugs for real work receipts */
87
+ work_topics?: string[];
88
+ /** Acta topic slugs for restraint/policy compliance receipts */
89
+ restraint_topics?: string[];
90
+ }
91
+ /** Union type for any manifest */
92
+ type Manifest = CoachManifest | AgentManifest;
93
+ /**
94
+ * Signed by the COACH's key, proving ownership of an agent.
95
+ * Separate from the agent manifest to enable transfer, team ownership,
96
+ * and leasing without mutating the manifest.
97
+ */
98
+ interface OwnershipAttestation {
99
+ type: 'scopeblind:ownership-attestation';
100
+ /** Coach's sb:coach:<id> */
101
+ coach_id: string;
102
+ /** Agent's sb:agent:<id> */
103
+ agent_id: string;
104
+ /** Semver version of the agent manifest this attestation covers */
105
+ agent_manifest_version: string;
106
+ /** ISO 8601 */
107
+ granted_at: string;
108
+ }
109
+ /**
110
+ * Separate from the manifest because manifests are immutable.
111
+ * Signed by the entity's own key (self-revocation) or an authority key.
112
+ */
113
+ interface StatusRecord {
114
+ type: 'scopeblind:status-record';
115
+ /** The coach or agent ID whose status is changing */
116
+ target_id: string;
117
+ /** New status */
118
+ status: 'active' | 'suspended' | 'revoked';
119
+ /** Optional human-readable reason */
120
+ reason?: string;
121
+ /** ISO 8601 */
122
+ changed_at: string;
123
+ /** Who issued this status change */
124
+ issuer_id: string;
125
+ }
126
+ type EvidenceReceiptType = 'blindllm:arena-battle' | 'blindllm:coach-uplift' | 'blindllm:formal-debate' | 'protectmcp:restraint';
127
+ /** Agent identity reference within a battle */
128
+ interface BattleParticipant {
129
+ /** sb:agent:<id> or sb:model:<id> for pure baselines */
130
+ id: string;
131
+ /** Semver of the agent manifest at time of battle */
132
+ manifest_version: string;
133
+ }
134
+ interface ArenaBattleReceipt {
135
+ type: 'blindllm:arena-battle';
136
+ battle_id: string;
137
+ lane_id: string;
138
+ agent_a: BattleParticipant;
139
+ agent_b: BattleParticipant;
140
+ /** Present only if coaching was used */
141
+ coach?: {
142
+ id: string;
143
+ coached_side: 'A' | 'B';
144
+ note_hash: string;
145
+ note_length: number;
146
+ };
147
+ winner: 'A' | 'B' | 'tie';
148
+ /** ISO 8601 */
149
+ issued_at: string;
150
+ /** BlindLLM issuer key that signed this receipt */
151
+ issuer_id: string;
152
+ }
153
+ interface CoachUpliftReceipt {
154
+ type: 'blindllm:coach-uplift';
155
+ battle_id: string;
156
+ coach_id: string;
157
+ coached_side: 'A' | 'B';
158
+ uplift_verdict: 'stronger' | 'same' | 'weaker';
159
+ /** ISO 8601 */
160
+ issued_at: string;
161
+ issuer_id: string;
162
+ }
163
+ interface FormalDebateParticipant {
164
+ /** sb:agent:<id> or sb:model:<id> */
165
+ id: string;
166
+ /** Semver of the participant manifest at time of debate */
167
+ manifest_version: string;
168
+ /** Optional coach/owner for the participant */
169
+ coach_id?: string;
170
+ }
171
+ interface FormalDebateReceipt {
172
+ type: 'blindllm:formal-debate';
173
+ debate_id: string;
174
+ spec_id: string;
175
+ lane_id: string;
176
+ artifact_hash: string;
177
+ resolution_hash: string;
178
+ pro: FormalDebateParticipant;
179
+ con: FormalDebateParticipant;
180
+ audience_winner: 'pro' | 'con' | 'tie';
181
+ judge_winner: 'pro' | 'con' | 'tie';
182
+ restraint_result: 'clean' | 'flagged';
183
+ /** ISO 8601 */
184
+ issued_at: string;
185
+ issuer_id: string;
186
+ }
187
+ interface RestraintReceipt {
188
+ type: 'protectmcp:restraint';
189
+ /** The agent whose tool call was evaluated */
190
+ agent_id: string;
191
+ agent_manifest_version: string;
192
+ /** The tool that was called */
193
+ tool_name: string;
194
+ /** Whether the call was allowed or denied */
195
+ decision: 'allow' | 'deny';
196
+ /** If denied, was it an active refusal by the agent or a policy block? */
197
+ denial_type?: 'policy-block' | 'agent-refusal';
198
+ /** ISO 8601 */
199
+ issued_at: string;
200
+ issuer_id: string;
201
+ }
202
+ /** Union type for all evidence receipts */
203
+ type EvidenceReceipt = ArenaBattleReceipt | CoachUpliftReceipt | FormalDebateReceipt | RestraintReceipt;
204
+ /**
205
+ * Links a passport's Ed25519 identity to one or more P-256 DPoP
206
+ * request-auth keys. Used by protect-mcp to verify that an incoming
207
+ * DPoP-authenticated request belongs to a known passport.
208
+ *
209
+ * NOT IMPLEMENTED IN ALPHA. Type defined for schema completeness.
210
+ */
211
+ interface AuthKeyBinding {
212
+ type: 'scopeblind:auth-key-binding';
213
+ /** The passport ID (coach or agent) */
214
+ passport_id: string;
215
+ /** P-256 DPoP key identifier being bound */
216
+ auth_kid: string;
217
+ /** Purpose of the binding */
218
+ purpose: 'request-auth' | 'tool-call' | 'lease';
219
+ /** ISO 8601 */
220
+ bound_at: string;
221
+ /** Optional expiry */
222
+ expires_at?: string;
223
+ }
224
+ /**
225
+ * Wrapper for any signed passport object.
226
+ * Uses @veritasacta/artifacts canonicalization + Ed25519 signing.
227
+ */
228
+ interface SignedEnvelope<T> {
229
+ /** The signed payload */
230
+ payload: T;
231
+ /** Ed25519 signature metadata */
232
+ signature: {
233
+ /** Always 'EdDSA' for Ed25519 */
234
+ alg: 'EdDSA';
235
+ /** The signer's passport kid */
236
+ kid: string;
237
+ /** Hex-encoded Ed25519 signature (128 chars) */
238
+ sig: string;
239
+ };
240
+ }
241
+ /** A complete passport bundle for export/import */
242
+ interface PassportBundle {
243
+ /** The passport keypair (secret key included for owner, omitted for verification) */
244
+ key: PassportKeyPair;
245
+ /** All manifests issued by this passport (version chain) */
246
+ manifests: SignedEnvelope<Manifest>[];
247
+ /** Ownership attestations (for coaches who own agents) */
248
+ ownership_attestations: SignedEnvelope<OwnershipAttestation>[];
249
+ /** Status records */
250
+ status_records: SignedEnvelope<StatusRecord>[];
251
+ }
252
+ /** Encrypted bundle for portable export */
253
+ interface EncryptedPassportBundle {
254
+ /** Encryption algorithm */
255
+ enc: 'aes-256-gcm';
256
+ /** Base64url-encoded encrypted PassportBundle JSON */
257
+ ciphertext: string;
258
+ /** Base64url-encoded initialization vector */
259
+ iv: string;
260
+ /** Whether passphrase protection was used */
261
+ passphrase_protected: boolean;
262
+ }
263
+ /**
264
+ * One canonical payload signed by the coach per battle.
265
+ * NOT micro-action signing. The client signs this once,
266
+ * then BlindLLM verifies and issues its own receipt.
267
+ */
268
+ interface CoachContribution {
269
+ type: 'scopeblind:coach-contribution';
270
+ battle_id: string;
271
+ coach_id: string;
272
+ coached_side: 'A' | 'B';
273
+ note_hash: string;
274
+ note_length: number;
275
+ uplift_verdict?: 'stronger' | 'same' | 'weaker';
276
+ }
277
+
278
+ export type { AgentPublicProfile as A, BaseManifest as B, CoachContribution as C, EncryptedPassportBundle as E, FormalDebateReceipt as F, Manifest as M, OwnershipAttestation as O, PassportBundle as P, RestraintReceipt as R, SignedEnvelope as S, PassportKeyPair as a, PassportRole as b, AgentConfigAttestations as c, AgentCapabilities as d, AgentEvidencePointers as e, AgentManifest as f, CoachManifest as g, StatusRecord as h, ArenaBattleReceipt as i, CoachUpliftReceipt as j, AuthKeyBinding as k, BattleParticipant as l, EvidenceReceipt as m, EvidenceReceiptType as n, FormalDebateParticipant as o, ManifestType as p };
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@scopeblind/passport",
3
+ "version": "0.3.0",
4
+ "description": "Portable cryptographic identity for AI agents and coaches. Ed25519 passports, immutable manifests, ownership attestations, and evidence receipt verification.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "module": "dist/index.mjs",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./browser": {
15
+ "types": "./dist/browser.d.ts",
16
+ "import": "./dist/browser.mjs",
17
+ "require": "./dist/browser.js"
18
+ }
19
+ },
20
+ "scripts": {
21
+ "build": "tsup src/index.ts src/browser.ts --format cjs,esm --dts --clean --external @noble/curves --external @noble/hashes",
22
+ "test": "vitest run",
23
+ "smoke": "vite --config vite.smoke.config.ts",
24
+ "pack:fresh": "npm run build && npm pack",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md"
30
+ ],
31
+ "keywords": [
32
+ "scopeblind",
33
+ "passport",
34
+ "agent-identity",
35
+ "ed25519",
36
+ "manifest",
37
+ "verifiable-credentials",
38
+ "ai-agent",
39
+ "coach",
40
+ "portable-identity"
41
+ ],
42
+ "author": "Tom Farley <tommy@scopeblind.com>",
43
+ "license": "FSL-1.1-MIT",
44
+ "homepage": "https://www.scopeblind.com",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/tomjwxf/scopeblind-gateway"
48
+ },
49
+ "dependencies": {
50
+ "@noble/curves": "^1.8.0",
51
+ "@noble/hashes": "^1.7.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^20.0.0",
55
+ "tsup": "^8.0.0",
56
+ "typescript": "^5.0.0",
57
+ "vite": "^5.4.21",
58
+ "vitest": "^2.0.0"
59
+ },
60
+ "engines": {
61
+ "node": ">=18.0.0"
62
+ }
63
+ }