@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,404 @@
1
+ /**
2
+ * @fileoverview ACI Skill Codes and Bitmask Operations
3
+ *
4
+ * Defines the skill codes used for fine-grained capability matching,
5
+ * with bitmask encoding for efficient queries and skill matching.
6
+ *
7
+ * Skills represent specific capabilities within domains. While domains
8
+ * define broad capability areas (A-I, S), skills provide granular
9
+ * specialization within those areas.
10
+ *
11
+ * @module @vorion/contracts/aci/skills
12
+ */
13
+ import { z } from 'zod';
14
+ /**
15
+ * Array of all valid skill codes.
16
+ */
17
+ export const SKILL_CODES = [
18
+ 'TG', 'CW', 'CR', 'TD', 'TR', 'SM', // Content & Generation
19
+ 'DA', 'RS', 'QA', // Analysis & Research
20
+ 'CA', 'DV', 'RV', 'WS', 'FO', 'AI', // Development & Technical
21
+ 'PL', 'CM', 'CS', 'AU', // Business & Operations
22
+ 'SC', 'GV', // Security & Governance
23
+ ];
24
+ /**
25
+ * Zod schema for SkillCode validation.
26
+ */
27
+ export const skillCodeSchema = z.enum([
28
+ 'TG', 'CW', 'CR', 'TD', 'TR', 'SM',
29
+ 'DA', 'RS', 'QA',
30
+ 'CA', 'DV', 'RV', 'WS', 'FO', 'AI',
31
+ 'PL', 'CM', 'CS', 'AU',
32
+ 'SC', 'GV',
33
+ ], {
34
+ errorMap: () => ({ message: `Invalid skill code. Must be one of: ${SKILL_CODES.join(', ')}` }),
35
+ });
36
+ /**
37
+ * Skill definitions with their bitmask values.
38
+ *
39
+ * Each skill has a unique bitmask value (power of 2) for efficient
40
+ * storage and querying of skill combinations.
41
+ *
42
+ * Using 32-bit integers, we can support up to 32 skills (21 currently defined).
43
+ */
44
+ export const SKILL_DEFINITIONS = {
45
+ // Content & Generation (bits 0-5)
46
+ TG: { code: 'TG', name: 'Text Generation', bit: 0x00001, description: 'General text creation and composition', category: 'content', legacyId: 'text_generation' },
47
+ CW: { code: 'CW', name: 'Content Writing', bit: 0x00002, description: 'Blog posts, articles, marketing copy', category: 'content', legacyId: 'content_writing' },
48
+ CR: { code: 'CR', name: 'Creative Writing', bit: 0x00004, description: 'Fiction, storytelling, creative content', category: 'content', legacyId: 'creative_writing' },
49
+ TD: { code: 'TD', name: 'Technical Documentation', bit: 0x00008, description: 'Docs, guides, specifications', category: 'content', legacyId: 'technical_documentation' },
50
+ TR: { code: 'TR', name: 'Translation', bit: 0x00010, description: 'Language translation services', category: 'content', legacyId: 'translation' },
51
+ SM: { code: 'SM', name: 'Summarization', bit: 0x00020, description: 'Content condensation and extraction', category: 'content', legacyId: 'summarization' },
52
+ // Analysis & Research (bits 6-8)
53
+ DA: { code: 'DA', name: 'Data Analysis', bit: 0x00040, description: 'Statistical analysis, data processing', category: 'analysis', legacyId: 'data_analysis' },
54
+ RS: { code: 'RS', name: 'Research', bit: 0x00080, description: 'Information gathering and synthesis', category: 'analysis' },
55
+ QA: { code: 'QA', name: 'Question Answering', bit: 0x00100, description: 'Q&A, knowledge retrieval', category: 'analysis', legacyId: 'question_answering' },
56
+ // Development & Technical (bits 9-14)
57
+ CA: { code: 'CA', name: 'Code Assistance', bit: 0x00200, description: 'Programming help, debugging', category: 'development', legacyId: 'code_assistance' },
58
+ DV: { code: 'DV', name: 'Development', bit: 0x00400, description: 'Software development tasks', category: 'development' },
59
+ RV: { code: 'RV', name: 'Review', bit: 0x00800, description: 'Code review, content review', category: 'development' },
60
+ WS: { code: 'WS', name: 'Web Search', bit: 0x01000, description: 'Internet search and retrieval', category: 'development', legacyId: 'web_search' },
61
+ FO: { code: 'FO', name: 'File Operations', bit: 0x02000, description: 'File manipulation, I/O', category: 'development', legacyId: 'file_operations' },
62
+ AI: { code: 'AI', name: 'API Integration', bit: 0x04000, description: 'External API interactions', category: 'development', legacyId: 'api_integration' },
63
+ // Business & Operations (bits 15-18)
64
+ PL: { code: 'PL', name: 'Planning', bit: 0x08000, description: 'Task planning, scheduling', category: 'business' },
65
+ CM: { code: 'CM', name: 'Communication', bit: 0x10000, description: 'Messaging, notifications', category: 'business' },
66
+ CS: { code: 'CS', name: 'Customer Support', bit: 0x20000, description: 'Customer service interactions', category: 'business', legacyId: 'customer_support' },
67
+ AU: { code: 'AU', name: 'Automation', bit: 0x40000, description: 'Workflow automation', category: 'business' },
68
+ // Security & Governance (bits 19-20)
69
+ SC: { code: 'SC', name: 'Security', bit: 0x80000, description: 'Security-related operations', category: 'security' },
70
+ GV: { code: 'GV', name: 'Governance', bit: 0x100000, description: 'Policy and compliance', category: 'security' },
71
+ };
72
+ /**
73
+ * Human-readable skill names indexed by code.
74
+ */
75
+ export const SKILL_NAMES = Object.fromEntries(Object.entries(SKILL_DEFINITIONS).map(([code, def]) => [code, def.name]));
76
+ /**
77
+ * Bitmask value representing all skills combined.
78
+ */
79
+ export const ALL_SKILLS_BITMASK = Object.values(SKILL_DEFINITIONS).reduce((mask, skill) => mask | skill.bit, 0);
80
+ /**
81
+ * Skills grouped by category.
82
+ */
83
+ export const SKILLS_BY_CATEGORY = {
84
+ content: ['TG', 'CW', 'CR', 'TD', 'TR', 'SM'],
85
+ analysis: ['DA', 'RS', 'QA'],
86
+ development: ['CA', 'DV', 'RV', 'WS', 'FO', 'AI'],
87
+ business: ['PL', 'CM', 'CS', 'AU'],
88
+ security: ['SC', 'GV'],
89
+ };
90
+ // ============================================================================
91
+ // Legacy ID Mapping
92
+ // ============================================================================
93
+ /**
94
+ * Map legacy string identifiers to skill codes.
95
+ */
96
+ export const LEGACY_ID_TO_SKILL = {
97
+ text_generation: 'TG',
98
+ content_writing: 'CW',
99
+ creative_writing: 'CR',
100
+ technical_documentation: 'TD',
101
+ translation: 'TR',
102
+ summarization: 'SM',
103
+ data_analysis: 'DA',
104
+ question_answering: 'QA',
105
+ code_assistance: 'CA',
106
+ web_search: 'WS',
107
+ file_operations: 'FO',
108
+ api_integration: 'AI',
109
+ customer_support: 'CS',
110
+ };
111
+ /**
112
+ * Converts a legacy skill ID to a skill code.
113
+ *
114
+ * @param legacyId - Legacy string identifier
115
+ * @returns Skill code or undefined if not found
116
+ */
117
+ export function legacyIdToSkillCode(legacyId) {
118
+ return LEGACY_ID_TO_SKILL[legacyId];
119
+ }
120
+ /**
121
+ * Converts an array of legacy skill IDs to skill codes.
122
+ *
123
+ * @param legacyIds - Array of legacy string identifiers
124
+ * @returns Array of skill codes (unrecognized IDs are filtered out)
125
+ */
126
+ export function legacyIdsToSkillCodes(legacyIds) {
127
+ return legacyIds
128
+ .map((id) => LEGACY_ID_TO_SKILL[id])
129
+ .filter((code) => code !== undefined);
130
+ }
131
+ // ============================================================================
132
+ // Bitmask Encoding/Decoding
133
+ // ============================================================================
134
+ /**
135
+ * Encodes an array of skill codes into a bitmask.
136
+ *
137
+ * @param skills - Array of skill codes to encode
138
+ * @returns Bitmask integer representing the skills
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * encodeSkills(['TG', 'CA']); // 0x201 (513)
143
+ * encodeSkills(['DA', 'RS']); // 0x0C0 (192)
144
+ * encodeSkills([]); // 0
145
+ * ```
146
+ */
147
+ export function encodeSkills(skills) {
148
+ return skills.reduce((mask, code) => {
149
+ const skill = SKILL_DEFINITIONS[code];
150
+ return mask | skill.bit;
151
+ }, 0);
152
+ }
153
+ /**
154
+ * Decodes a bitmask into an array of skill codes.
155
+ *
156
+ * @param bitmask - Bitmask integer to decode
157
+ * @returns Array of skill codes present in the bitmask
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * decodeSkills(0x201); // ['TG', 'CA']
162
+ * decodeSkills(0x0C0); // ['DA', 'RS']
163
+ * decodeSkills(0); // []
164
+ * ```
165
+ */
166
+ export function decodeSkills(bitmask) {
167
+ return SKILL_CODES.filter((code) => (bitmask & SKILL_DEFINITIONS[code].bit) !== 0);
168
+ }
169
+ /**
170
+ * Parses a skill string (e.g., "TG,CA,DA") into an array of codes.
171
+ *
172
+ * @param skillString - Comma-separated skill codes
173
+ * @returns Array of valid skill codes
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * parseSkillString('TG,CA,DA'); // ['TG', 'CA', 'DA']
178
+ * parseSkillString('TGCADA'); // ['TG', 'CA', 'DA']
179
+ * parseSkillString(''); // []
180
+ * ```
181
+ */
182
+ export function parseSkillString(skillString) {
183
+ if (!skillString)
184
+ return [];
185
+ // Try comma-separated first
186
+ if (skillString.includes(',')) {
187
+ return skillString
188
+ .split(',')
189
+ .map((s) => s.trim().toUpperCase())
190
+ .filter((s) => isSkillCode(s));
191
+ }
192
+ // Try parsing as concatenated two-letter codes
193
+ const codes = [];
194
+ for (let i = 0; i < skillString.length; i += 2) {
195
+ const code = skillString.slice(i, i + 2).toUpperCase();
196
+ if (isSkillCode(code)) {
197
+ codes.push(code);
198
+ }
199
+ }
200
+ return codes;
201
+ }
202
+ /**
203
+ * Formats an array of skill codes into a sorted string.
204
+ *
205
+ * @param skills - Array of skill codes
206
+ * @returns Sorted, deduplicated comma-separated string
207
+ *
208
+ * @example
209
+ * ```typescript
210
+ * formatSkillString(['DA', 'TG', 'CA']); // 'CA,DA,TG'
211
+ * formatSkillString(['TG', 'TG']); // 'TG'
212
+ * ```
213
+ */
214
+ export function formatSkillString(skills) {
215
+ const unique = [...new Set(skills)];
216
+ return unique.sort().join(',');
217
+ }
218
+ // ============================================================================
219
+ // Skill Matching Operations
220
+ // ============================================================================
221
+ /**
222
+ * Checks if a skill bitmask contains all required skills.
223
+ *
224
+ * @param agentSkills - Agent's skill bitmask
225
+ * @param requiredSkills - Required skills bitmask
226
+ * @returns True if agent has all required skills
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * const agentMask = encodeSkills(['TG', 'CA', 'DA']);
231
+ * const required = encodeSkills(['TG', 'CA']);
232
+ * hasSkills(agentMask, required); // true
233
+ * ```
234
+ */
235
+ export function hasSkills(agentSkills, requiredSkills) {
236
+ return (agentSkills & requiredSkills) === requiredSkills;
237
+ }
238
+ /**
239
+ * Checks if an agent satisfies skill requirements.
240
+ *
241
+ * @param agentSkills - Agent's skill codes
242
+ * @param requiredSkills - Required skill codes
243
+ * @returns True if agent has all required skills
244
+ */
245
+ export function satisfiesSkillRequirements(agentSkills, requiredSkills) {
246
+ const agentMask = encodeSkills(agentSkills);
247
+ const requiredMask = encodeSkills(requiredSkills);
248
+ return hasSkills(agentMask, requiredMask);
249
+ }
250
+ /**
251
+ * Returns the intersection of two skill sets.
252
+ *
253
+ * @param skills1 - First skill set
254
+ * @param skills2 - Second skill set
255
+ * @returns Skills present in both sets
256
+ */
257
+ export function intersectSkills(skills1, skills2) {
258
+ const mask1 = encodeSkills(skills1);
259
+ const mask2 = encodeSkills(skills2);
260
+ return decodeSkills(mask1 & mask2);
261
+ }
262
+ /**
263
+ * Returns the union of two skill sets.
264
+ *
265
+ * @param skills1 - First skill set
266
+ * @param skills2 - Second skill set
267
+ * @returns All skills from both sets
268
+ */
269
+ export function unionSkills(skills1, skills2) {
270
+ const mask1 = encodeSkills(skills1);
271
+ const mask2 = encodeSkills(skills2);
272
+ return decodeSkills(mask1 | mask2);
273
+ }
274
+ /**
275
+ * Returns skills in the first set but not in the second.
276
+ *
277
+ * @param skills1 - First skill set
278
+ * @param skills2 - Second skill set
279
+ * @returns Skills unique to the first set
280
+ */
281
+ export function differenceSkills(skills1, skills2) {
282
+ const mask1 = encodeSkills(skills1);
283
+ const mask2 = encodeSkills(skills2);
284
+ return decodeSkills(mask1 & ~mask2);
285
+ }
286
+ // ============================================================================
287
+ // Skill Metadata Functions
288
+ // ============================================================================
289
+ /**
290
+ * Gets the complete definition for a skill code.
291
+ *
292
+ * @param code - Skill code
293
+ * @returns Skill definition or undefined if not found
294
+ */
295
+ export function getSkillDefinition(code) {
296
+ return SKILL_DEFINITIONS[code];
297
+ }
298
+ /**
299
+ * Gets the human-readable name for a skill code.
300
+ *
301
+ * @param code - Skill code
302
+ * @returns Skill name
303
+ */
304
+ export function getSkillName(code) {
305
+ return SKILL_DEFINITIONS[code].name;
306
+ }
307
+ /**
308
+ * Gets the bitmask value for a skill code.
309
+ *
310
+ * @param code - Skill code
311
+ * @returns Bitmask value
312
+ */
313
+ export function getSkillBit(code) {
314
+ return SKILL_DEFINITIONS[code].bit;
315
+ }
316
+ /**
317
+ * Gets the category for a skill code.
318
+ *
319
+ * @param code - Skill code
320
+ * @returns Skill category
321
+ */
322
+ export function getSkillCategory(code) {
323
+ return SKILL_DEFINITIONS[code].category;
324
+ }
325
+ /**
326
+ * Gets all skills in a category.
327
+ *
328
+ * @param category - Skill category
329
+ * @returns Array of skill codes in that category
330
+ */
331
+ export function getSkillsInCategory(category) {
332
+ return SKILLS_BY_CATEGORY[category];
333
+ }
334
+ /**
335
+ * Counts the number of skills in a bitmask.
336
+ *
337
+ * @param bitmask - Skill bitmask
338
+ * @returns Number of skills
339
+ */
340
+ export function countSkills(bitmask) {
341
+ let count = 0;
342
+ let mask = bitmask;
343
+ while (mask) {
344
+ count += mask & 1;
345
+ mask >>>= 1;
346
+ }
347
+ return count;
348
+ }
349
+ // ============================================================================
350
+ // Type Guards and Validation
351
+ // ============================================================================
352
+ /**
353
+ * Type guard to check if a value is a valid skill code.
354
+ *
355
+ * @param value - Value to check
356
+ * @returns True if value is a valid SkillCode
357
+ */
358
+ export function isSkillCode(value) {
359
+ return typeof value === 'string' && SKILL_CODES.includes(value);
360
+ }
361
+ /**
362
+ * Type guard to check if an array contains only valid skill codes.
363
+ *
364
+ * @param values - Array to check
365
+ * @returns True if all values are valid SkillCodes
366
+ */
367
+ export function isSkillCodeArray(values) {
368
+ return Array.isArray(values) && values.every(isSkillCode);
369
+ }
370
+ // ============================================================================
371
+ // Zod Schemas
372
+ // ============================================================================
373
+ /**
374
+ * Zod schema for SkillDefinition validation.
375
+ */
376
+ export const skillDefinitionSchema = z.object({
377
+ code: skillCodeSchema,
378
+ name: z.string().min(1),
379
+ bit: z.number().int().positive(),
380
+ description: z.string().min(1),
381
+ category: z.enum(['content', 'analysis', 'development', 'business', 'security']),
382
+ legacyId: z.string().optional(),
383
+ });
384
+ /**
385
+ * Zod schema for skill code array validation.
386
+ */
387
+ export const skillCodeArraySchema = z.array(skillCodeSchema);
388
+ /**
389
+ * Zod schema for skill bitmask validation (21 bits max).
390
+ */
391
+ export const skillBitmaskSchema = z.number().int().min(0).max(ALL_SKILLS_BITMASK);
392
+ /**
393
+ * Zod schema for skill string validation (comma-separated codes).
394
+ */
395
+ export const skillStringSchema = z
396
+ .string()
397
+ .refine((val) => {
398
+ if (!val)
399
+ return true;
400
+ const codes = parseSkillString(val);
401
+ return codes.length > 0;
402
+ }, { message: 'Invalid skill string format' })
403
+ .transform((val) => parseSkillString(val));
404
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/aci/skills.ts"],"names":[],"mappings":"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"}