@capaxle/core 0.1.0-alpha.1
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/LICENSE +202 -0
- package/README.md +5 -0
- package/dist/define-capability.d.ts +18 -0
- package/dist/define-capability.d.ts.map +1 -0
- package/dist/define-capability.js +524 -0
- package/dist/define-capability.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/internal-bindings.d.ts +15 -0
- package/dist/internal-bindings.d.ts.map +1 -0
- package/dist/internal-bindings.js +33 -0
- package/dist/internal-bindings.js.map +1 -0
- package/dist/schema-provider.d.ts +24 -0
- package/dist/schema-provider.d.ts.map +1 -0
- package/dist/schema-provider.js +28 -0
- package/dist/schema-provider.js.map +1 -0
- package/dist/types.d.ts +285 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
import { isBoundDescriptor, registerDescriptorBinding, } from "./internal-bindings.js";
|
|
2
|
+
export class CapabilityDefinitionError extends Error {
|
|
3
|
+
diagnostics;
|
|
4
|
+
constructor(diagnostics) {
|
|
5
|
+
super("Invalid capability definition; inspect diagnostics for fields to correct.");
|
|
6
|
+
this.name = "CapabilityDefinitionError";
|
|
7
|
+
this.diagnostics = Object.freeze(diagnostics.map((diagnostic) => Object.freeze({ ...diagnostic })));
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
const sharedSchemas = new WeakSet();
|
|
11
|
+
const sharedSchemaHas = sharedSchemas.has.bind(sharedSchemas);
|
|
12
|
+
const sharedSchemaAdd = sharedSchemas.add.bind(sharedSchemas);
|
|
13
|
+
const authoringPresenceKey = Symbol.for("@capaxle/core/authoring-presence-registry@1");
|
|
14
|
+
const authoringPresenceGlobal = globalThis;
|
|
15
|
+
const authoringPresence = new WeakMap();
|
|
16
|
+
const authoringPresenceGet = authoringPresence.get.bind(authoringPresence);
|
|
17
|
+
const authoringPresenceSet = authoringPresence.set.bind(authoringPresence);
|
|
18
|
+
const statuses = new Set([
|
|
19
|
+
"invalid_argument",
|
|
20
|
+
"unauthenticated",
|
|
21
|
+
"permission_denied",
|
|
22
|
+
"not_found",
|
|
23
|
+
"already_exists",
|
|
24
|
+
"failed_precondition",
|
|
25
|
+
"conflict",
|
|
26
|
+
"resource_exhausted",
|
|
27
|
+
"cancelled",
|
|
28
|
+
"deadline_exceeded",
|
|
29
|
+
"unavailable",
|
|
30
|
+
"internal",
|
|
31
|
+
]);
|
|
32
|
+
const topFields = new Set([
|
|
33
|
+
"id",
|
|
34
|
+
"version",
|
|
35
|
+
"description",
|
|
36
|
+
"tags",
|
|
37
|
+
"authentication",
|
|
38
|
+
"exposure",
|
|
39
|
+
"requirements",
|
|
40
|
+
"limits",
|
|
41
|
+
"summary",
|
|
42
|
+
"input",
|
|
43
|
+
"output",
|
|
44
|
+
"permissions",
|
|
45
|
+
"effects",
|
|
46
|
+
"errors",
|
|
47
|
+
"examples",
|
|
48
|
+
"handler",
|
|
49
|
+
]);
|
|
50
|
+
const pointer = (path, key) => `${path}/${key.replaceAll("~", "~0").replaceAll("/", "~1")}`;
|
|
51
|
+
/** True only for a descriptor issued by this loaded core module. */
|
|
52
|
+
export function isCapability(value) {
|
|
53
|
+
return isBoundDescriptor(value);
|
|
54
|
+
}
|
|
55
|
+
const isSharedSchema = (value) => typeof value === "object" && value !== null && sharedSchemaHas(value);
|
|
56
|
+
const descriptorSchemaAt = (descriptor, path) => {
|
|
57
|
+
if (path === "/input")
|
|
58
|
+
return descriptor.input;
|
|
59
|
+
if (path === "/output")
|
|
60
|
+
return descriptor.output;
|
|
61
|
+
const match = /^\/errors\/([^/]+)\/details$/u.exec(path);
|
|
62
|
+
if (!match)
|
|
63
|
+
return undefined;
|
|
64
|
+
const code = match[1].replaceAll("~1", "/").replaceAll("~0", "~");
|
|
65
|
+
return descriptor.errors[code]?.details;
|
|
66
|
+
};
|
|
67
|
+
const authoringPresenceQuery = Object.freeze({
|
|
68
|
+
get(value) {
|
|
69
|
+
if (!isCapability(value))
|
|
70
|
+
return undefined;
|
|
71
|
+
const presence = authoringPresenceGet(value);
|
|
72
|
+
if (!presence ||
|
|
73
|
+
presence.sharedSchemas.some(({ path, schema }) => !isSharedSchema(schema) || descriptorSchemaAt(value, path) !== schema))
|
|
74
|
+
return undefined;
|
|
75
|
+
return presence;
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
if (Object.getOwnPropertyDescriptor(authoringPresenceGlobal, authoringPresenceKey)) {
|
|
79
|
+
const error = new Error("The process-local core authoring authenticity query was already initialized.");
|
|
80
|
+
error.name = "CapabilityAuthoringIntegrityError";
|
|
81
|
+
Object.defineProperty(error, "code", {
|
|
82
|
+
enumerable: true,
|
|
83
|
+
value: "CAP_CORE_AUTHORING_QUERY_CONFLICT",
|
|
84
|
+
});
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
Object.defineProperty(authoringPresenceGlobal, authoringPresenceKey, {
|
|
88
|
+
configurable: false,
|
|
89
|
+
enumerable: false,
|
|
90
|
+
writable: false,
|
|
91
|
+
value: authoringPresenceQuery,
|
|
92
|
+
});
|
|
93
|
+
const validUnicodeScalarString = (value) => {
|
|
94
|
+
if (typeof value !== "string" || value.length === 0)
|
|
95
|
+
return false;
|
|
96
|
+
for (let index = 0; index < value.length; index++) {
|
|
97
|
+
const unit = value.charCodeAt(index);
|
|
98
|
+
if (unit >= 0xd800 && unit <= 0xdbff) {
|
|
99
|
+
const next = value.charCodeAt(index + 1);
|
|
100
|
+
if (!(next >= 0xdc00 && next <= 0xdfff))
|
|
101
|
+
return false;
|
|
102
|
+
index += 1;
|
|
103
|
+
}
|
|
104
|
+
else if (unit >= 0xdc00 && unit <= 0xdfff)
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
};
|
|
109
|
+
/** Name one whole capability schema without inspecting its provider-owned value. */
|
|
110
|
+
export function defineSharedSchema(name, authorSchema) {
|
|
111
|
+
const diagnostics = [];
|
|
112
|
+
if (!validUnicodeScalarString(name))
|
|
113
|
+
diagnostics.push({
|
|
114
|
+
code: "CAP_SCHEMA_NAME_INVALID",
|
|
115
|
+
severity: "error",
|
|
116
|
+
path: "/name",
|
|
117
|
+
message: "Supply a nonempty shared-schema name containing only Unicode scalar values.",
|
|
118
|
+
});
|
|
119
|
+
if (((typeof authorSchema !== "object" || authorSchema === null) &&
|
|
120
|
+
typeof authorSchema !== "function") ||
|
|
121
|
+
isSharedSchema(authorSchema))
|
|
122
|
+
diagnostics.push({
|
|
123
|
+
code: "CAP_AUTHORING_FIELD_INVALID",
|
|
124
|
+
severity: "error",
|
|
125
|
+
path: "/authorSchema",
|
|
126
|
+
message: "Supply one provider-owned author schema, not another shared-schema wrapper.",
|
|
127
|
+
});
|
|
128
|
+
if (diagnostics.length)
|
|
129
|
+
throw new CapabilityDefinitionError(diagnostics);
|
|
130
|
+
const wrapper = Object.assign(Object.create(null), { name, authorSchema });
|
|
131
|
+
Object.freeze(wrapper);
|
|
132
|
+
sharedSchemaAdd(wrapper);
|
|
133
|
+
return wrapper;
|
|
134
|
+
}
|
|
135
|
+
/** Validate author metadata and retain the handler privately, without invoking it. */
|
|
136
|
+
export function defineCapability(definition) {
|
|
137
|
+
const diagnostics = [];
|
|
138
|
+
const sharedSchemaOccurrences = [];
|
|
139
|
+
const report = (code, path, message) => diagnostics.push({ code, severity: "error", path, message });
|
|
140
|
+
const invalid = (path, message) => report("CAP_AUTHORING_FIELD_INVALID", path, message);
|
|
141
|
+
const required = (path, message) => report("CAP_AUTHORING_FIELD_REQUIRED", path, message);
|
|
142
|
+
const record = (value, path, allowed) => {
|
|
143
|
+
const result = Object.create(null);
|
|
144
|
+
try {
|
|
145
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
146
|
+
invalid(path, "Supply an object with own data properties.");
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
const prototype = Object.getPrototypeOf(value);
|
|
150
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
151
|
+
invalid(path, "Supply a plain object with own data properties.");
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
if (Object.getOwnPropertySymbols(value).length)
|
|
155
|
+
invalid(path, "Symbol metadata is unsupported.");
|
|
156
|
+
for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {
|
|
157
|
+
const at = pointer(path, key);
|
|
158
|
+
if (!descriptor.enumerable || !("value" in descriptor)) {
|
|
159
|
+
invalid(at, "Use an enumerable data property; metadata accessors are unsupported.");
|
|
160
|
+
}
|
|
161
|
+
else if (allowed && !allowed.has(key)) {
|
|
162
|
+
report("CAP_AUTHORING_FIELD_UNSUPPORTED", at, "This field is outside the implemented authoring subset.");
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
result[key] = descriptor.value;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
invalid(path, "Capability metadata could not be inspected safely.");
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
};
|
|
174
|
+
const text = (value, path) => {
|
|
175
|
+
if (typeof value !== "string" || value.trim().length === 0)
|
|
176
|
+
invalid(path, "Supply a nonempty string.");
|
|
177
|
+
};
|
|
178
|
+
const choice = (value, path, values) => {
|
|
179
|
+
if (!values.includes(value))
|
|
180
|
+
invalid(path, `Choose one of: ${values.join(", ")}.`);
|
|
181
|
+
};
|
|
182
|
+
const list = (value, path, nonempty) => {
|
|
183
|
+
const copy = [];
|
|
184
|
+
try {
|
|
185
|
+
if (!Array.isArray(value) || (nonempty && !value.length)) {
|
|
186
|
+
invalid(path, "Supply a nonempty array of permission strings.");
|
|
187
|
+
return Object.freeze(copy);
|
|
188
|
+
}
|
|
189
|
+
const properties = Object.getOwnPropertyDescriptors(value);
|
|
190
|
+
if (Object.getOwnPropertySymbols(value).length ||
|
|
191
|
+
Object.keys(properties).length !== value.length + 1)
|
|
192
|
+
invalid(path, "Supply a dense array without extra properties.");
|
|
193
|
+
for (let index = 0; index < value.length; index++) {
|
|
194
|
+
const property = properties[String(index)];
|
|
195
|
+
if (!property || !("value" in property) || !property.enumerable) {
|
|
196
|
+
invalid(pointer(path, String(index)), "Supply a data element without holes or accessors.");
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
text(property.value, pointer(path, String(index)));
|
|
200
|
+
copy.push(property.value);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
invalid(path, "The array could not be inspected safely.");
|
|
205
|
+
}
|
|
206
|
+
return Object.freeze(copy);
|
|
207
|
+
};
|
|
208
|
+
const schema = (value, path) => {
|
|
209
|
+
if (isSharedSchema(value)) {
|
|
210
|
+
sharedSchemaOccurrences.push(Object.freeze({ path, schema: value }));
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if ((typeof value !== "object" || value === null) &&
|
|
214
|
+
typeof value !== "function")
|
|
215
|
+
invalid(path, "Supply an author schema; provider portability checks run during compilation.");
|
|
216
|
+
};
|
|
217
|
+
const activeJson = new WeakSet();
|
|
218
|
+
const json = (value, path) => {
|
|
219
|
+
if (value === null ||
|
|
220
|
+
typeof value === "string" ||
|
|
221
|
+
typeof value === "boolean" ||
|
|
222
|
+
(typeof value === "number" && Number.isFinite(value)))
|
|
223
|
+
return value;
|
|
224
|
+
if (typeof value !== "object") {
|
|
225
|
+
invalid(path, "Supply a finite, strictly serializable JSON value.");
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
if (activeJson.has(value)) {
|
|
229
|
+
invalid(path, "Cyclic example data cannot be serialized as JSON.");
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
activeJson.add(value);
|
|
233
|
+
try {
|
|
234
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
235
|
+
if (Object.getOwnPropertySymbols(value).length)
|
|
236
|
+
invalid(path, "JSON example data cannot contain symbol properties.");
|
|
237
|
+
if (Array.isArray(value)) {
|
|
238
|
+
const copy = [];
|
|
239
|
+
if (Object.keys(descriptors).length !== value.length + 1) {
|
|
240
|
+
invalid(path, "Supply a dense JSON array without extra properties.");
|
|
241
|
+
return Object.freeze(copy);
|
|
242
|
+
}
|
|
243
|
+
for (let index = 0; index < value.length; index++) {
|
|
244
|
+
const at = pointer(path, String(index));
|
|
245
|
+
const property = descriptors[String(index)];
|
|
246
|
+
if (!property || !property.enumerable || !("value" in property)) {
|
|
247
|
+
invalid(at, "Supply an enumerable JSON data element without holes or accessors.");
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
copy.push(json(property.value, at));
|
|
251
|
+
}
|
|
252
|
+
return Object.freeze(copy);
|
|
253
|
+
}
|
|
254
|
+
const prototype = Object.getPrototypeOf(value);
|
|
255
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
256
|
+
invalid(path, "Supply a plain JSON object.");
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
const copy = Object.create(null);
|
|
260
|
+
for (const [key, property] of Object.entries(descriptors)) {
|
|
261
|
+
const at = pointer(path, key);
|
|
262
|
+
if (!property.enumerable || !("value" in property)) {
|
|
263
|
+
invalid(at, "Supply an enumerable JSON data property without accessors.");
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
copy[key] = json(property.value, at);
|
|
267
|
+
}
|
|
268
|
+
return Object.freeze(copy);
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
invalid(path, "Example JSON data could not be inspected safely.");
|
|
272
|
+
return undefined;
|
|
273
|
+
}
|
|
274
|
+
finally {
|
|
275
|
+
activeJson.delete(value);
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
const source = record(definition, "", topFields);
|
|
279
|
+
for (const key of [
|
|
280
|
+
"summary",
|
|
281
|
+
"input",
|
|
282
|
+
"output",
|
|
283
|
+
"permissions",
|
|
284
|
+
"effects",
|
|
285
|
+
"handler",
|
|
286
|
+
])
|
|
287
|
+
if (!(key in source))
|
|
288
|
+
required(`/${key}`, `Declare ${key} explicitly.`);
|
|
289
|
+
if ("summary" in source)
|
|
290
|
+
text(source.summary, "/summary");
|
|
291
|
+
for (const key of ["input", "output"])
|
|
292
|
+
if (key in source)
|
|
293
|
+
schema(source[key], `/${key}`);
|
|
294
|
+
if ("handler" in source && typeof source.handler !== "function")
|
|
295
|
+
invalid("/handler", "Supply a handler function.");
|
|
296
|
+
for (const key of ["id", "version", "description"])
|
|
297
|
+
if (key in source)
|
|
298
|
+
text(source[key], `/${key}`);
|
|
299
|
+
if ("authentication" in source)
|
|
300
|
+
choice(source.authentication, "/authentication", [
|
|
301
|
+
"public",
|
|
302
|
+
"optional",
|
|
303
|
+
"required",
|
|
304
|
+
]);
|
|
305
|
+
if ("exposure" in source) {
|
|
306
|
+
const exposure = record(source.exposure, "/exposure", new Set(["http", "cli", "mcp", "internal"]));
|
|
307
|
+
for (const [surface, value] of Object.entries(exposure))
|
|
308
|
+
choice(value, `/exposure/${surface}`, [
|
|
309
|
+
"disabled",
|
|
310
|
+
"private",
|
|
311
|
+
"authenticated",
|
|
312
|
+
"public",
|
|
313
|
+
]);
|
|
314
|
+
source.exposure = Object.freeze(exposure);
|
|
315
|
+
}
|
|
316
|
+
const explicitSecretOptional = [];
|
|
317
|
+
let explicitRateLimitCost = false;
|
|
318
|
+
if ("requirements" in source) {
|
|
319
|
+
const requirements = record(source.requirements, "/requirements", new Set(["secrets"]));
|
|
320
|
+
if (!("secrets" in requirements))
|
|
321
|
+
required("/requirements/secrets", "Declare the logical secret requirement array.");
|
|
322
|
+
const secrets = [];
|
|
323
|
+
try {
|
|
324
|
+
const raw = requirements.secrets;
|
|
325
|
+
if (!Array.isArray(raw))
|
|
326
|
+
invalid("/requirements/secrets", "Supply a dense secret requirement array.");
|
|
327
|
+
else {
|
|
328
|
+
const properties = Object.getOwnPropertyDescriptors(raw);
|
|
329
|
+
if (Object.getOwnPropertySymbols(raw).length ||
|
|
330
|
+
Object.keys(properties).length !== raw.length + 1)
|
|
331
|
+
invalid("/requirements/secrets", "Supply a dense array without extra properties.");
|
|
332
|
+
for (let index = 0; index < raw.length; index++) {
|
|
333
|
+
const path = `/requirements/secrets/${index}`;
|
|
334
|
+
const property = properties[String(index)];
|
|
335
|
+
if (!property || !("value" in property) || !property.enumerable) {
|
|
336
|
+
invalid(path, "Supply a data element without holes or accessors.");
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
const secret = record(property.value, path, new Set(["name", "optional", "description"]));
|
|
340
|
+
text(secret.name, `${path}/name`);
|
|
341
|
+
if (!("optional" in secret))
|
|
342
|
+
secret.optional = false;
|
|
343
|
+
else if (typeof secret.optional !== "boolean")
|
|
344
|
+
invalid(`${path}/optional`, "Supply a boolean.");
|
|
345
|
+
else
|
|
346
|
+
explicitSecretOptional.push(index);
|
|
347
|
+
if ("description" in secret)
|
|
348
|
+
text(secret.description, `${path}/description`);
|
|
349
|
+
secrets.push(Object.freeze(secret));
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
invalid("/requirements/secrets", "The array could not be inspected safely.");
|
|
355
|
+
}
|
|
356
|
+
requirements.secrets = Object.freeze(secrets);
|
|
357
|
+
source.requirements = Object.freeze(requirements);
|
|
358
|
+
}
|
|
359
|
+
if ("limits" in source) {
|
|
360
|
+
const limits = record(source.limits, "/limits", new Set(["rateLimit"]));
|
|
361
|
+
if ("rateLimit" in limits) {
|
|
362
|
+
const path = "/limits/rateLimit";
|
|
363
|
+
const rateLimit = record(limits.rateLimit, path, new Set(["policy", "cost", "description"]));
|
|
364
|
+
text(rateLimit.policy, `${path}/policy`);
|
|
365
|
+
explicitRateLimitCost = "cost" in rateLimit;
|
|
366
|
+
if (!explicitRateLimitCost)
|
|
367
|
+
rateLimit.cost = 1;
|
|
368
|
+
else if (!Number.isSafeInteger(rateLimit.cost) ||
|
|
369
|
+
rateLimit.cost <= 0)
|
|
370
|
+
invalid(`${path}/cost`, "Supply a positive safe integer rate-limit cost.");
|
|
371
|
+
if ("description" in rateLimit)
|
|
372
|
+
text(rateLimit.description, `${path}/description`);
|
|
373
|
+
limits.rateLimit = Object.freeze(rateLimit);
|
|
374
|
+
}
|
|
375
|
+
source.limits = Object.freeze(limits);
|
|
376
|
+
}
|
|
377
|
+
let permissions = source.permissions;
|
|
378
|
+
if ("permissions" in source && permissions !== "public") {
|
|
379
|
+
const clauses = record(permissions, "/permissions", new Set(["allOf", "anyOf"]));
|
|
380
|
+
if (!("allOf" in clauses) && !("anyOf" in clauses))
|
|
381
|
+
required("/permissions", 'Declare "public" or a nonempty allOf/anyOf permission clause.');
|
|
382
|
+
for (const key of Object.keys(clauses))
|
|
383
|
+
clauses[key] = list(clauses[key], `/permissions/${key}`, true);
|
|
384
|
+
permissions = Object.freeze(clauses);
|
|
385
|
+
}
|
|
386
|
+
const effects = record(source.effects, "/effects", new Set(["impact", "idempotency", "confirmation", "retry"]));
|
|
387
|
+
const effectPresence = Object.freeze({
|
|
388
|
+
idempotency: "idempotency" in effects,
|
|
389
|
+
confirmation: "confirmation" in effects,
|
|
390
|
+
retry: "retry" in effects,
|
|
391
|
+
});
|
|
392
|
+
if (!("impact" in effects))
|
|
393
|
+
required("/effects/impact", "Declare read, write, or destructive impact explicitly.");
|
|
394
|
+
else
|
|
395
|
+
choice(effects.impact, "/effects/impact", ["read", "write", "destructive"]);
|
|
396
|
+
if (!("idempotency" in effects)) {
|
|
397
|
+
if (effects.impact === "read")
|
|
398
|
+
effects.idempotency = "intrinsic";
|
|
399
|
+
else
|
|
400
|
+
required("/effects/idempotency", "Declare none, intrinsic, or key for a non-read capability.");
|
|
401
|
+
}
|
|
402
|
+
else
|
|
403
|
+
choice(effects.idempotency, "/effects/idempotency", [
|
|
404
|
+
"none",
|
|
405
|
+
"intrinsic",
|
|
406
|
+
"key",
|
|
407
|
+
]);
|
|
408
|
+
if (!("confirmation" in effects))
|
|
409
|
+
effects.confirmation =
|
|
410
|
+
effects.impact === "destructive" ? "required" : "none";
|
|
411
|
+
else
|
|
412
|
+
choice(effects.confirmation, "/effects/confirmation", ["none", "required"]);
|
|
413
|
+
const retry = "retry" in effects
|
|
414
|
+
? record(effects.retry, "/effects/retry", new Set(["mode"]))
|
|
415
|
+
: { mode: "never" };
|
|
416
|
+
choice(retry.mode, "/effects/retry/mode", ["never", "safe"]);
|
|
417
|
+
effects.retry = Object.freeze(retry);
|
|
418
|
+
if (effects.impact === "read" && effects.idempotency !== "intrinsic")
|
|
419
|
+
report("CAP_AUTHORING_POLICY_INVALID", "/effects/idempotency", "Read capabilities require intrinsic idempotency.");
|
|
420
|
+
if (effects.impact === "destructive" && effects.confirmation !== "required")
|
|
421
|
+
report("CAP_AUTHORING_POLICY_INVALID", "/effects/confirmation", "Destructive capabilities require confirmation.");
|
|
422
|
+
if (effects.idempotency === "none" && retry.mode === "safe")
|
|
423
|
+
report("CAP_AUTHORING_POLICY_INVALID", "/effects/retry/mode", "A non-idempotent capability cannot promise safe retry.");
|
|
424
|
+
const errors = "errors" in source
|
|
425
|
+
? record(source.errors, "/errors")
|
|
426
|
+
: Object.create(null);
|
|
427
|
+
const explicitErrorRetryable = new Set();
|
|
428
|
+
for (const [code, value] of Object.entries(errors)) {
|
|
429
|
+
const path = pointer("/errors", code);
|
|
430
|
+
if (!/^[A-Z][A-Z0-9_]*$/.test(code) || code.startsWith("CAP_"))
|
|
431
|
+
invalid(path, "Use an uppercase domain error code without the reserved CAP_ prefix.");
|
|
432
|
+
const error = record(value, path, new Set(["status", "message", "details", "retryable"]));
|
|
433
|
+
if (!statuses.has(error.status))
|
|
434
|
+
invalid(`${path}/status`, "Supply a canonical error status.");
|
|
435
|
+
text(error.message, `${path}/message`);
|
|
436
|
+
if ("details" in error)
|
|
437
|
+
schema(error.details, `${path}/details`);
|
|
438
|
+
if (!("retryable" in error))
|
|
439
|
+
error.retryable = false;
|
|
440
|
+
else if (typeof error.retryable !== "boolean")
|
|
441
|
+
invalid(`${path}/retryable`, "Supply a boolean.");
|
|
442
|
+
else
|
|
443
|
+
explicitErrorRetryable.add(code);
|
|
444
|
+
errors[code] = Object.freeze(error);
|
|
445
|
+
}
|
|
446
|
+
const tags = "tags" in source ? list(source.tags, "/tags", false) : undefined;
|
|
447
|
+
if ("examples" in source) {
|
|
448
|
+
const examples = [];
|
|
449
|
+
const raw = source.examples;
|
|
450
|
+
try {
|
|
451
|
+
if (!Array.isArray(raw))
|
|
452
|
+
invalid("/examples", "Supply a dense capability example array.");
|
|
453
|
+
else {
|
|
454
|
+
const properties = Object.getOwnPropertyDescriptors(raw);
|
|
455
|
+
const dense = !Object.getOwnPropertySymbols(raw).length &&
|
|
456
|
+
Object.keys(properties).length === raw.length + 1;
|
|
457
|
+
if (!dense)
|
|
458
|
+
invalid("/examples", "Supply a dense array without extra properties.");
|
|
459
|
+
if (dense)
|
|
460
|
+
for (let index = 0; index < raw.length; index++) {
|
|
461
|
+
const path = `/examples/${index}`;
|
|
462
|
+
const property = properties[String(index)];
|
|
463
|
+
if (!property || !property.enumerable || !("value" in property)) {
|
|
464
|
+
invalid(path, "Supply a data element without holes or accessors.");
|
|
465
|
+
continue;
|
|
466
|
+
}
|
|
467
|
+
const example = record(property.value, path, new Set(["name", "description", "input", "output", "error"]));
|
|
468
|
+
if (!("name" in example))
|
|
469
|
+
required(`${path}/name`, "Name the example.");
|
|
470
|
+
else
|
|
471
|
+
text(example.name, `${path}/name`);
|
|
472
|
+
if ("description" in example)
|
|
473
|
+
text(example.description, `${path}/description`);
|
|
474
|
+
if (!("input" in example))
|
|
475
|
+
required(`${path}/input`, "Supply example input as JSON data.");
|
|
476
|
+
else
|
|
477
|
+
example.input = json(example.input, `${path}/input`);
|
|
478
|
+
if ("output" in example)
|
|
479
|
+
example.output = json(example.output, `${path}/output`);
|
|
480
|
+
if ("error" in example) {
|
|
481
|
+
const errorPath = `${path}/error`;
|
|
482
|
+
const error = record(example.error, errorPath, new Set(["code", "details"]));
|
|
483
|
+
if (!("code" in error))
|
|
484
|
+
required(`${errorPath}/code`, "Name the declared error code.");
|
|
485
|
+
else
|
|
486
|
+
text(error.code, `${errorPath}/code`);
|
|
487
|
+
if ("details" in error)
|
|
488
|
+
error.details = json(error.details, `${errorPath}/details`);
|
|
489
|
+
example.error = Object.freeze(error);
|
|
490
|
+
}
|
|
491
|
+
examples.push(Object.freeze(example));
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
catch {
|
|
496
|
+
invalid("/examples", "The example array could not be inspected safely.");
|
|
497
|
+
}
|
|
498
|
+
source.examples = Object.freeze(examples);
|
|
499
|
+
}
|
|
500
|
+
if (diagnostics.length) {
|
|
501
|
+
diagnostics.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : a.code < b.code ? -1 : 1);
|
|
502
|
+
throw new CapabilityDefinitionError(diagnostics);
|
|
503
|
+
}
|
|
504
|
+
const descriptor = Object.create(null);
|
|
505
|
+
for (const [key, value] of Object.entries(source))
|
|
506
|
+
if (key !== "handler")
|
|
507
|
+
descriptor[key] = value;
|
|
508
|
+
descriptor.permissions = permissions;
|
|
509
|
+
descriptor.effects = Object.freeze(effects);
|
|
510
|
+
descriptor.errors = Object.freeze(errors);
|
|
511
|
+
if (tags)
|
|
512
|
+
descriptor.tags = tags;
|
|
513
|
+
authoringPresenceSet(descriptor, Object.freeze({
|
|
514
|
+
effects: effectPresence,
|
|
515
|
+
errorRetryable: Object.freeze([...explicitErrorRetryable]),
|
|
516
|
+
secretOptional: Object.freeze(explicitSecretOptional),
|
|
517
|
+
rateLimitCost: explicitRateLimitCost,
|
|
518
|
+
sharedSchemas: Object.freeze([...sharedSchemaOccurrences]),
|
|
519
|
+
}));
|
|
520
|
+
Object.freeze(descriptor);
|
|
521
|
+
registerDescriptorBinding(descriptor, source.handler);
|
|
522
|
+
return descriptor;
|
|
523
|
+
}
|
|
524
|
+
//# sourceMappingURL=define-capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-capability.js","sourceRoot":"","sources":["../src/define-capability.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { defineCapability, defineSharedSchema, isCapability, CapabilityDefinitionError, } from "./define-capability.js";
|
|
2
|
+
export type { AuthoringDiagnostic } from "./define-capability.js";
|
|
3
|
+
export type { AuthorSchema, SharedSchema, CapabilitySchema, SchemaInput, SchemaOutput, Permissions, ExposureLevel, CapabilityExposure, CapabilityEffects, CapabilityRequirements, CapabilityLimits, CapabilityExample, ErrorStatus, DeclaredError, ErrorDeclarations, CapabilityError, CapabilityContext, PrincipalSnapshot, IdentityContext, InternalInvocationOptions, GeneratedCapabilityFacade, CapabilityInvocationSuccess, CapabilityInvocationFailure, DeclaredCapabilityError, DynamicDeclaredCapabilityError, FrameworkCapabilityError, CapabilityInvocationResult, CapabilityDefinition, Capability, RuntimeBindingHandle, } from "./types.js";
|
|
4
|
+
export { selectSchemaProvider, SchemaProviderSelectionError, } from "./schema-provider.js";
|
|
5
|
+
export type { SchemaConversionContext, RuntimeValidator, SchemaProvider, SchemaProviderSelectionCode, } from "./schema-provider.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,EAC3B,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,UAAU,EACV,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAkChC,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RuntimeBindingHandle } from "./types.js";
|
|
2
|
+
/** Framework-only module; deliberately absent from package exports. */
|
|
3
|
+
export interface RuntimeBindingIdentity {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly version: string;
|
|
6
|
+
readonly irHash: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RuntimeBindingResolution extends RuntimeBindingIdentity {
|
|
9
|
+
readonly handler: unknown;
|
|
10
|
+
}
|
|
11
|
+
export declare function isBoundDescriptor(value: unknown): value is object;
|
|
12
|
+
export declare function registerDescriptorBinding(descriptor: object, handler: unknown): void;
|
|
13
|
+
export declare function getBindingHandle(descriptor: unknown, identity: RuntimeBindingIdentity): RuntimeBindingHandle | undefined;
|
|
14
|
+
export declare function resolveBindingHandle(value: unknown): RuntimeBindingResolution | undefined;
|
|
15
|
+
//# sourceMappingURL=internal-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-bindings.d.ts","sourceRoot":"","sources":["../src/internal-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAUD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEjE;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,IAAI,CAIN;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,sBAAsB,GAC/B,oBAAoB,GAAG,SAAS,CAalC;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,wBAAwB,GAAG,SAAS,CAItC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const descriptors = new WeakMap();
|
|
2
|
+
const descriptorHas = descriptors.has.bind(descriptors);
|
|
3
|
+
const descriptorGet = descriptors.get.bind(descriptors);
|
|
4
|
+
const descriptorSet = descriptors.set.bind(descriptors);
|
|
5
|
+
const handles = new WeakMap();
|
|
6
|
+
const handleGet = handles.get.bind(handles);
|
|
7
|
+
const handleSet = handles.set.bind(handles);
|
|
8
|
+
export function isBoundDescriptor(value) {
|
|
9
|
+
return typeof value === "object" && value !== null && descriptorHas(value);
|
|
10
|
+
}
|
|
11
|
+
export function registerDescriptorBinding(descriptor, handler) {
|
|
12
|
+
if (descriptorHas(descriptor))
|
|
13
|
+
throw new Error("Descriptor binding already registered.");
|
|
14
|
+
descriptorSet(descriptor, handler);
|
|
15
|
+
}
|
|
16
|
+
export function getBindingHandle(descriptor, identity) {
|
|
17
|
+
if (!isBoundDescriptor(descriptor))
|
|
18
|
+
return undefined;
|
|
19
|
+
const handle = Object.freeze(Object.create(null));
|
|
20
|
+
handleSet(handle, Object.freeze({
|
|
21
|
+
id: identity.id,
|
|
22
|
+
version: identity.version,
|
|
23
|
+
irHash: identity.irHash,
|
|
24
|
+
handler: descriptorGet(descriptor),
|
|
25
|
+
}));
|
|
26
|
+
return handle;
|
|
27
|
+
}
|
|
28
|
+
export function resolveBindingHandle(value) {
|
|
29
|
+
return typeof value === "object" && value !== null
|
|
30
|
+
? handleGet(value)
|
|
31
|
+
: undefined;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=internal-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-bindings.js","sourceRoot":"","sources":["../src/internal-bindings.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAmB,CAAC;AACnD,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAoC,CAAC;AAChE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE5C,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,OAAgB;IAEhB,IAAI,aAAa,CAAC,UAAU,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,UAAmB,EACnB,QAAgC;IAEhC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAyB,CAAC;IAC1E,SAAS,CACP,MAAM,EACN,MAAM,CAAC,MAAM,CAAC;QACZ,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC;KACnC,CAAC,CACH,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAChD,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
|