@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.
- package/dist/aci/aci-string.d.ts +539 -0
- package/dist/aci/aci-string.d.ts.map +1 -0
- package/dist/aci/aci-string.js +563 -0
- package/dist/aci/aci-string.js.map +1 -0
- package/dist/aci/attestation.d.ts +648 -0
- package/dist/aci/attestation.d.ts.map +1 -0
- package/dist/aci/attestation.js +289 -0
- package/dist/aci/attestation.js.map +1 -0
- package/dist/aci/domains.d.ts +260 -0
- package/dist/aci/domains.d.ts.map +1 -0
- package/dist/aci/domains.js +322 -0
- package/dist/aci/domains.js.map +1 -0
- package/dist/aci/effective-permission.d.ts +371 -0
- package/dist/aci/effective-permission.d.ts.map +1 -0
- package/dist/aci/effective-permission.js +351 -0
- package/dist/aci/effective-permission.js.map +1 -0
- package/dist/aci/identity.d.ts +1100 -0
- package/dist/aci/identity.d.ts.map +1 -0
- package/dist/aci/identity.js +328 -0
- package/dist/aci/identity.js.map +1 -0
- package/dist/aci/index.d.ts +67 -0
- package/dist/aci/index.d.ts.map +1 -0
- package/dist/aci/index.js +157 -0
- package/dist/aci/index.js.map +1 -0
- package/dist/aci/jwt-claims.d.ts +756 -0
- package/dist/aci/jwt-claims.d.ts.map +1 -0
- package/dist/aci/jwt-claims.js +335 -0
- package/dist/aci/jwt-claims.js.map +1 -0
- package/dist/aci/levels.d.ts +279 -0
- package/dist/aci/levels.d.ts.map +1 -0
- package/dist/aci/levels.js +467 -0
- package/dist/aci/levels.js.map +1 -0
- package/dist/aci/mapping.d.ts +291 -0
- package/dist/aci/mapping.d.ts.map +1 -0
- package/dist/aci/mapping.js +427 -0
- package/dist/aci/mapping.js.map +1 -0
- package/dist/aci/skills.d.ts +314 -0
- package/dist/aci/skills.d.ts.map +1 -0
- package/dist/aci/skills.js +404 -0
- package/dist/aci/skills.js.map +1 -0
- package/dist/aci/tiers.d.ts +403 -0
- package/dist/aci/tiers.d.ts.map +1 -0
- package/dist/aci/tiers.js +659 -0
- package/dist/aci/tiers.js.map +1 -0
- package/dist/canonical/agent.d.ts +796 -0
- package/dist/canonical/agent.d.ts.map +1 -0
- package/dist/canonical/agent.js +527 -0
- package/dist/canonical/agent.js.map +1 -0
- package/dist/canonical/governance.d.ts +905 -0
- package/dist/canonical/governance.d.ts.map +1 -0
- package/dist/canonical/governance.js +454 -0
- package/dist/canonical/governance.js.map +1 -0
- package/dist/canonical/index.d.ts +17 -0
- package/dist/canonical/index.d.ts.map +1 -0
- package/dist/canonical/index.js +21 -0
- package/dist/canonical/index.js.map +1 -0
- package/dist/canonical/intent.d.ts +727 -0
- package/dist/canonical/intent.d.ts.map +1 -0
- package/dist/canonical/intent.js +203 -0
- package/dist/canonical/intent.js.map +1 -0
- package/dist/canonical/risk-level.d.ts +344 -0
- package/dist/canonical/risk-level.d.ts.map +1 -0
- package/dist/canonical/risk-level.js +472 -0
- package/dist/canonical/risk-level.js.map +1 -0
- package/dist/canonical/trust-band.d.ts +239 -0
- package/dist/canonical/trust-band.d.ts.map +1 -0
- package/dist/canonical/trust-band.js +298 -0
- package/dist/canonical/trust-band.js.map +1 -0
- package/dist/canonical/trust-score.d.ts +301 -0
- package/dist/canonical/trust-score.d.ts.map +1 -0
- package/dist/canonical/trust-score.js +390 -0
- package/dist/canonical/trust-score.js.map +1 -0
- package/dist/canonical/trust-signal.d.ts +617 -0
- package/dist/canonical/trust-signal.d.ts.map +1 -0
- package/dist/canonical/trust-signal.js +355 -0
- package/dist/canonical/trust-signal.js.map +1 -0
- package/dist/canonical/validation.d.ts +231 -0
- package/dist/canonical/validation.d.ts.map +1 -0
- package/dist/canonical/validation.js +558 -0
- package/dist/canonical/validation.js.map +1 -0
- package/dist/common/index.d.ts +7 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +7 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/primitives.d.ts +56 -0
- package/dist/common/primitives.d.ts.map +1 -0
- package/dist/common/primitives.js +70 -0
- package/dist/common/primitives.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/v2/canary-probe.d.ts +201 -0
- package/dist/v2/canary-probe.d.ts.map +1 -0
- package/dist/v2/canary-probe.js +99 -0
- package/dist/v2/canary-probe.js.map +1 -0
- package/dist/v2/component.d.ts +132 -0
- package/dist/v2/component.d.ts.map +1 -0
- package/dist/v2/component.js +5 -0
- package/dist/v2/component.js.map +1 -0
- package/dist/v2/decision.d.ts +310 -0
- package/dist/v2/decision.d.ts.map +1 -0
- package/dist/v2/decision.js +21 -0
- package/dist/v2/decision.js.map +1 -0
- package/dist/v2/enums.d.ts +185 -0
- package/dist/v2/enums.d.ts.map +1 -0
- package/dist/v2/enums.js +203 -0
- package/dist/v2/enums.js.map +1 -0
- package/dist/v2/evidence.d.ts +368 -0
- package/dist/v2/evidence.d.ts.map +1 -0
- package/dist/v2/evidence.js +152 -0
- package/dist/v2/evidence.js.map +1 -0
- package/dist/v2/execution.d.ts +190 -0
- package/dist/v2/execution.d.ts.map +1 -0
- package/dist/v2/execution.js +5 -0
- package/dist/v2/execution.js.map +1 -0
- package/dist/v2/index.d.ts +19 -0
- package/dist/v2/index.d.ts.map +1 -0
- package/dist/v2/index.js +32 -0
- package/dist/v2/index.js.map +1 -0
- package/dist/v2/intent.d.ts +89 -0
- package/dist/v2/intent.d.ts.map +1 -0
- package/dist/v2/intent.js +5 -0
- package/dist/v2/intent.js.map +1 -0
- package/dist/v2/policy-bundle.d.ts +166 -0
- package/dist/v2/policy-bundle.d.ts.map +1 -0
- package/dist/v2/policy-bundle.js +20 -0
- package/dist/v2/policy-bundle.js.map +1 -0
- package/dist/v2/pre-action-gate.d.ts +185 -0
- package/dist/v2/pre-action-gate.d.ts.map +1 -0
- package/dist/v2/pre-action-gate.js +64 -0
- package/dist/v2/pre-action-gate.js.map +1 -0
- package/dist/v2/proof-event.d.ts +201 -0
- package/dist/v2/proof-event.d.ts.map +1 -0
- package/dist/v2/proof-event.js +5 -0
- package/dist/v2/proof-event.js.map +1 -0
- package/dist/v2/retention.d.ts +329 -0
- package/dist/v2/retention.d.ts.map +1 -0
- package/dist/v2/retention.js +162 -0
- package/dist/v2/retention.js.map +1 -0
- package/dist/v2/trust-delta.d.ts +119 -0
- package/dist/v2/trust-delta.d.ts.map +1 -0
- package/dist/v2/trust-delta.js +28 -0
- package/dist/v2/trust-delta.js.map +1 -0
- package/dist/v2/trust-profile.d.ts +337 -0
- package/dist/v2/trust-profile.d.ts.map +1 -0
- package/dist/v2/trust-profile.js +96 -0
- package/dist/v2/trust-profile.js.map +1 -0
- package/dist/validators/decision.d.ts +430 -0
- package/dist/validators/decision.d.ts.map +1 -0
- package/dist/validators/decision.js +61 -0
- package/dist/validators/decision.js.map +1 -0
- package/dist/validators/enums.d.ts +24 -0
- package/dist/validators/enums.d.ts.map +1 -0
- package/dist/validators/enums.js +24 -0
- package/dist/validators/enums.js.map +1 -0
- package/dist/validators/index.d.ts +30 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +42 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/intent.d.ts +229 -0
- package/dist/validators/intent.d.ts.map +1 -0
- package/dist/validators/intent.js +47 -0
- package/dist/validators/intent.js.map +1 -0
- package/dist/validators/proof-event.d.ts +981 -0
- package/dist/validators/proof-event.d.ts.map +1 -0
- package/dist/validators/proof-event.js +134 -0
- package/dist/validators/proof-event.js.map +1 -0
- package/dist/validators/trust-profile.d.ts +350 -0
- package/dist/validators/trust-profile.d.ts.map +1 -0
- package/dist/validators/trust-profile.js +65 -0
- package/dist/validators/trust-profile.js.map +1 -0
- 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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"}
|