@uppercut-labs/agent-native 0.0.0-stage → 1.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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +164 -2
  3. package/agent/agent-prompt-short.md +1 -0
  4. package/agent/agent-prompt.md +26 -0
  5. package/bin/agent-native-site.mjs +269 -0
  6. package/bin/discover-routes.mjs +162 -0
  7. package/bin/verify-publication.mjs +317 -0
  8. package/dist/adapters/zod.d.ts +4 -0
  9. package/dist/adapters/zod.d.ts.map +1 -0
  10. package/dist/adapters/zod.js +20 -0
  11. package/dist/adapters/zod.js.map +1 -0
  12. package/dist/astro.d.ts +13 -0
  13. package/dist/astro.d.ts.map +1 -0
  14. package/dist/astro.js +41 -0
  15. package/dist/astro.js.map +1 -0
  16. package/dist/auth.d.ts +52 -0
  17. package/dist/auth.d.ts.map +1 -0
  18. package/dist/auth.js +128 -0
  19. package/dist/auth.js.map +1 -0
  20. package/dist/browser.d.ts +47 -0
  21. package/dist/browser.d.ts.map +1 -0
  22. package/dist/browser.js +219 -0
  23. package/dist/browser.js.map +1 -0
  24. package/dist/cli.d.ts +80 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +484 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/core/assert-never.d.ts +2 -0
  29. package/dist/core/assert-never.d.ts.map +1 -0
  30. package/dist/core/assert-never.js +5 -0
  31. package/dist/core/assert-never.js.map +1 -0
  32. package/dist/core/binding-internal.d.ts +10 -0
  33. package/dist/core/binding-internal.d.ts.map +1 -0
  34. package/dist/core/binding-internal.js +15 -0
  35. package/dist/core/binding-internal.js.map +1 -0
  36. package/dist/core/composition.d.ts +119 -0
  37. package/dist/core/composition.d.ts.map +1 -0
  38. package/dist/core/composition.js +545 -0
  39. package/dist/core/composition.js.map +1 -0
  40. package/dist/core/contracts.d.ts +55 -0
  41. package/dist/core/contracts.d.ts.map +1 -0
  42. package/dist/core/contracts.js +271 -0
  43. package/dist/core/contracts.js.map +1 -0
  44. package/dist/core/diagnostics.d.ts +14 -0
  45. package/dist/core/diagnostics.d.ts.map +1 -0
  46. package/dist/core/diagnostics.js +29 -0
  47. package/dist/core/diagnostics.js.map +1 -0
  48. package/dist/core/executor.d.ts +52 -0
  49. package/dist/core/executor.d.ts.map +1 -0
  50. package/dist/core/executor.js +98 -0
  51. package/dist/core/executor.js.map +1 -0
  52. package/dist/core/registry.d.ts +37 -0
  53. package/dist/core/registry.d.ts.map +1 -0
  54. package/dist/core/registry.js +75 -0
  55. package/dist/core/registry.js.map +1 -0
  56. package/dist/core/schema.d.ts +9 -0
  57. package/dist/core/schema.d.ts.map +1 -0
  58. package/dist/core/schema.js +36 -0
  59. package/dist/core/schema.js.map +1 -0
  60. package/dist/discovery.d.ts +16 -0
  61. package/dist/discovery.d.ts.map +1 -0
  62. package/dist/discovery.js +23 -0
  63. package/dist/discovery.js.map +1 -0
  64. package/dist/doctor.d.ts +200 -0
  65. package/dist/doctor.d.ts.map +1 -0
  66. package/dist/doctor.js +287 -0
  67. package/dist/doctor.js.map +1 -0
  68. package/dist/harness-codex.d.ts +17 -0
  69. package/dist/harness-codex.d.ts.map +1 -0
  70. package/dist/harness-codex.js +485 -0
  71. package/dist/harness-codex.js.map +1 -0
  72. package/dist/harness-mcp-bridge.d.ts +14 -0
  73. package/dist/harness-mcp-bridge.d.ts.map +1 -0
  74. package/dist/harness-mcp-bridge.js +159 -0
  75. package/dist/harness-mcp-bridge.js.map +1 -0
  76. package/dist/harness.d.ts +72 -0
  77. package/dist/harness.d.ts.map +1 -0
  78. package/dist/harness.js +101 -0
  79. package/dist/harness.js.map +1 -0
  80. package/dist/http.d.ts +20 -0
  81. package/dist/http.d.ts.map +1 -0
  82. package/dist/http.js +537 -0
  83. package/dist/http.js.map +1 -0
  84. package/dist/index.d.ts +16 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +8 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/init.d.ts +73 -0
  89. package/dist/init.d.ts.map +1 -0
  90. package/dist/init.js +1039 -0
  91. package/dist/init.js.map +1 -0
  92. package/dist/mcp-apps.d.ts +9 -0
  93. package/dist/mcp-apps.d.ts.map +1 -0
  94. package/dist/mcp-apps.js +171 -0
  95. package/dist/mcp-apps.js.map +1 -0
  96. package/dist/mcp-core.d.ts +64 -0
  97. package/dist/mcp-core.d.ts.map +1 -0
  98. package/dist/mcp-core.js +358 -0
  99. package/dist/mcp-core.js.map +1 -0
  100. package/dist/mcp.d.ts +3 -0
  101. package/dist/mcp.d.ts.map +1 -0
  102. package/dist/mcp.js +2 -0
  103. package/dist/mcp.js.map +1 -0
  104. package/dist/next-browser.d.ts +14 -0
  105. package/dist/next-browser.d.ts.map +1 -0
  106. package/dist/next-browser.js +14 -0
  107. package/dist/next-browser.js.map +1 -0
  108. package/dist/next.d.ts +24 -0
  109. package/dist/next.d.ts.map +1 -0
  110. package/dist/next.js +28 -0
  111. package/dist/next.js.map +1 -0
  112. package/dist/package-version.d.ts +2 -0
  113. package/dist/package-version.d.ts.map +1 -0
  114. package/dist/package-version.js +3 -0
  115. package/dist/package-version.js.map +1 -0
  116. package/dist/publication.d.ts +115 -0
  117. package/dist/publication.d.ts.map +1 -0
  118. package/dist/publication.js +441 -0
  119. package/dist/publication.js.map +1 -0
  120. package/dist/registry.d.ts +3 -0
  121. package/dist/registry.d.ts.map +1 -0
  122. package/dist/registry.js +2 -0
  123. package/dist/registry.js.map +1 -0
  124. package/docs/adopt-existing-site.md +189 -0
  125. package/docs/browser.md +70 -0
  126. package/docs/capabilities-and-bindings.md +141 -0
  127. package/docs/cli.md +88 -0
  128. package/docs/compatibility.md +32 -0
  129. package/docs/composition-and-versioning.md +113 -0
  130. package/docs/doctor-and-troubleshooting.md +58 -0
  131. package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-03.md +17 -0
  132. package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-10.md +30 -0
  133. package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-12.md +10 -0
  134. package/docs/evidence/UAN-002-house-style-review.md +29 -0
  135. package/docs/evidence/UAN-007-astro.md +43 -0
  136. package/docs/evidence/UAN-008-worker-sidecar.md +56 -0
  137. package/docs/evidence/UAN-009-init.md +43 -0
  138. package/docs/evidence/UAN-010-auth.md +17 -0
  139. package/docs/evidence/UAN-011-discovery.md +18 -0
  140. package/docs/evidence/UAN-012-mcp-apps.md +14 -0
  141. package/docs/evidence/UAN-013-astro-on-demand.md +47 -0
  142. package/docs/evidence/UAN-014-next.md +57 -0
  143. package/docs/evidence/UAN-015-node-hono.md +69 -0
  144. package/docs/evidence/UAN-016-composition.md +52 -0
  145. package/docs/evidence/UAN-017-version-migrations.md +50 -0
  146. package/docs/evidence/UAN-018-surface-overrides.md +30 -0
  147. package/docs/evidence/UAN-019-doctor.md +19 -0
  148. package/docs/evidence/UAN-020-negative-security-fixtures.md +61 -0
  149. package/docs/evidence/UAN-020-operational-failure-safety.md +49 -0
  150. package/docs/evidence/UAN-021-docs-coverage.md +30 -0
  151. package/docs/evidence/UAN-022-cross-platform-license-notices.md +39 -0
  152. package/docs/evidence/UAN-022-overhead-license-audit.md +233 -0
  153. package/docs/evidence/UAN-022-package-portability.md +54 -0
  154. package/docs/evidence/UAN-023-commercial-agent-hosts.md +36 -0
  155. package/docs/evidence/UAN-023-inspector-host-probe.md +37 -0
  156. package/docs/evidence/UAN-023-inspector-web-and-astro-adoption.md +44 -0
  157. package/docs/evidence/UAN-023-native-webmcp-chrome.md +44 -0
  158. package/docs/evidence/UAN-024-release-readiness-2026-10-10.md +33 -0
  159. package/docs/evidence/UAN-024-release-readiness.md +41 -0
  160. package/docs/evidence/codex-harness.md +56 -0
  161. package/docs/evidence/gate-2-domain-expansion.md +35 -0
  162. package/docs/evidence/recovery-and-selection-recipes-2026-10-15.md +63 -0
  163. package/docs/for-agents.md +50 -0
  164. package/docs/frameworks.md +62 -0
  165. package/docs/getting-started.md +109 -0
  166. package/docs/harness-codex.md +117 -0
  167. package/docs/harness-mcp-bridge.md +30 -0
  168. package/docs/http.md +80 -0
  169. package/docs/installation.md +95 -0
  170. package/docs/mcp-apps.md +57 -0
  171. package/docs/mcp.md +178 -0
  172. package/docs/next.md +73 -0
  173. package/docs/permissions-and-discovery.md +58 -0
  174. package/docs/programmatic-harness.md +88 -0
  175. package/docs/readability-frameworks.md +18 -0
  176. package/docs/reference.md +161 -0
  177. package/docs/release-handoff.md +41 -0
  178. package/docs/site-publication.md +85 -0
  179. package/docs/stability.md +53 -0
  180. package/docs/static-sites.md +141 -0
  181. package/docs/support-and-limitations.md +20 -0
  182. package/docs/surfaces.md +27 -0
  183. package/docs/upgrading-to-1.0.md +26 -0
  184. package/package.json +188 -4
  185. package/skill/agent-native/SKILL.md +54 -0
  186. package/skill/agent-native/references/adapter-decision.md +19 -0
  187. package/skill/agent-native/references/verification.md +25 -0
package/dist/http.js ADDED
@@ -0,0 +1,537 @@
1
+ import { capabilitySurfaceNames } from './core/composition.js';
2
+ import { canonicalCapabilityId } from './core/contracts.js';
3
+ import { createDiagnosticObservation } from './core/diagnostics.js';
4
+ import { assertNever } from './core/assert-never.js';
5
+ import { executeCapability } from './core/executor.js';
6
+ import { cloneJsonValue } from './core/schema.js';
7
+ const DEFAULT_BASE_PATH = '/agent-native/v1';
8
+ const DEFAULT_MAX_BYTES = 32 * 1024;
9
+ const DEFAULT_DEADLINE_MS = 10_000;
10
+ const MAX_BODY_BYTES = 1024 * 1024;
11
+ const MAX_DEADLINE_MS = 300_000;
12
+ const ERROR_SCHEMA = {
13
+ type: 'object',
14
+ properties: {
15
+ error: {
16
+ type: 'object',
17
+ properties: {
18
+ code: { type: 'string' },
19
+ message: { type: 'string' },
20
+ },
21
+ required: ['code', 'message'],
22
+ additionalProperties: false,
23
+ },
24
+ },
25
+ required: ['error'],
26
+ additionalProperties: false,
27
+ };
28
+ function basePath(value = DEFAULT_BASE_PATH) {
29
+ if (!value.startsWith('/') ||
30
+ value === '/' ||
31
+ value.includes('?') ||
32
+ value.includes('#') ||
33
+ value.includes('\\') ||
34
+ value.split('/').some((part) => part === '.' || part === '..')) {
35
+ throw new TypeError('basePath must be an absolute URL path without query or traversal segments');
36
+ }
37
+ let result = value;
38
+ while (result.endsWith('/')) {
39
+ result = result.slice(0, -1);
40
+ }
41
+ if (result.includes('//') ||
42
+ !result
43
+ .slice(1)
44
+ .split('/')
45
+ .every((segment) => Array.from(segment).every((character) => /[A-Za-z0-9._~-]/.test(character)))) {
46
+ throw new TypeError('basePath contains unsupported path characters');
47
+ }
48
+ return result;
49
+ }
50
+ function validateOptions(options) {
51
+ const root = basePath(options.basePath);
52
+ const maxRequestBytes = options.maxRequestBytes ?? DEFAULT_MAX_BYTES;
53
+ const deadlineMs = options.deadlineMs ?? DEFAULT_DEADLINE_MS;
54
+ if (!Number.isSafeInteger(maxRequestBytes) ||
55
+ maxRequestBytes < 1 ||
56
+ maxRequestBytes > MAX_BODY_BYTES) {
57
+ throw new RangeError('maxRequestBytes must be between 1 and 1048576');
58
+ }
59
+ if (!Number.isSafeInteger(deadlineMs) || deadlineMs < 1 || deadlineMs > MAX_DEADLINE_MS) {
60
+ throw new RangeError('deadlineMs must be between 1 and 300000');
61
+ }
62
+ return { root, maxRequestBytes, deadlineMs };
63
+ }
64
+ export function httpInvocationPath(identityOrDefinition, root = DEFAULT_BASE_PATH) {
65
+ if ('identity' in identityOrDefinition) {
66
+ return (identityOrDefinition.surfaces?.http?.path ??
67
+ basePath(root) + capabilitySurfaceNames(identityOrDefinition.identity).http);
68
+ }
69
+ return basePath(root) + capabilitySurfaceNames(identityOrDefinition).http;
70
+ }
71
+ function httpMethod(definition) {
72
+ return definition.surfaces?.http?.method ?? 'POST';
73
+ }
74
+ function isPublicRead(definition) {
75
+ return definition.risk === 'read' && definition.access.kind === 'public';
76
+ }
77
+ function hasUniqueServerBinding(registry, definition) {
78
+ const id = canonicalCapabilityId(definition.identity);
79
+ return (registry.bindings.filter((binding) => binding.capabilityId === id && binding.targets.includes('server')).length === 1);
80
+ }
81
+ function copySchema(schema) {
82
+ const result = cloneJsonValue(schema, 'schema');
83
+ if (typeof result !== 'object' || result === null || Array.isArray(result)) {
84
+ throw new TypeError('schema must serialize to an object');
85
+ }
86
+ return result;
87
+ }
88
+ function scalarQuerySchema(value, field) {
89
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
90
+ throw new TypeError(`GET input field ${field} has an unsupported query conversion`);
91
+ }
92
+ const schema = value;
93
+ if (Array.isArray(schema['enum']) &&
94
+ schema['enum'].every((item) => typeof item === 'string')) {
95
+ return { schema, array: false };
96
+ }
97
+ if (schema['type'] === 'array') {
98
+ const item = scalarQuerySchema(schema['items'], field);
99
+ if (item.array)
100
+ throw new TypeError(`GET input field ${field} has nested arrays`);
101
+ return { schema, array: true };
102
+ }
103
+ if (!['string', 'number', 'integer', 'boolean'].includes(String(schema['type']))) {
104
+ throw new TypeError(`GET input field ${field} has an unsupported query conversion`);
105
+ }
106
+ return { schema, array: false };
107
+ }
108
+ function queryFields(definition) {
109
+ const schema = definition.input.toJSONSchema();
110
+ const properties = schema['properties'];
111
+ if (schema['type'] !== 'object' ||
112
+ typeof properties !== 'object' ||
113
+ properties === null ||
114
+ Array.isArray(properties)) {
115
+ throw new TypeError('GET HTTP surfaces require a top-level object input schema');
116
+ }
117
+ const mapping = definition.surfaces?.http?.query ?? {};
118
+ for (const field of Object.keys(mapping)) {
119
+ if (!Object.hasOwn(properties, field)) {
120
+ throw new TypeError(`GET query mapping references unknown input field ${field}`);
121
+ }
122
+ }
123
+ let parameters = new Set();
124
+ return Object.entries(properties).map(([field, value]) => {
125
+ const parameter = Object.hasOwn(mapping, field) ? mapping[field] : field;
126
+ if (parameter === undefined)
127
+ throw new TypeError(`missing GET query parameter ${field}`);
128
+ if (parameters.has(parameter))
129
+ throw new TypeError(`duplicate GET query parameter ${parameter}`);
130
+ parameters.add(parameter);
131
+ return { field, parameter, ...scalarQuerySchema(value, field) };
132
+ });
133
+ }
134
+ function parseQueryScalar(value, schema) {
135
+ if (Array.isArray(schema['enum'])) {
136
+ const match = schema['enum'].find((candidate) => candidate === value);
137
+ if (match === undefined)
138
+ throw new TypeError('invalid query enum');
139
+ return match;
140
+ }
141
+ switch (schema['type']) {
142
+ case 'string':
143
+ return value;
144
+ case 'number': {
145
+ if (value.trim().length === 0)
146
+ throw new TypeError('invalid query number');
147
+ const number = Number(value);
148
+ if (!Number.isFinite(number))
149
+ throw new TypeError('invalid query number');
150
+ return number;
151
+ }
152
+ case 'integer': {
153
+ if (value.trim().length === 0)
154
+ throw new TypeError('invalid query integer');
155
+ const number = Number(value);
156
+ if (!Number.isSafeInteger(number))
157
+ throw new TypeError('invalid query integer');
158
+ return number;
159
+ }
160
+ case 'boolean':
161
+ if (value !== 'true' && value !== 'false')
162
+ throw new TypeError('invalid query boolean');
163
+ return value === 'true';
164
+ default:
165
+ throw new TypeError('unsupported query conversion');
166
+ }
167
+ }
168
+ function queryInput(url, fields) {
169
+ const known = new Set(fields.map((field) => field.parameter));
170
+ for (const parameter of url.searchParams.keys()) {
171
+ if (!known.has(parameter))
172
+ throw new TypeError(`unknown query parameter ${parameter}`);
173
+ }
174
+ let input = Object.create(null);
175
+ for (const field of fields) {
176
+ const values = url.searchParams.getAll(field.parameter);
177
+ if (values.length === 0)
178
+ continue;
179
+ if (!field.array && values.length !== 1) {
180
+ throw new TypeError(`duplicate query parameter ${field.parameter}`);
181
+ }
182
+ if (field.array) {
183
+ const items = field.schema['items'];
184
+ input[field.field] = values.map((value) => parseQueryScalar(value, items));
185
+ }
186
+ else {
187
+ input[field.field] = parseQueryScalar(values[0] ?? '', field.schema);
188
+ }
189
+ }
190
+ return input;
191
+ }
192
+ function isJsonObject(value) {
193
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
194
+ }
195
+ export function httpQueryParameters(definition, input) {
196
+ if (httpMethod(definition) !== 'GET') {
197
+ throw new TypeError('HTTP query parameters require a GET surface');
198
+ }
199
+ const value = cloneJsonValue(input, 'GET request input');
200
+ if (!isJsonObject(value)) {
201
+ throw new TypeError('GET request input must be an object');
202
+ }
203
+ let parameters = new URLSearchParams();
204
+ for (const field of queryFields(definition)) {
205
+ const item = value[field.field];
206
+ if (item === undefined)
207
+ continue;
208
+ const values = field.array ? item : [item];
209
+ if (!Array.isArray(values)) {
210
+ throw new TypeError(`GET input field ${field.field} must be an array`);
211
+ }
212
+ for (const entry of values) {
213
+ if (typeof entry !== 'string' && typeof entry !== 'number' && typeof entry !== 'boolean') {
214
+ throw new TypeError(`GET input field ${field.field} cannot be represented in a query`);
215
+ }
216
+ parameters.append(field.parameter, String(entry));
217
+ }
218
+ }
219
+ return parameters;
220
+ }
221
+ function visibleDefinitions(registry, root = DEFAULT_BASE_PATH) {
222
+ const definitions = registry.definitions.filter((candidate) => isPublicRead(candidate) && hasUniqueServerBinding(registry, candidate));
223
+ let paths = new Map();
224
+ const reservedPaths = new Set([`${root}/openapi.json`, `${root}/health`]);
225
+ for (const definition of definitions) {
226
+ const path = httpInvocationPath(definition, root);
227
+ if (reservedPaths.has(path))
228
+ throw new TypeError(`reserved HTTP path ${path}`);
229
+ const previous = paths.get(path);
230
+ if (previous !== undefined) {
231
+ throw new TypeError(`duplicate HTTP path ${path} for ${previous} and ${canonicalCapabilityId(definition.identity)}`);
232
+ }
233
+ paths.set(path, canonicalCapabilityId(definition.identity));
234
+ if (httpMethod(definition) === 'GET')
235
+ queryFields(definition);
236
+ }
237
+ return definitions;
238
+ }
239
+ function errorContent() {
240
+ return { 'application/json': { schema: copySchema(ERROR_SCHEMA) } };
241
+ }
242
+ export function createOpenApiDocument(registry, options = {}) {
243
+ const root = basePath(options.basePath);
244
+ let paths = {};
245
+ for (const definition of visibleDefinitions(registry, root)) {
246
+ const id = canonicalCapabilityId(definition.identity);
247
+ const operationId = capabilitySurfaceNames(definition.identity).openApiOperation;
248
+ const method = httpMethod(definition);
249
+ const inputSchema = copySchema(definition.input.toJSONSchema());
250
+ const input = method === 'GET'
251
+ ? {
252
+ parameters: queryFields(definition).map((field) => ({
253
+ name: field.parameter,
254
+ in: 'query',
255
+ required: Array.isArray(inputSchema['required']) &&
256
+ inputSchema['required'].includes(field.field),
257
+ schema: copySchema(field.schema),
258
+ ...(field.array ? { style: 'form', explode: true } : {}),
259
+ })),
260
+ }
261
+ : {
262
+ requestBody: {
263
+ required: true,
264
+ content: { 'application/json': { schema: inputSchema } },
265
+ },
266
+ };
267
+ paths[httpInvocationPath(definition, root)] = {
268
+ [method.toLowerCase()]: {
269
+ operationId,
270
+ summary: definition.description,
271
+ description: method === 'GET'
272
+ ? 'Read-only capability invocation through query parameters.'
273
+ : 'Generic capability invocation, not a REST resource route.',
274
+ 'x-agent-native-capability-id': id,
275
+ ...input,
276
+ responses: {
277
+ '200': {
278
+ description: 'Validated capability result.',
279
+ content: {
280
+ 'application/json': { schema: copySchema(definition.output.toJSONSchema()) },
281
+ },
282
+ },
283
+ '400': { description: 'Malformed JSON request body.', content: errorContent() },
284
+ '405': { description: 'Method not allowed for a visible capability path.' },
285
+ '404': {
286
+ description: 'Capability is unavailable or not visible.',
287
+ content: errorContent(),
288
+ },
289
+ '413': {
290
+ description: 'Request body exceeds the configured limit.',
291
+ content: errorContent(),
292
+ },
293
+ '415': { description: 'Request must use application/json.', content: errorContent() },
294
+ '422': {
295
+ description: 'Request does not match the input schema.',
296
+ content: errorContent(),
297
+ },
298
+ '500': { description: 'Execution or output validation failed.', content: errorContent() },
299
+ '503': {
300
+ description: 'No unique compatible binding is available.',
301
+ content: errorContent(),
302
+ },
303
+ '504': {
304
+ description: 'Execution exceeded its configured deadline.',
305
+ content: errorContent(),
306
+ },
307
+ },
308
+ },
309
+ };
310
+ }
311
+ return Object.freeze({
312
+ openapi: '3.1.0',
313
+ info: {
314
+ title: 'Agent Native Capability API',
315
+ version: '1.0.0',
316
+ description: 'Generated from explicitly public read capability contracts.',
317
+ },
318
+ paths,
319
+ });
320
+ }
321
+ function jsonResponse(body, status) {
322
+ const serialized = JSON.stringify(cloneJsonValue(body, 'response body'));
323
+ return new Response(serialized, {
324
+ status,
325
+ headers: { 'content-type': 'application/json; charset=utf-8' },
326
+ });
327
+ }
328
+ function errorResponse(status, code, message) {
329
+ return jsonResponse({ error: { code, message } }, status);
330
+ }
331
+ async function readJsonBody(request, limit) {
332
+ const mediaType = request.headers
333
+ .get('content-type')
334
+ ?.split(';', 1)[0]
335
+ ?.trim()
336
+ .toLowerCase();
337
+ if (mediaType !== 'application/json' && !mediaType?.endsWith('+json')) {
338
+ throw new TypeError('unsupported-content-type');
339
+ }
340
+ const length = request.headers.get('content-length');
341
+ if (length !== null) {
342
+ if (!/^[0-9]+$/.test(length))
343
+ throw new TypeError('invalid-json');
344
+ if (Number(length) > limit)
345
+ throw new RangeError('too-large');
346
+ }
347
+ if (request.body === null)
348
+ throw new TypeError('invalid-json');
349
+ let reader = request.body.getReader();
350
+ let chunks = [];
351
+ let size = 0;
352
+ try {
353
+ while (true) {
354
+ const part = await reader.read();
355
+ if (part.done)
356
+ break;
357
+ size += part.value.byteLength;
358
+ if (size > limit) {
359
+ await reader.cancel();
360
+ throw new RangeError('too-large');
361
+ }
362
+ chunks.push(part.value);
363
+ }
364
+ }
365
+ finally {
366
+ reader.releaseLock();
367
+ }
368
+ let bytes = new Uint8Array(size);
369
+ let offset = 0;
370
+ for (const chunk of chunks) {
371
+ bytes.set(chunk, offset);
372
+ offset += chunk.byteLength;
373
+ }
374
+ try {
375
+ return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
376
+ }
377
+ catch {
378
+ throw new TypeError('invalid-json');
379
+ }
380
+ }
381
+ function deadlineSignal() {
382
+ let aborted = false;
383
+ return {
384
+ signal: Object.freeze({
385
+ get aborted() {
386
+ return aborted;
387
+ },
388
+ }),
389
+ abort() {
390
+ aborted = true;
391
+ },
392
+ };
393
+ }
394
+ function failureResponse(result) {
395
+ switch (result.reason) {
396
+ case 'capability-missing':
397
+ case 'invalid-identity':
398
+ case 'unauthorized':
399
+ return errorResponse(404, 'not_found', 'Capability not found.');
400
+ case 'invalid-input':
401
+ return errorResponse(422, 'invalid_input', 'Request does not match the capability input schema.');
402
+ case 'binding-unavailable':
403
+ case 'binding-ambiguous':
404
+ case 'authorization-error':
405
+ return errorResponse(503, 'unavailable', 'Capability is not currently available.');
406
+ case 'deadline-exceeded':
407
+ return errorResponse(504, 'deadline_exceeded', 'Capability execution exceeded its deadline.');
408
+ case 'invalid-output':
409
+ case 'handler-failed':
410
+ return errorResponse(500, 'execution_failed', 'Capability execution failed.');
411
+ default:
412
+ return assertNever(result.reason);
413
+ }
414
+ }
415
+ export function createHttpHandler(registry, options = {}) {
416
+ const config = validateOptions(options);
417
+ const openApiPath = `${config.root}/openapi.json`;
418
+ const healthPath = `${config.root}/health`;
419
+ let routeMap = new Map();
420
+ for (const definition of visibleDefinitions(registry, config.root)) {
421
+ const path = httpInvocationPath(definition, config.root);
422
+ if (path === openApiPath || path === healthPath || routeMap.has(path)) {
423
+ throw new TypeError(`duplicate or reserved HTTP path ${path}`);
424
+ }
425
+ routeMap.set(path, {
426
+ definition,
427
+ ...(httpMethod(definition) === 'GET' ? { query: queryFields(definition) } : {}),
428
+ });
429
+ }
430
+ const resolveContext = options.resolveExecutionContext ??
431
+ (() => ({
432
+ caller: { kind: 'anonymous' },
433
+ authorization: {
434
+ authorize: (request) => request.risk === 'read' && request.access.kind === 'public',
435
+ },
436
+ }));
437
+ return async (request) => {
438
+ const url = new URL(request.url);
439
+ const pathname = url.pathname;
440
+ if (pathname === healthPath && request.method === 'GET') {
441
+ return jsonResponse({
442
+ observation: createDiagnosticObservation({
443
+ checkId: 'UAN-003.http-protocol',
444
+ status: 'passed',
445
+ }),
446
+ }, 200);
447
+ }
448
+ if (pathname === openApiPath && request.method === 'GET') {
449
+ try {
450
+ return jsonResponse(createOpenApiDocument(registry, { basePath: config.root }), 200);
451
+ }
452
+ catch {
453
+ return errorResponse(500, 'schema_unavailable', 'Public API schema could not be generated.');
454
+ }
455
+ }
456
+ const route = routeMap.get(pathname);
457
+ if (route === undefined) {
458
+ return jsonResponse({ error: { code: 'not_found', message: 'Capability not found.' } }, 404);
459
+ }
460
+ const definition = route.definition;
461
+ const method = httpMethod(definition);
462
+ if (request.method !== method) {
463
+ return new Response(null, { status: 405, headers: { allow: method } });
464
+ }
465
+ let input;
466
+ if (method === 'GET') {
467
+ if (new TextEncoder().encode(url.search).byteLength > config.maxRequestBytes) {
468
+ return errorResponse(413, 'request_too_large', 'Request query exceeds the configured limit.');
469
+ }
470
+ try {
471
+ input = queryInput(url, route.query ?? []);
472
+ }
473
+ catch {
474
+ return errorResponse(422, 'invalid_input', 'Request does not match the capability input schema.');
475
+ }
476
+ }
477
+ else {
478
+ try {
479
+ input = await readJsonBody(request, config.maxRequestBytes);
480
+ }
481
+ catch (error) {
482
+ if (error instanceof RangeError && error.message === 'too-large') {
483
+ return errorResponse(413, 'request_too_large', 'Request body exceeds the configured limit.');
484
+ }
485
+ if (error instanceof TypeError && error.message === 'unsupported-content-type') {
486
+ return errorResponse(415, 'unsupported_media_type', 'Request must use application/json.');
487
+ }
488
+ return errorResponse(400, 'invalid_json', 'Request body must contain valid UTF-8 JSON.');
489
+ }
490
+ }
491
+ let deadline = deadlineSignal();
492
+ let timer;
493
+ const timeout = new Promise((resolve) => {
494
+ timer = setTimeout(() => {
495
+ deadline.abort();
496
+ resolve({ kind: 'timeout' });
497
+ }, config.deadlineMs);
498
+ });
499
+ const operation = (async () => {
500
+ const context = await resolveContext(request);
501
+ if (deadline.signal.aborted)
502
+ return { kind: 'timeout' };
503
+ const result = await executeCapability(registry, {
504
+ identity: definition.identity,
505
+ runtime: 'server',
506
+ input,
507
+ caller: context.caller,
508
+ authorization: context.authorization,
509
+ signal: deadline.signal,
510
+ });
511
+ return { kind: 'complete', result };
512
+ })();
513
+ try {
514
+ const result = await Promise.race([operation, timeout]);
515
+ if (timer !== undefined)
516
+ clearTimeout(timer);
517
+ if (result.kind === 'timeout') {
518
+ return errorResponse(504, 'deadline_exceeded', 'Capability execution exceeded its deadline.');
519
+ }
520
+ if (result.result.kind === 'failure')
521
+ return failureResponse(result.result);
522
+ try {
523
+ return jsonResponse(result.result.value, 200);
524
+ }
525
+ catch {
526
+ return errorResponse(500, 'execution_failed', 'Capability execution failed.');
527
+ }
528
+ }
529
+ catch {
530
+ if (timer !== undefined)
531
+ clearTimeout(timer);
532
+ deadline.abort();
533
+ return errorResponse(503, 'unavailable', 'Capability is not currently available.');
534
+ }
535
+ };
536
+ }
537
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type { GrantAuthorizationOptions, GrantQuery, GrantStorePort, PersistedGrant, TrustedPrincipal, } from './auth.js';
2
+ export { createGrantAuthorization, executionCallerForPrincipal, hasGrantForScopes, } from './auth.js';
3
+ export type { CapabilityAlias, CapabilityAliasPolicy, CapabilityComposition, CapabilityContractChange, CapabilityContractChangeReport, CapabilityLifecycleEntry, CapabilityLifecyclePolicy, CapabilityMigration, CapabilityMigrationOptions, CapabilityPackMigrationOptions, CapabilityPackMigrationReport, CapabilityPack, CapabilityPackIdentity, CapabilityPackImport, CapabilityPackOptions, CapabilitySurfaceNames, CapabilitySemanticReview, } from './core/composition.js';
4
+ export { CapabilityCompositionError, CapabilityMigrationError, assertCompatibleCapabilityReplacement, capabilitySurfaceNames, compareCapabilityDefinitions, composeCapabilityPacks, createCapabilitySurfaceMap, defineCapabilityLifecyclePolicy, defineCapabilityMigration, defineCapabilityPack, validateCapabilityPackMigration, } from './core/composition.js';
5
+ export type { CapabilityAccessRule, CapabilityDefinition, CapabilityDefinitionOptions, CapabilityHttpSurface, CapabilityIdentity, CapabilityRisk, CapabilityCliSurface, CapabilitySurfaceOverrides, } from './core/contracts.js';
6
+ export { CapabilityDefinitionError, canonicalCapabilityId, defineCapability, isValidCapabilityIdentity, } from './core/contracts.js';
7
+ export type { DiagnosticObservation, DiagnosticObservationOptions, DiagnosticStatus, } from './core/diagnostics.js';
8
+ export { createDiagnosticObservation, DIAGNOSTIC_OBSERVATION_JSON_SCHEMA, } from './core/diagnostics.js';
9
+ export type { AuthorizationPort, AuthorizationRequest, ExecuteCapabilityRequest, ExecutionCaller, ExecutionCallerIdentity, ExecutionFailure, ExecutionFailureKind, ExecutionResult, ExecutionSuccess, } from './core/executor.js';
10
+ export { executeCapability } from './core/executor.js';
11
+ export type { BindingExecutionContext, CapabilityBinding, CapabilityBindingOptions, CapabilityRegistry, ExecutionSignal, RegistryErrorKind, RuntimeTarget, } from './core/registry.js';
12
+ export { bindCapability, CapabilityRegistryError, createCapabilityRegistry, } from './core/registry.js';
13
+ export type { SchemaPort } from './core/schema.js';
14
+ export type { CapabilityDiscoveryAuthorizer, CapabilitySurface, CapabilitySurfaceExposure, DiscoveryDecision, DiscoveryDenialReason, } from './discovery.js';
15
+ export { evaluateCapabilityDiscovery, isDestructiveCapabilityExposed } from './discovery.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,yBAAyB,EACzB,UAAU,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,EAC7B,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,qCAAqC,EACrC,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EACV,6BAA6B,EAC7B,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { createGrantAuthorization, executionCallerForPrincipal, hasGrantForScopes, } from './auth.js';
2
+ export { CapabilityCompositionError, CapabilityMigrationError, assertCompatibleCapabilityReplacement, capabilitySurfaceNames, compareCapabilityDefinitions, composeCapabilityPacks, createCapabilitySurfaceMap, defineCapabilityLifecyclePolicy, defineCapabilityMigration, defineCapabilityPack, validateCapabilityPackMigration, } from './core/composition.js';
3
+ export { CapabilityDefinitionError, canonicalCapabilityId, defineCapability, isValidCapabilityIdentity, } from './core/contracts.js';
4
+ export { createDiagnosticObservation, DIAGNOSTIC_OBSERVATION_JSON_SCHEMA, } from './core/diagnostics.js';
5
+ export { executeCapability } from './core/executor.js';
6
+ export { bindCapability, CapabilityRegistryError, createCapabilityRegistry, } from './core/registry.js';
7
+ export { evaluateCapabilityDiscovery, isDestructiveCapabilityExposed } from './discovery.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAoBnB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,qCAAqC,EACrC,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,uBAAuB,CAAC;AAY/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAUvD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAS5B,OAAO,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC"}