@vorionsys/contracts 0.1.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 (173) hide show
  1. package/dist/aci/aci-string.d.ts +539 -0
  2. package/dist/aci/aci-string.d.ts.map +1 -0
  3. package/dist/aci/aci-string.js +563 -0
  4. package/dist/aci/aci-string.js.map +1 -0
  5. package/dist/aci/attestation.d.ts +648 -0
  6. package/dist/aci/attestation.d.ts.map +1 -0
  7. package/dist/aci/attestation.js +289 -0
  8. package/dist/aci/attestation.js.map +1 -0
  9. package/dist/aci/domains.d.ts +260 -0
  10. package/dist/aci/domains.d.ts.map +1 -0
  11. package/dist/aci/domains.js +322 -0
  12. package/dist/aci/domains.js.map +1 -0
  13. package/dist/aci/effective-permission.d.ts +371 -0
  14. package/dist/aci/effective-permission.d.ts.map +1 -0
  15. package/dist/aci/effective-permission.js +351 -0
  16. package/dist/aci/effective-permission.js.map +1 -0
  17. package/dist/aci/identity.d.ts +1100 -0
  18. package/dist/aci/identity.d.ts.map +1 -0
  19. package/dist/aci/identity.js +328 -0
  20. package/dist/aci/identity.js.map +1 -0
  21. package/dist/aci/index.d.ts +67 -0
  22. package/dist/aci/index.d.ts.map +1 -0
  23. package/dist/aci/index.js +157 -0
  24. package/dist/aci/index.js.map +1 -0
  25. package/dist/aci/jwt-claims.d.ts +756 -0
  26. package/dist/aci/jwt-claims.d.ts.map +1 -0
  27. package/dist/aci/jwt-claims.js +335 -0
  28. package/dist/aci/jwt-claims.js.map +1 -0
  29. package/dist/aci/levels.d.ts +279 -0
  30. package/dist/aci/levels.d.ts.map +1 -0
  31. package/dist/aci/levels.js +467 -0
  32. package/dist/aci/levels.js.map +1 -0
  33. package/dist/aci/mapping.d.ts +291 -0
  34. package/dist/aci/mapping.d.ts.map +1 -0
  35. package/dist/aci/mapping.js +427 -0
  36. package/dist/aci/mapping.js.map +1 -0
  37. package/dist/aci/skills.d.ts +314 -0
  38. package/dist/aci/skills.d.ts.map +1 -0
  39. package/dist/aci/skills.js +404 -0
  40. package/dist/aci/skills.js.map +1 -0
  41. package/dist/aci/tiers.d.ts +403 -0
  42. package/dist/aci/tiers.d.ts.map +1 -0
  43. package/dist/aci/tiers.js +659 -0
  44. package/dist/aci/tiers.js.map +1 -0
  45. package/dist/canonical/agent.d.ts +796 -0
  46. package/dist/canonical/agent.d.ts.map +1 -0
  47. package/dist/canonical/agent.js +527 -0
  48. package/dist/canonical/agent.js.map +1 -0
  49. package/dist/canonical/governance.d.ts +905 -0
  50. package/dist/canonical/governance.d.ts.map +1 -0
  51. package/dist/canonical/governance.js +454 -0
  52. package/dist/canonical/governance.js.map +1 -0
  53. package/dist/canonical/index.d.ts +17 -0
  54. package/dist/canonical/index.d.ts.map +1 -0
  55. package/dist/canonical/index.js +21 -0
  56. package/dist/canonical/index.js.map +1 -0
  57. package/dist/canonical/intent.d.ts +727 -0
  58. package/dist/canonical/intent.d.ts.map +1 -0
  59. package/dist/canonical/intent.js +203 -0
  60. package/dist/canonical/intent.js.map +1 -0
  61. package/dist/canonical/risk-level.d.ts +344 -0
  62. package/dist/canonical/risk-level.d.ts.map +1 -0
  63. package/dist/canonical/risk-level.js +472 -0
  64. package/dist/canonical/risk-level.js.map +1 -0
  65. package/dist/canonical/trust-band.d.ts +239 -0
  66. package/dist/canonical/trust-band.d.ts.map +1 -0
  67. package/dist/canonical/trust-band.js +298 -0
  68. package/dist/canonical/trust-band.js.map +1 -0
  69. package/dist/canonical/trust-score.d.ts +301 -0
  70. package/dist/canonical/trust-score.d.ts.map +1 -0
  71. package/dist/canonical/trust-score.js +390 -0
  72. package/dist/canonical/trust-score.js.map +1 -0
  73. package/dist/canonical/trust-signal.d.ts +617 -0
  74. package/dist/canonical/trust-signal.d.ts.map +1 -0
  75. package/dist/canonical/trust-signal.js +355 -0
  76. package/dist/canonical/trust-signal.js.map +1 -0
  77. package/dist/canonical/validation.d.ts +231 -0
  78. package/dist/canonical/validation.d.ts.map +1 -0
  79. package/dist/canonical/validation.js +558 -0
  80. package/dist/canonical/validation.js.map +1 -0
  81. package/dist/common/index.d.ts +7 -0
  82. package/dist/common/index.d.ts.map +1 -0
  83. package/dist/common/index.js +7 -0
  84. package/dist/common/index.js.map +1 -0
  85. package/dist/common/primitives.d.ts +56 -0
  86. package/dist/common/primitives.d.ts.map +1 -0
  87. package/dist/common/primitives.js +70 -0
  88. package/dist/common/primitives.js.map +1 -0
  89. package/dist/index.d.ts +11 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +15 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/v2/canary-probe.d.ts +201 -0
  94. package/dist/v2/canary-probe.d.ts.map +1 -0
  95. package/dist/v2/canary-probe.js +99 -0
  96. package/dist/v2/canary-probe.js.map +1 -0
  97. package/dist/v2/component.d.ts +132 -0
  98. package/dist/v2/component.d.ts.map +1 -0
  99. package/dist/v2/component.js +5 -0
  100. package/dist/v2/component.js.map +1 -0
  101. package/dist/v2/decision.d.ts +310 -0
  102. package/dist/v2/decision.d.ts.map +1 -0
  103. package/dist/v2/decision.js +21 -0
  104. package/dist/v2/decision.js.map +1 -0
  105. package/dist/v2/enums.d.ts +185 -0
  106. package/dist/v2/enums.d.ts.map +1 -0
  107. package/dist/v2/enums.js +203 -0
  108. package/dist/v2/enums.js.map +1 -0
  109. package/dist/v2/evidence.d.ts +368 -0
  110. package/dist/v2/evidence.d.ts.map +1 -0
  111. package/dist/v2/evidence.js +152 -0
  112. package/dist/v2/evidence.js.map +1 -0
  113. package/dist/v2/execution.d.ts +190 -0
  114. package/dist/v2/execution.d.ts.map +1 -0
  115. package/dist/v2/execution.js +5 -0
  116. package/dist/v2/execution.js.map +1 -0
  117. package/dist/v2/index.d.ts +19 -0
  118. package/dist/v2/index.d.ts.map +1 -0
  119. package/dist/v2/index.js +32 -0
  120. package/dist/v2/index.js.map +1 -0
  121. package/dist/v2/intent.d.ts +89 -0
  122. package/dist/v2/intent.d.ts.map +1 -0
  123. package/dist/v2/intent.js +5 -0
  124. package/dist/v2/intent.js.map +1 -0
  125. package/dist/v2/policy-bundle.d.ts +166 -0
  126. package/dist/v2/policy-bundle.d.ts.map +1 -0
  127. package/dist/v2/policy-bundle.js +20 -0
  128. package/dist/v2/policy-bundle.js.map +1 -0
  129. package/dist/v2/pre-action-gate.d.ts +185 -0
  130. package/dist/v2/pre-action-gate.d.ts.map +1 -0
  131. package/dist/v2/pre-action-gate.js +64 -0
  132. package/dist/v2/pre-action-gate.js.map +1 -0
  133. package/dist/v2/proof-event.d.ts +201 -0
  134. package/dist/v2/proof-event.d.ts.map +1 -0
  135. package/dist/v2/proof-event.js +5 -0
  136. package/dist/v2/proof-event.js.map +1 -0
  137. package/dist/v2/retention.d.ts +329 -0
  138. package/dist/v2/retention.d.ts.map +1 -0
  139. package/dist/v2/retention.js +162 -0
  140. package/dist/v2/retention.js.map +1 -0
  141. package/dist/v2/trust-delta.d.ts +119 -0
  142. package/dist/v2/trust-delta.d.ts.map +1 -0
  143. package/dist/v2/trust-delta.js +28 -0
  144. package/dist/v2/trust-delta.js.map +1 -0
  145. package/dist/v2/trust-profile.d.ts +337 -0
  146. package/dist/v2/trust-profile.d.ts.map +1 -0
  147. package/dist/v2/trust-profile.js +96 -0
  148. package/dist/v2/trust-profile.js.map +1 -0
  149. package/dist/validators/decision.d.ts +430 -0
  150. package/dist/validators/decision.d.ts.map +1 -0
  151. package/dist/validators/decision.js +61 -0
  152. package/dist/validators/decision.js.map +1 -0
  153. package/dist/validators/enums.d.ts +24 -0
  154. package/dist/validators/enums.d.ts.map +1 -0
  155. package/dist/validators/enums.js +24 -0
  156. package/dist/validators/enums.js.map +1 -0
  157. package/dist/validators/index.d.ts +30 -0
  158. package/dist/validators/index.d.ts.map +1 -0
  159. package/dist/validators/index.js +42 -0
  160. package/dist/validators/index.js.map +1 -0
  161. package/dist/validators/intent.d.ts +229 -0
  162. package/dist/validators/intent.d.ts.map +1 -0
  163. package/dist/validators/intent.js +47 -0
  164. package/dist/validators/intent.js.map +1 -0
  165. package/dist/validators/proof-event.d.ts +981 -0
  166. package/dist/validators/proof-event.d.ts.map +1 -0
  167. package/dist/validators/proof-event.js +134 -0
  168. package/dist/validators/proof-event.js.map +1 -0
  169. package/dist/validators/trust-profile.d.ts +350 -0
  170. package/dist/validators/trust-profile.d.ts.map +1 -0
  171. package/dist/validators/trust-profile.js +65 -0
  172. package/dist/validators/trust-profile.js.map +1 -0
  173. package/package.json +65 -0
@@ -0,0 +1,563 @@
1
+ /**
2
+ * @fileoverview ACI String Parser and Generator
3
+ *
4
+ * Provides parsing, generation, and validation for Agent Classification
5
+ * Identifier (ACI) strings. ACI strings follow the format:
6
+ *
7
+ * `{registry}.{organization}.{agentClass}:{domains}-L{level}@{version}[#extensions]`
8
+ *
9
+ * Example: `a3i.acme-corp.invoice-bot:ABF-L3@1.0.0`
10
+ *
11
+ * **CRITICAL DESIGN PRINCIPLE:**
12
+ * The ACI is an IMMUTABLE identifier (like a certificate or passport number).
13
+ * Trust is NOT encoded in the ACI - it is computed at RUNTIME based on:
14
+ * - Attestations (stored separately)
15
+ * - Behavioral signals
16
+ * - Deployment context policies
17
+ *
18
+ * The optional extensions (section 5+) are mutable and can be defined by
19
+ * industry or community standards.
20
+ *
21
+ * @module @vorion/contracts/aci/aci-string
22
+ */
23
+ import { z } from 'zod';
24
+ import { encodeDomains, formatDomainString, isDomainCode, } from './domains.js';
25
+ import { CapabilityLevel, isCapabilityLevel } from './levels.js';
26
+ // ============================================================================
27
+ // ACI Regex Pattern
28
+ // ============================================================================
29
+ /**
30
+ * Regular expression for parsing ACI strings.
31
+ *
32
+ * Format: `{registry}.{organization}.{agentClass}:{domains}-L{level}@{version}[#extensions]`
33
+ *
34
+ * Groups:
35
+ * 1. registry - Certifying registry (e.g., 'a3i')
36
+ * 2. organization - Operating organization (e.g., 'acme-corp')
37
+ * 3. agentClass - Agent classification (e.g., 'invoice-bot')
38
+ * 4. domains - Capability domain codes (e.g., 'ABF')
39
+ * 5. level - Autonomy level (0-5)
40
+ * 6. version - Semantic version (e.g., '1.0.0')
41
+ * 7. extensions - Optional comma-separated extensions (e.g., 'gov,audit')
42
+ *
43
+ * NOTE: Trust tier is NOT part of the ACI. Trust is computed at runtime
44
+ * from attestations, behavioral signals, and deployment context.
45
+ */
46
+ export const ACI_REGEX = /^([a-z0-9]+)\.([a-z0-9-]+)\.([a-z0-9-]+):([A-Z]+)-L([0-5])@(\d+\.\d+\.\d+)(?:#([a-z0-9,_-]+))?$/;
47
+ /**
48
+ * Looser regex for partial ACI validation.
49
+ */
50
+ export const ACI_PARTIAL_REGEX = /^([a-z0-9]+)\.([a-z0-9-]+)\.([a-z0-9-]+):([A-Z]+)-L([0-5])(@\d+\.\d+\.\d+)?(?:#([a-z0-9,_-]+))?$/;
51
+ /**
52
+ * Legacy regex for parsing old-format ACI strings that include trust tier.
53
+ * Used for migration/compatibility only.
54
+ * @deprecated Use ACI_REGEX instead - trust tier should not be in the identifier
55
+ */
56
+ export const ACI_LEGACY_REGEX = /^([a-z0-9]+)\.([a-z0-9-]+)\.([a-z0-9-]+):([A-Z]+)-L([0-5])-T([0-5])@(\d+\.\d+\.\d+)$/;
57
+ /**
58
+ * Extracts the identity portion from a parsed ACI.
59
+ */
60
+ export function getACIIdentity(parsed) {
61
+ return `${parsed.registry}.${parsed.organization}.${parsed.agentClass}`;
62
+ }
63
+ /**
64
+ * Zod schema for ParsedACI validation.
65
+ */
66
+ export const parsedACISchema = z.object({
67
+ aci: z.string().min(1),
68
+ registry: z.string().min(1).regex(/^[a-z0-9]+$/),
69
+ organization: z.string().min(1).regex(/^[a-z0-9-]+$/),
70
+ agentClass: z.string().min(1).regex(/^[a-z0-9-]+$/),
71
+ domains: z.array(z.enum(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'S'])).min(1),
72
+ domainsBitmask: z.number().int().min(0),
73
+ level: z.nativeEnum(CapabilityLevel),
74
+ version: z.string().regex(/^\d+\.\d+\.\d+$/),
75
+ extensions: z.array(z.string()).default([]),
76
+ });
77
+ // ============================================================================
78
+ // ACI Parse Error
79
+ // ============================================================================
80
+ /**
81
+ * Error thrown when ACI parsing fails.
82
+ */
83
+ export class ACIParseError extends Error {
84
+ /** The invalid ACI string that caused the error */
85
+ aci;
86
+ /** Error code for programmatic handling */
87
+ code;
88
+ constructor(message, aci, code = 'INVALID_FORMAT') {
89
+ super(message);
90
+ this.name = 'ACIParseError';
91
+ this.aci = aci;
92
+ this.code = code;
93
+ }
94
+ }
95
+ // ============================================================================
96
+ // Parsing Functions
97
+ // ============================================================================
98
+ /**
99
+ * Parses an ACI string into its components.
100
+ *
101
+ * @param aci - The ACI string to parse
102
+ * @returns Parsed ACI components
103
+ * @throws ACIParseError if the ACI string is invalid
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const parsed = parseACI('a3i.acme-corp.invoice-bot:ABF-L3@1.0.0');
108
+ * // {
109
+ * // aci: 'a3i.acme-corp.invoice-bot:ABF-L3@1.0.0',
110
+ * // registry: 'a3i',
111
+ * // organization: 'acme-corp',
112
+ * // agentClass: 'invoice-bot',
113
+ * // domains: ['A', 'B', 'F'],
114
+ * // domainsBitmask: 0x023,
115
+ * // level: CapabilityLevel.L3_EXECUTE,
116
+ * // version: '1.0.0',
117
+ * // extensions: []
118
+ * // }
119
+ * ```
120
+ */
121
+ export function parseACI(aci) {
122
+ // Check for legacy format with embedded trust tier
123
+ if (ACI_LEGACY_REGEX.test(aci)) {
124
+ throw new ACIParseError(`Legacy ACI format detected with embedded trust tier. ` +
125
+ `Trust should not be part of the identifier - use parseLegacyACI() for migration.`, aci, 'LEGACY_FORMAT');
126
+ }
127
+ const match = aci.match(ACI_REGEX);
128
+ if (!match) {
129
+ throw new ACIParseError(`Invalid ACI format: ${aci}`, aci, 'INVALID_FORMAT');
130
+ }
131
+ const [, registry, organization, agentClass, domainsStr, levelStr, version, extensionsStr] = match;
132
+ // Validate and parse domains
133
+ const domainChars = domainsStr.split('');
134
+ const invalidDomains = domainChars.filter((d) => !isDomainCode(d));
135
+ if (invalidDomains.length > 0) {
136
+ throw new ACIParseError(`Invalid domain codes: ${invalidDomains.join(', ')}`, aci, 'INVALID_DOMAINS');
137
+ }
138
+ if (domainChars.length === 0) {
139
+ throw new ACIParseError('ACI must have at least one domain', aci, 'NO_DOMAINS');
140
+ }
141
+ const domains = domainChars;
142
+ const domainsBitmask = encodeDomains(domains);
143
+ // Parse level (no tier - trust is computed at runtime)
144
+ const level = parseInt(levelStr, 10);
145
+ // Parse optional extensions
146
+ const extensions = extensionsStr ? extensionsStr.split(',').filter((e) => e.length > 0) : [];
147
+ return {
148
+ aci,
149
+ registry: registry,
150
+ organization: organization,
151
+ agentClass: agentClass,
152
+ domains,
153
+ domainsBitmask,
154
+ level,
155
+ version: version,
156
+ extensions,
157
+ };
158
+ }
159
+ /**
160
+ * Parses a legacy ACI string that includes trust tier.
161
+ * Returns the parsed ACI (without tier) plus the extracted tier value.
162
+ *
163
+ * @deprecated Use parseACI() - trust should not be in the identifier
164
+ * @param aci - Legacy ACI string with embedded tier
165
+ * @returns Parsed ACI plus extracted tier
166
+ */
167
+ export function parseLegacyACI(aci) {
168
+ const match = aci.match(ACI_LEGACY_REGEX);
169
+ if (!match) {
170
+ throw new ACIParseError(`Invalid legacy ACI format: ${aci}`, aci, 'INVALID_FORMAT');
171
+ }
172
+ const [, registry, organization, agentClass, domainsStr, levelStr, tierStr, version] = match;
173
+ // Validate and parse domains
174
+ const domainChars = domainsStr.split('');
175
+ const invalidDomains = domainChars.filter((d) => !isDomainCode(d));
176
+ if (invalidDomains.length > 0) {
177
+ throw new ACIParseError(`Invalid domain codes: ${invalidDomains.join(', ')}`, aci, 'INVALID_DOMAINS');
178
+ }
179
+ const domains = domainChars;
180
+ const domainsBitmask = encodeDomains(domains);
181
+ const level = parseInt(levelStr, 10);
182
+ const legacyTier = parseInt(tierStr, 10);
183
+ // Generate the new ACI format (without tier)
184
+ const newAci = `${registry}.${organization}.${agentClass}:${formatDomainString(domains)}-L${level}@${version}`;
185
+ return {
186
+ parsed: {
187
+ aci: newAci,
188
+ registry: registry,
189
+ organization: organization,
190
+ agentClass: agentClass,
191
+ domains,
192
+ domainsBitmask,
193
+ level,
194
+ version: version,
195
+ extensions: [],
196
+ },
197
+ legacyTier,
198
+ };
199
+ }
200
+ /**
201
+ * Safely parses an ACI string, returning null on failure.
202
+ *
203
+ * @param aci - The ACI string to parse
204
+ * @returns Parsed ACI or null if invalid
205
+ */
206
+ export function tryParseACI(aci) {
207
+ try {
208
+ return parseACI(aci);
209
+ }
210
+ catch {
211
+ return null;
212
+ }
213
+ }
214
+ /**
215
+ * Safely parses an ACI string, returning a result object.
216
+ *
217
+ * @param aci - The ACI string to parse
218
+ * @returns Result object with success flag and parsed ACI or error
219
+ */
220
+ export function safeParseACI(aci) {
221
+ try {
222
+ return { success: true, data: parseACI(aci) };
223
+ }
224
+ catch (error) {
225
+ if (error instanceof ACIParseError) {
226
+ return { success: false, error };
227
+ }
228
+ return {
229
+ success: false,
230
+ error: new ACIParseError(String(error), aci, 'INVALID_FORMAT'),
231
+ };
232
+ }
233
+ }
234
+ /**
235
+ * Generates an ACI string from components.
236
+ *
237
+ * @param options - ACI components
238
+ * @returns Generated ACI string
239
+ *
240
+ * @example
241
+ * ```typescript
242
+ * const aci = generateACI({
243
+ * registry: 'a3i',
244
+ * organization: 'acme-corp',
245
+ * agentClass: 'invoice-bot',
246
+ * domains: ['A', 'B', 'F'],
247
+ * level: CapabilityLevel.L3_EXECUTE,
248
+ * version: '1.0.0',
249
+ * });
250
+ * // 'a3i.acme-corp.invoice-bot:ABF-L3@1.0.0'
251
+ *
252
+ * // With extensions:
253
+ * const aciWithExt = generateACI({
254
+ * registry: 'a3i',
255
+ * organization: 'acme-corp',
256
+ * agentClass: 'invoice-bot',
257
+ * domains: ['A', 'B', 'F'],
258
+ * level: CapabilityLevel.L3_EXECUTE,
259
+ * version: '1.0.0',
260
+ * extensions: ['gov', 'audit'],
261
+ * });
262
+ * // 'a3i.acme-corp.invoice-bot:ABF-L3@1.0.0#gov,audit'
263
+ * ```
264
+ */
265
+ export function generateACI(options) {
266
+ const { registry, organization, agentClass, domains, level, version, extensions = [] } = options;
267
+ // Validate components
268
+ if (!/^[a-z0-9]+$/.test(registry)) {
269
+ throw new Error(`Invalid registry: ${registry}. Must be lowercase alphanumeric.`);
270
+ }
271
+ if (!/^[a-z0-9-]+$/.test(organization)) {
272
+ throw new Error(`Invalid organization: ${organization}. Must be lowercase alphanumeric with hyphens.`);
273
+ }
274
+ if (!/^[a-z0-9-]+$/.test(agentClass)) {
275
+ throw new Error(`Invalid agent class: ${agentClass}. Must be lowercase alphanumeric with hyphens.`);
276
+ }
277
+ if (domains.length === 0) {
278
+ throw new Error('At least one domain is required.');
279
+ }
280
+ const invalidDomains = domains.filter((d) => !isDomainCode(d));
281
+ if (invalidDomains.length > 0) {
282
+ throw new Error(`Invalid domain codes: ${invalidDomains.join(', ')}`);
283
+ }
284
+ if (!isCapabilityLevel(level)) {
285
+ throw new Error(`Invalid level: ${level}. Must be 0-5.`);
286
+ }
287
+ if (!/^\d+\.\d+\.\d+$/.test(version)) {
288
+ throw new Error(`Invalid version: ${version}. Must be semantic version (e.g., 1.0.0).`);
289
+ }
290
+ // Validate extensions if provided
291
+ if (extensions.length > 0) {
292
+ const invalidExtensions = extensions.filter((e) => !/^[a-z0-9_-]+$/.test(e));
293
+ if (invalidExtensions.length > 0) {
294
+ throw new Error(`Invalid extensions: ${invalidExtensions.join(', ')}. Must be lowercase alphanumeric with hyphens/underscores.`);
295
+ }
296
+ }
297
+ // Format domains (sorted, deduplicated)
298
+ const domainsStr = formatDomainString(domains);
299
+ // Build ACI string
300
+ let aci = `${registry}.${organization}.${agentClass}:${domainsStr}-L${level}@${version}`;
301
+ // Append extensions if present
302
+ if (extensions.length > 0) {
303
+ aci += `#${extensions.join(',')}`;
304
+ }
305
+ return aci;
306
+ }
307
+ /**
308
+ * Generates an ACI string from individual parameters.
309
+ *
310
+ * @param registry - Certifying registry
311
+ * @param organization - Operating organization
312
+ * @param agentClass - Agent classification
313
+ * @param domains - Capability domains
314
+ * @param level - Autonomy level
315
+ * @param version - Semantic version
316
+ * @param extensions - Optional extensions
317
+ * @returns Generated ACI string
318
+ */
319
+ export function generateACIString(registry, organization, agentClass, domains, level, version, extensions) {
320
+ return generateACI({
321
+ registry,
322
+ organization,
323
+ agentClass,
324
+ domains,
325
+ level,
326
+ version,
327
+ extensions,
328
+ });
329
+ }
330
+ /**
331
+ * Validates an ACI string.
332
+ *
333
+ * @param aci - The ACI string to validate
334
+ * @returns Validation result
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * const result = validateACI('a3i.acme-corp.bot:A-L5@1.0.0');
339
+ * // {
340
+ * // valid: true,
341
+ * // errors: [],
342
+ * // warnings: [],
343
+ * // parsed: { ... }
344
+ * // }
345
+ * ```
346
+ */
347
+ export function validateACI(aci) {
348
+ const errors = [];
349
+ const warnings = [];
350
+ // Check for legacy format with embedded trust tier
351
+ if (ACI_LEGACY_REGEX.test(aci)) {
352
+ warnings.push({
353
+ code: 'LEGACY_FORMAT',
354
+ message: 'ACI contains embedded trust tier which is deprecated. ' +
355
+ 'Trust should be computed at runtime, not encoded in the identifier.',
356
+ });
357
+ }
358
+ try {
359
+ const parsed = parseACI(aci);
360
+ // Validate capability level constraints
361
+ // Note: Trust checks are now done at RUNTIME, not in the ACI itself
362
+ // L7 agents operate at maximum autonomy - should be rare
363
+ if (parsed.level === CapabilityLevel.L7_AUTONOMOUS) {
364
+ warnings.push({
365
+ code: 'L7_AUTONOMOUS_LEVEL',
366
+ message: 'L7 (Autonomous) level grants maximum autonomy. ' +
367
+ 'Ensure runtime trust policies are configured appropriately.',
368
+ });
369
+ }
370
+ // Security domain agents require careful runtime trust
371
+ if (parsed.domains.includes('S')) {
372
+ warnings.push({
373
+ code: 'SECURITY_DOMAIN',
374
+ message: 'Security domain agent. Runtime attestations and behavioral scoring ' +
375
+ 'should be configured to enforce appropriate trust levels.',
376
+ });
377
+ }
378
+ // Finance domain agents require careful runtime trust
379
+ if (parsed.domains.includes('F')) {
380
+ warnings.push({
381
+ code: 'FINANCE_DOMAIN',
382
+ message: 'Finance domain agent. Runtime attestations and behavioral scoring ' +
383
+ 'should be configured to enforce appropriate trust levels.',
384
+ });
385
+ }
386
+ return {
387
+ valid: true,
388
+ errors,
389
+ warnings,
390
+ parsed,
391
+ };
392
+ }
393
+ catch (e) {
394
+ if (e instanceof ACIParseError) {
395
+ // If it's a legacy format error, try parsing with legacy parser
396
+ if (e.code === 'LEGACY_FORMAT') {
397
+ try {
398
+ const { parsed } = parseLegacyACI(aci);
399
+ warnings.push({
400
+ code: 'LEGACY_FORMAT_MIGRATED',
401
+ message: 'Legacy ACI migrated to new format. Trust tier has been removed from identifier.',
402
+ });
403
+ return {
404
+ valid: true,
405
+ errors,
406
+ warnings,
407
+ parsed,
408
+ };
409
+ }
410
+ catch {
411
+ errors.push({ code: e.code, message: e.message });
412
+ }
413
+ }
414
+ else {
415
+ errors.push({ code: e.code, message: e.message });
416
+ }
417
+ }
418
+ else {
419
+ errors.push({ code: 'UNKNOWN_ERROR', message: String(e) });
420
+ }
421
+ return { valid: false, errors, warnings };
422
+ }
423
+ }
424
+ /**
425
+ * Checks if a string is a valid ACI format.
426
+ *
427
+ * @param aci - String to check
428
+ * @returns True if the string is a valid ACI
429
+ */
430
+ export function isValidACI(aci) {
431
+ return ACI_REGEX.test(aci) && validateACI(aci).valid;
432
+ }
433
+ /**
434
+ * Type guard to check if a value is a valid ACI string.
435
+ *
436
+ * @param value - Value to check
437
+ * @returns True if value is a valid ACI string
438
+ */
439
+ export function isACIString(value) {
440
+ return typeof value === 'string' && isValidACI(value);
441
+ }
442
+ // ============================================================================
443
+ // ACI Manipulation
444
+ // ============================================================================
445
+ /**
446
+ * Updates specific fields in an ACI and returns a new ACI string.
447
+ *
448
+ * @param aci - Original ACI string
449
+ * @param updates - Fields to update
450
+ * @returns New ACI string with updates applied
451
+ */
452
+ export function updateACI(aci, updates) {
453
+ const parsed = parseACI(aci);
454
+ return generateACI({
455
+ registry: parsed.registry,
456
+ organization: parsed.organization,
457
+ agentClass: parsed.agentClass,
458
+ domains: updates.domains ?? parsed.domains,
459
+ level: updates.level ?? parsed.level,
460
+ version: updates.version ?? parsed.version,
461
+ extensions: updates.extensions ?? parsed.extensions,
462
+ });
463
+ }
464
+ /**
465
+ * Adds extensions to an ACI string.
466
+ *
467
+ * @param aci - Original ACI string
468
+ * @param newExtensions - Extensions to add
469
+ * @returns New ACI string with extensions added
470
+ */
471
+ export function addACIExtensions(aci, newExtensions) {
472
+ const parsed = parseACI(aci);
473
+ const allExtensions = [...new Set([...parsed.extensions, ...newExtensions])];
474
+ return updateACI(aci, { extensions: allExtensions });
475
+ }
476
+ /**
477
+ * Removes extensions from an ACI string.
478
+ *
479
+ * @param aci - Original ACI string
480
+ * @param extensionsToRemove - Extensions to remove
481
+ * @returns New ACI string with extensions removed
482
+ */
483
+ export function removeACIExtensions(aci, extensionsToRemove) {
484
+ const parsed = parseACI(aci);
485
+ const remaining = parsed.extensions.filter((e) => !extensionsToRemove.includes(e));
486
+ return updateACI(aci, { extensions: remaining });
487
+ }
488
+ /**
489
+ * Increments the version in an ACI string.
490
+ *
491
+ * @param aci - Original ACI string
492
+ * @param type - Version component to increment ('major' | 'minor' | 'patch')
493
+ * @returns New ACI string with incremented version
494
+ */
495
+ export function incrementACIVersion(aci, type = 'patch') {
496
+ const parsed = parseACI(aci);
497
+ const [major, minor, patch] = parsed.version.split('.').map(Number);
498
+ let newVersion;
499
+ switch (type) {
500
+ case 'major':
501
+ newVersion = `${major + 1}.0.0`;
502
+ break;
503
+ case 'minor':
504
+ newVersion = `${major}.${minor + 1}.0`;
505
+ break;
506
+ case 'patch':
507
+ default:
508
+ newVersion = `${major}.${minor}.${patch + 1}`;
509
+ break;
510
+ }
511
+ return updateACI(aci, { version: newVersion });
512
+ }
513
+ // ============================================================================
514
+ // Zod Schemas
515
+ // ============================================================================
516
+ /**
517
+ * Zod schema for ACI string validation.
518
+ */
519
+ export const aciStringSchema = z.string().refine((val) => ACI_REGEX.test(val), {
520
+ message: 'Invalid ACI format. Expected: registry.org.class:DOMAINS-Ln@x.y.z[#extensions]',
521
+ });
522
+ /**
523
+ * Zod schema for ACI string with parsing transform.
524
+ */
525
+ export const aciSchema = aciStringSchema.transform((aci) => parseACI(aci));
526
+ /**
527
+ * Zod schema for GenerateACIOptions.
528
+ */
529
+ export const generateACIOptionsSchema = z.object({
530
+ registry: z.string().min(1).regex(/^[a-z0-9]+$/),
531
+ organization: z.string().min(1).regex(/^[a-z0-9-]+$/),
532
+ agentClass: z.string().min(1).regex(/^[a-z0-9-]+$/),
533
+ domains: z.array(z.enum(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'S'])).min(1),
534
+ level: z.nativeEnum(CapabilityLevel),
535
+ version: z.string().regex(/^\d+\.\d+\.\d+$/),
536
+ extensions: z.array(z.string().regex(/^[a-z0-9_-]+$/)).optional(),
537
+ });
538
+ /**
539
+ * Zod schema for ACIValidationError.
540
+ */
541
+ export const aciValidationErrorSchema = z.object({
542
+ code: z.string(),
543
+ message: z.string(),
544
+ path: z.string().optional(),
545
+ });
546
+ /**
547
+ * Zod schema for ACIValidationWarning.
548
+ */
549
+ export const aciValidationWarningSchema = z.object({
550
+ code: z.string(),
551
+ message: z.string(),
552
+ path: z.string().optional(),
553
+ });
554
+ /**
555
+ * Zod schema for ACIValidationResult.
556
+ */
557
+ export const aciValidationResultSchema = z.object({
558
+ valid: z.boolean(),
559
+ errors: z.array(aciValidationErrorSchema),
560
+ warnings: z.array(aciValidationWarningSchema),
561
+ parsed: parsedACISchema.optional(),
562
+ });
563
+ //# sourceMappingURL=aci-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aci-string.js","sourceRoot":"","sources":["../../src/aci/aci-string.ts"],"names":[],"mappings":"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"}