@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/cli.js ADDED
@@ -0,0 +1,484 @@
1
+ import { canonicalCapabilityId, } from './core/contracts.js';
2
+ import { executeCapability } from './core/executor.js';
3
+ import { cloneJsonValue } from './core/schema.js';
4
+ import { httpInvocationPath, httpQueryParameters } from './http.js';
5
+ import { PACKAGE_VERSION } from './package-version.js';
6
+ import { evaluateCapabilityDiscovery, isDestructiveCapabilityExposed, } from './discovery.js';
7
+ export const CLI_RESULT_SCHEMA_VERSION = 'uan.cli-result/v1';
8
+ export const CLI_RESULT_JSON_SCHEMA = {
9
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
10
+ type: 'object',
11
+ properties: {
12
+ schemaVersion: { const: CLI_RESULT_SCHEMA_VERSION },
13
+ target: {
14
+ type: 'object',
15
+ properties: {
16
+ mode: { enum: ['local', 'remote'] },
17
+ capabilityId: { type: 'string' },
18
+ profile: { type: 'string' },
19
+ },
20
+ additionalProperties: false,
21
+ },
22
+ result: {
23
+ oneOf: [
24
+ {
25
+ type: 'object',
26
+ properties: {
27
+ kind: { const: 'success' },
28
+ capabilityId: { type: 'string' },
29
+ value: {},
30
+ },
31
+ required: ['kind', 'capabilityId', 'value'],
32
+ additionalProperties: false,
33
+ },
34
+ {
35
+ type: 'object',
36
+ properties: {
37
+ kind: { const: 'failure' },
38
+ reason: { type: 'string' },
39
+ },
40
+ required: ['kind', 'reason'],
41
+ additionalProperties: false,
42
+ },
43
+ ],
44
+ },
45
+ },
46
+ required: ['schemaVersion', 'target', 'result'],
47
+ additionalProperties: false,
48
+ };
49
+ function parseArguments(argv) {
50
+ let identity;
51
+ let mode;
52
+ let profile;
53
+ let bindingId;
54
+ let timeoutMs = 10_000;
55
+ let help = false;
56
+ let version = false;
57
+ let inputJson;
58
+ let flags = new Map();
59
+ for (let index = 0; index < argv.length; index += 1) {
60
+ const argument = argv[index];
61
+ if (argument === undefined)
62
+ continue;
63
+ if (argument === '--help' || argument === '-h') {
64
+ help = true;
65
+ continue;
66
+ }
67
+ if (argument === '--version') {
68
+ version = true;
69
+ continue;
70
+ }
71
+ if (!argument.startsWith('--')) {
72
+ if (identity !== undefined)
73
+ throw new TypeError('only one capability identity is allowed');
74
+ identity = argument;
75
+ continue;
76
+ }
77
+ const key = argument.slice(2);
78
+ const value = argv[index + 1];
79
+ if (value === undefined || value.startsWith('--')) {
80
+ throw new TypeError(`flag --${key} requires a value`);
81
+ }
82
+ index += 1;
83
+ switch (key) {
84
+ case 'mode':
85
+ if (value !== 'local' && value !== 'remote') {
86
+ throw new TypeError('--mode must be local or remote');
87
+ }
88
+ mode = value;
89
+ break;
90
+ case 'profile':
91
+ if (!/^[a-z][a-z0-9-]{0,31}$/.test(value)) {
92
+ throw new TypeError('--profile must be a lowercase profile slug');
93
+ }
94
+ profile = value;
95
+ break;
96
+ case 'binding-id':
97
+ bindingId = value;
98
+ break;
99
+ case 'timeout-ms': {
100
+ const parsed = Number(value);
101
+ if (!Number.isSafeInteger(parsed) || parsed < 1 || parsed > 300_000) {
102
+ throw new TypeError('--timeout-ms must be an integer from 1 to 300000');
103
+ }
104
+ timeoutMs = parsed;
105
+ break;
106
+ }
107
+ case 'input-json':
108
+ inputJson = value;
109
+ break;
110
+ default:
111
+ if (!/^[a-z][a-z0-9-]*$/.test(key)) {
112
+ throw new TypeError(`invalid flag name: --${key}`);
113
+ }
114
+ if (flags.has(key))
115
+ throw new TypeError(`duplicate flag: --${key}`);
116
+ flags.set(key, value);
117
+ }
118
+ }
119
+ if (inputJson !== undefined && flags.size > 0) {
120
+ throw new TypeError('--input-json cannot be combined with field flags');
121
+ }
122
+ if (mode === 'local' && profile !== undefined) {
123
+ throw new TypeError('--profile is only valid with --mode remote');
124
+ }
125
+ if (mode === 'remote' && bindingId !== undefined) {
126
+ throw new TypeError('--binding-id is only valid with --mode local');
127
+ }
128
+ return { identity, mode, profile, bindingId, timeoutMs, help, version, inputJson, flags };
129
+ }
130
+ function cliNames(definition) {
131
+ const override = definition.surfaces?.cli;
132
+ return override === undefined
133
+ ? [canonicalCapabilityId(definition.identity)]
134
+ : [override.command, ...(override.aliases ?? []), canonicalCapabilityId(definition.identity)];
135
+ }
136
+ function cliDefinitionMap(registry) {
137
+ let result = new Map();
138
+ for (const definition of registry.definitions) {
139
+ for (const name of cliNames(definition)) {
140
+ const previous = result.get(name);
141
+ if (previous !== undefined) {
142
+ throw new TypeError(`duplicate CLI command or alias ${name} for ${canonicalCapabilityId(previous.identity)} and ${canonicalCapabilityId(definition.identity)}`);
143
+ }
144
+ result.set(name, definition);
145
+ }
146
+ }
147
+ return result;
148
+ }
149
+ function fieldProperties(definition) {
150
+ const schema = definition.input.toJSONSchema();
151
+ const properties = schema['properties'];
152
+ return typeof properties === 'object' && properties !== null && !Array.isArray(properties)
153
+ ? properties
154
+ : {};
155
+ }
156
+ function parseTypedFlag(value, schemaValue, key) {
157
+ if (typeof schemaValue !== 'object' || schemaValue === null || Array.isArray(schemaValue)) {
158
+ throw new TypeError(`--${key} requires --input-json because its schema is complex`);
159
+ }
160
+ const schema = schemaValue;
161
+ const enumValues = schema['enum'];
162
+ if (Array.isArray(enumValues)) {
163
+ const matched = enumValues.find((candidate) => String(candidate) === value);
164
+ if (matched === undefined)
165
+ throw new TypeError(`--${key} must match one of its declared values`);
166
+ return matched;
167
+ }
168
+ switch (schema['type']) {
169
+ case 'string':
170
+ return value;
171
+ case 'number':
172
+ case 'integer': {
173
+ const number = Number(value);
174
+ if (!Number.isFinite(number) || (schema['type'] === 'integer' && !Number.isInteger(number))) {
175
+ throw new TypeError(`--${key} must be a valid ${schema['type']}`);
176
+ }
177
+ return number;
178
+ }
179
+ case 'boolean':
180
+ if (value !== 'true' && value !== 'false') {
181
+ throw new TypeError(`--${key} must be true or false`);
182
+ }
183
+ return value === 'true';
184
+ default:
185
+ throw new TypeError(`--${key} requires --input-json because its schema is complex`);
186
+ }
187
+ }
188
+ async function createInput(definition, parsed, streams) {
189
+ if (parsed.inputJson !== undefined) {
190
+ try {
191
+ const serialized = parsed.inputJson === '-' ? await streams.readStdin?.() : parsed.inputJson;
192
+ if (serialized === undefined)
193
+ throw new TypeError('stdin is not available');
194
+ return JSON.parse(serialized);
195
+ }
196
+ catch {
197
+ throw new TypeError('--input-json must contain valid JSON');
198
+ }
199
+ }
200
+ const properties = fieldProperties(definition);
201
+ let input = {};
202
+ for (const [flag, value] of parsed.flags) {
203
+ const key = flag.replaceAll('-', '');
204
+ const propertyName = Object.keys(properties).find((candidate) => candidate.replaceAll('-', '').toLowerCase() === key.toLowerCase());
205
+ if (propertyName === undefined)
206
+ throw new TypeError(`unknown field flag: --${flag}`);
207
+ input[propertyName] = parseTypedFlag(value, properties[propertyName], flag);
208
+ }
209
+ return input;
210
+ }
211
+ function hasCliBinding(registry, definition, mode, bindingId) {
212
+ const id = canonicalCapabilityId(definition.identity);
213
+ const local = registry.bindings.filter((binding) => binding.capabilityId === id &&
214
+ binding.targets.includes('local') &&
215
+ (bindingId === undefined || binding.id === bindingId));
216
+ const server = registry.bindings.filter((binding) => binding.capabilityId === id && binding.targets.includes('server'));
217
+ const publicRead = definition.risk === 'read' && definition.access.kind === 'public';
218
+ if (mode === 'local' || bindingId !== undefined)
219
+ return local.length === 1;
220
+ if (mode === 'remote')
221
+ return publicRead && server.length === 1;
222
+ return local.length === 1 || (publicRead && server.length === 1);
223
+ }
224
+ function helpText(registry, packageVersion, selected, visibleDefinitions = registry.definitions) {
225
+ let lines = [
226
+ `@uppercut-labs/agent-native ${packageVersion} | CLI result ${CLI_RESULT_SCHEMA_VERSION}`,
227
+ 'Usage: <application-cli> <command> --mode local|remote [options]',
228
+ 'Local executes an exact registered local binding; remote invokes the generated HTTP route.',
229
+ 'Options: --input-json JSON, --<field> VALUE, --binding-id ID, --profile NAME, --timeout-ms MS',
230
+ 'Simple string, number, integer, boolean and enum fields use typed flags; object/array fields use --input-json.',
231
+ 'Remote mode requires an explicit credential profile.',
232
+ '',
233
+ 'Capabilities:',
234
+ ];
235
+ for (const definition of selected === undefined ? visibleDefinitions : [selected]) {
236
+ const [command, ...aliases] = cliNames(definition);
237
+ lines.push(` ${command}${aliases.length === 0 ? '' : ` (aliases: ${aliases.join(', ')})`} ${definition.description}`);
238
+ for (const [key, schemaValue] of Object.entries(fieldProperties(definition))) {
239
+ const schema = typeof schemaValue === 'object' && schemaValue !== null && !Array.isArray(schemaValue)
240
+ ? schemaValue
241
+ : {};
242
+ const type = Array.isArray(schema['enum'])
243
+ ? `enum(${schema['enum'].map(String).join('|')})`
244
+ : String(schema['type'] ?? 'json');
245
+ lines.push(` --${key} <${type}>`);
246
+ }
247
+ }
248
+ return lines.join('\n') + '\n';
249
+ }
250
+ function normalizeLocal(result) {
251
+ if (result.kind === 'failure') {
252
+ return { kind: 'failure', reason: result.reason };
253
+ }
254
+ return { kind: 'success', capabilityId: result.capabilityId, value: result.value };
255
+ }
256
+ function remoteFailure(status) {
257
+ if (status === 400)
258
+ return { kind: 'failure', reason: 'invalid-json' };
259
+ if (status === 404)
260
+ return { kind: 'failure', reason: 'capability-missing' };
261
+ if (status === 413)
262
+ return { kind: 'failure', reason: 'request-too-large' };
263
+ if (status === 415)
264
+ return { kind: 'failure', reason: 'unsupported-content-type' };
265
+ if (status === 422)
266
+ return { kind: 'failure', reason: 'invalid-input' };
267
+ if (status === 503)
268
+ return { kind: 'failure', reason: 'binding-unavailable' };
269
+ if (status === 504)
270
+ return { kind: 'failure', reason: 'deadline-exceeded' };
271
+ return { kind: 'failure', reason: 'remote-execution-failed' };
272
+ }
273
+ async function invokeRemote(definition, input, profile, timeoutMs, fetcher) {
274
+ const method = definition.surfaces?.http?.method ?? 'POST';
275
+ let query;
276
+ let body;
277
+ try {
278
+ const parsedInput = definition.input.parse(input);
279
+ if (method === 'GET') {
280
+ query = httpQueryParameters(definition, parsedInput);
281
+ }
282
+ else {
283
+ body = JSON.stringify(cloneJsonValue(parsedInput, 'remote request input'));
284
+ }
285
+ }
286
+ catch {
287
+ return { kind: 'failure', reason: 'invalid-input' };
288
+ }
289
+ let url;
290
+ try {
291
+ const baseUrl = new URL(profile.baseUrl);
292
+ const localHost = ['localhost', '127.0.0.1', '[::1]'].includes(baseUrl.hostname);
293
+ if (baseUrl.username !== '' ||
294
+ baseUrl.password !== '' ||
295
+ (baseUrl.protocol !== 'https:' && !(baseUrl.protocol === 'http:' && localHost))) {
296
+ return { kind: 'failure', reason: 'insecure-profile-url' };
297
+ }
298
+ url = new URL(httpInvocationPath(definition), baseUrl);
299
+ if (query !== undefined)
300
+ url.search = query.toString();
301
+ }
302
+ catch {
303
+ return { kind: 'failure', reason: 'invalid-profile-url' };
304
+ }
305
+ let controller = new AbortController();
306
+ let timer;
307
+ const request = async () => {
308
+ const response = await fetcher(url, {
309
+ method,
310
+ headers: {
311
+ accept: 'application/json',
312
+ authorization: `Bearer ${profile.token}`,
313
+ ...(body === undefined ? {} : { 'content-type': 'application/json' }),
314
+ },
315
+ ...(body === undefined ? {} : { body }),
316
+ signal: controller.signal,
317
+ });
318
+ if (!response.ok)
319
+ return remoteFailure(response.status);
320
+ const value = await response.json();
321
+ let validatedValue;
322
+ try {
323
+ validatedValue = definition.output.parse(value);
324
+ }
325
+ catch {
326
+ return { kind: 'failure', reason: 'invalid-output' };
327
+ }
328
+ return {
329
+ kind: 'success',
330
+ capabilityId: canonicalCapabilityId(definition.identity),
331
+ value: validatedValue,
332
+ };
333
+ };
334
+ const timeout = new Promise((resolve) => {
335
+ timer = setTimeout(() => {
336
+ controller.abort();
337
+ resolve({ kind: 'failure', reason: 'deadline-exceeded' });
338
+ }, timeoutMs);
339
+ });
340
+ try {
341
+ return await Promise.race([request(), timeout]);
342
+ }
343
+ catch {
344
+ if (controller.signal.aborted)
345
+ return { kind: 'failure', reason: 'deadline-exceeded' };
346
+ return { kind: 'failure', reason: 'remote-unavailable' };
347
+ }
348
+ finally {
349
+ if (timer !== undefined)
350
+ clearTimeout(timer);
351
+ }
352
+ }
353
+ function writeFailure(streams, reason, mode) {
354
+ streams.writeStderr('error=' + reason + '\n');
355
+ streams.writeStdout(JSON.stringify({
356
+ schemaVersion: CLI_RESULT_SCHEMA_VERSION,
357
+ target: mode === undefined ? {} : { mode },
358
+ result: { kind: 'failure', reason },
359
+ }) + '\n');
360
+ return reason === 'unauthorized' ? 3 : reason === 'invalid-input' ? 2 : 1;
361
+ }
362
+ export async function runCapabilityCli(argv, options, streams) {
363
+ const packageVersion = options.packageVersion ?? PACKAGE_VERSION;
364
+ let definitionsByCommand;
365
+ try {
366
+ definitionsByCommand = cliDefinitionMap(options.registry);
367
+ }
368
+ catch {
369
+ return writeFailure(streams, 'invalid-cli-surfaces');
370
+ }
371
+ let parsed;
372
+ try {
373
+ parsed = parseArguments(argv);
374
+ }
375
+ catch (error) {
376
+ return writeFailure(streams, error instanceof Error ? error.message : 'invalid-arguments');
377
+ }
378
+ if (parsed.version) {
379
+ streams.writeStdout(`@uppercut-labs/agent-native ${packageVersion}\n`);
380
+ return 0;
381
+ }
382
+ if (parsed.help) {
383
+ const selected = parsed.identity === undefined ? undefined : definitionsByCommand.get(parsed.identity);
384
+ if (parsed.identity !== undefined && selected === undefined) {
385
+ streams.writeStdout('Capability is unavailable or not visible.\n');
386
+ return 0;
387
+ }
388
+ const candidates = selected === undefined ? options.registry.definitions : [selected];
389
+ let visible = [];
390
+ for (const definition of candidates) {
391
+ if (!hasCliBinding(options.registry, definition, parsed.mode, parsed.bindingId))
392
+ continue;
393
+ const decision = await evaluateCapabilityDiscovery(definition, 'cli', options.surfaceExposure, options.canDiscover);
394
+ if (decision.visible)
395
+ visible.push(definition);
396
+ }
397
+ if (parsed.identity !== undefined && visible.length === 0) {
398
+ streams.writeStdout('Capability is unavailable or not visible.\n');
399
+ return 0;
400
+ }
401
+ streams.writeStdout(helpText(options.registry, packageVersion, parsed.identity === undefined ? undefined : visible[0], visible));
402
+ return 0;
403
+ }
404
+ if (parsed.identity === undefined)
405
+ return writeFailure(streams, 'capability-identity-required');
406
+ if (parsed.mode === undefined)
407
+ return writeFailure(streams, 'execution-mode-required');
408
+ const definition = definitionsByCommand.get(parsed.identity);
409
+ if (definition === undefined &&
410
+ !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(parsed.identity) &&
411
+ !/^[a-z0-9]+(?:[.-][a-z0-9]+)*:[a-z0-9]+(?:[.-][a-z0-9]+)*@[1-9][0-9]*$/.test(parsed.identity)) {
412
+ return writeFailure(streams, 'invalid-capability-identity', parsed.mode);
413
+ }
414
+ if (definition === undefined)
415
+ return writeFailure(streams, 'capability-missing');
416
+ if (!hasCliBinding(options.registry, definition, parsed.mode, parsed.bindingId)) {
417
+ return writeFailure(streams, 'capability-unavailable', parsed.mode);
418
+ }
419
+ if (!isDestructiveCapabilityExposed(definition, 'cli', options.surfaceExposure)) {
420
+ return writeFailure(streams, 'capability-unavailable', parsed.mode);
421
+ }
422
+ let input;
423
+ try {
424
+ input = await createInput(definition, parsed, streams);
425
+ }
426
+ catch (error) {
427
+ return writeFailure(streams, error instanceof Error ? error.message : 'invalid-input');
428
+ }
429
+ streams.writeStderr(`target=${parsed.mode} capability=${canonicalCapabilityId(definition.identity)}${parsed.profile === undefined ? '' : ` profile=${parsed.profile}`}\n`);
430
+ let result;
431
+ if (parsed.mode === 'local') {
432
+ result = normalizeLocal(await executeCapability(options.registry, {
433
+ identity: definition.identity,
434
+ runtime: 'local',
435
+ input,
436
+ caller: options.caller,
437
+ authorization: options.authorization,
438
+ ...(parsed.bindingId === undefined ? {} : { bindingId: parsed.bindingId }),
439
+ }));
440
+ }
441
+ else {
442
+ if (parsed.profile === undefined)
443
+ return writeFailure(streams, 'credential-profile-required', parsed.mode);
444
+ const profiles = options.credentialProfiles;
445
+ const profile = profiles !== undefined && Object.hasOwn(profiles, parsed.profile)
446
+ ? profiles[parsed.profile]
447
+ : undefined;
448
+ if (profile === undefined ||
449
+ typeof profile.token !== 'string' ||
450
+ profile.token.trim().length === 0) {
451
+ return writeFailure(streams, 'credential-profile-unavailable', parsed.mode);
452
+ }
453
+ result = await invokeRemote(definition, input, profile, parsed.timeoutMs, options.fetcher ?? fetch);
454
+ }
455
+ if (result.kind === 'failure')
456
+ streams.writeStderr('execution=' + result.reason + '\n');
457
+ const envelope = result.kind === 'success'
458
+ ? {
459
+ schemaVersion: CLI_RESULT_SCHEMA_VERSION,
460
+ target: {
461
+ mode: parsed.mode,
462
+ capabilityId: result.capabilityId,
463
+ ...(parsed.profile === undefined ? {} : { profile: parsed.profile }),
464
+ },
465
+ result,
466
+ }
467
+ : { schemaVersion: CLI_RESULT_SCHEMA_VERSION, target: { mode: parsed.mode }, result };
468
+ let serializedEnvelope;
469
+ try {
470
+ serializedEnvelope = JSON.stringify(cloneJsonValue(envelope, 'CLI result'));
471
+ }
472
+ catch {
473
+ return writeFailure(streams, 'result-serialization-failed', parsed.mode);
474
+ }
475
+ if (serializedEnvelope === undefined) {
476
+ return writeFailure(streams, 'result-serialization-failed', parsed.mode);
477
+ }
478
+ streams.writeStdout(serializedEnvelope + '\n');
479
+ if (result.kind === 'failure') {
480
+ return result.reason === 'unauthorized' ? 3 : result.reason === 'invalid-input' ? 2 : 1;
481
+ }
482
+ return 0;
483
+ }
484
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,2BAA2B,EAE3B,8BAA8B,GAE/B,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,MAAM,yBAAyB,GAAwB,mBAAmB,CAAC;AAElF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,8CAA8C;IACvD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,aAAa,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE;QACnD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;gBACnC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAChC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC5B;YACD,oBAAoB,EAAE,KAAK;SAC5B;QACD,MAAM,EAAE;YACN,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;wBAC1B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAChC,KAAK,EAAE,EAAE;qBACV;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC;oBAC3C,oBAAoB,EAAE,KAAK;iBAC5B;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;wBAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC3B;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;oBAC5B,oBAAoB,EAAE,KAAK;iBAC5B;aACF;SACF;KACF;IACD,QAAQ,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC/C,oBAAoB,EAAE,KAAK;CACnB,CAAC;AAkEX,SAAS,cAAc,CAAC,IAAuB;IAC7C,IAAI,QAA4B,CAAC;IACjC,IAAI,IAAoC,CAAC;IACzC,IAAI,OAA2B,CAAC;IAChC,IAAI,SAA6B,CAAC;IAClC,IAAI,SAAS,GAAW,MAAM,CAAC;IAC/B,IAAI,IAAI,GAAY,KAAK,CAAC;IAC1B,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,IAAI,SAA6B,CAAC;IAClC,IAAI,KAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE3C,KAAK,IAAI,KAAK,GAAW,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAuB,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;YAC3F,QAAQ,GAAG,QAAQ,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAW,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAuB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,SAAS,CAAC,UAAU,GAAG,mBAAmB,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,MAAM;gBACT,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5C,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;gBACxD,CAAC;gBACD,IAAI,GAAG,KAAK,CAAC;gBACb,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1C,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;gBACpE,CAAC;gBACD,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM;YACR,KAAK,YAAY;gBACf,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACR,KAAK,YAAY,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;oBACpE,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;gBAC1E,CAAC;gBACD,SAAS,GAAG,MAAM,CAAC;gBACnB,MAAM;YACR,CAAC;YACD,KAAK,YAAY;gBACf,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACR;gBACE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,IAAI,SAAS,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBACpE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,QAAQ,CAAC,UAAkD;IAClE,MAAM,QAAQ,GAAqC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;IAC5E,OAAO,QAAQ,KAAK,SAAS;QAC3B,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,gBAAgB,CACvB,QAA4B;IAE5B,IAAI,MAAM,GAAwD,IAAI,GAAG,EAAE,CAAC;IAC5E,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAuD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,SAAS,CACjB,kCAAkC,IAAI,QAAQ,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAC3I,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,UAAkD;IAElD,MAAM,MAAM,GAAsC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;IAClF,MAAM,UAAU,GAAY,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QACxF,CAAC,CAAE,UAAsC;QACzC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,WAAoB,EAAE,GAAW;IACtE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1F,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,sDAAsD,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,MAAM,GAAsC,WAAsC,CAAC;IACzF,MAAM,UAAU,GAAY,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAY,UAAU,CAAC,IAAI,CACtC,CAAC,SAAkB,EAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,KAAK,CAC7D,CAAC;QACF,IAAI,OAAO,KAAK,SAAS;YACvB,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,wCAAwC,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,QAAQ,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,EAAE,CAAC;YACf,MAAM,MAAM,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC5F,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,oBAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,SAAS;YACZ,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC1C,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,wBAAwB,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,KAAK,KAAK,MAAM,CAAC;QAC1B;YACE,MAAM,IAAI,SAAS,CAAC,KAAK,GAAG,sDAAsD,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,UAAkD,EAClD,MAAuB,EACvB,OAAmB;IAEnB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,UAAU,GACd,MAAM,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;YAC5E,IAAI,UAAU,KAAK,SAAS;gBAAE,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAsC,eAAe,CAAC,UAAU,CAAC,CAAC;IAClF,IAAI,KAAK,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,GAAG,GAAW,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAuB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACnE,CAAC,SAAiB,EAAW,EAAE,CAC7B,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CACpE,CAAC;QACF,IAAI,YAAY,KAAK,SAAS;YAAE,MAAM,IAAI,SAAS,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QACrF,KAAK,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CACpB,QAA4B,EAC5B,UAAkD,EAClD,IAAyB,EACzB,SAAkB;IAElB,MAAM,EAAE,GAAW,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAiC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAClE,CAAC,OAA0B,EAAW,EAAE,CACtC,OAAO,CAAC,YAAY,KAAK,EAAE;QAC3B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QACjC,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,CACxD,CAAC;IACF,MAAM,MAAM,GAAiC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACnE,CAAC,OAA0B,EAAW,EAAE,CACtC,OAAO,CAAC,YAAY,KAAK,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACpE,CAAC;IACF,MAAM,UAAU,GAAY,UAAU,CAAC,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;IAE9F,IAAI,IAAI,KAAK,OAAO,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAC3E,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,QAAQ,CACf,QAA4B,EAC5B,cAAsB,EACtB,QAAiD,EACjD,kBAAkB,GAAsD,QAAQ,CAAC,WAAW;IAE5F,IAAI,KAAK,GAAa;QACpB,+BAA+B,cAAc,iBAAiB,yBAAyB,EAAE;QACzF,kEAAkE;QAClE,4FAA4F;QAC5F,+FAA+F;QAC/F,gHAAgH;QAChH,sDAAsD;QACtD,EAAE;QACF,eAAe;KAChB,CAAC;IACF,KAAK,MAAM,UAAU,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAsB,QAAQ,CAAC,UAAU,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CACR,KAAK,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,WAAW,EAAE,CAC5G,CAAC;QACF,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,MAAM,GACV,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBACpF,CAAC,CAAE,WAAuC;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,GAAW,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAChD,CAAC,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBACjD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB;IAC7C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACrF,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACvE,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC7E,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC5E,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACnF,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACxE,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC9E,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC5E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,UAAkD,EAClD,KAAc,EACd,OAA6B,EAC7B,SAAiB,EACjB,OAAqB;IAErB,MAAM,MAAM,GAAmB,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC;IAC3E,IAAI,KAAkC,CAAC;IACvC,IAAI,IAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,WAAW,GAAY,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,KAAK,GAAG,mBAAmB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,MAAM,OAAO,GAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAY,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1F,IACE,OAAO,CAAC,QAAQ,KAAK,EAAE;YACvB,OAAO,CAAC,QAAQ,KAAK,EAAE;YACvB,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,CAAC,EAC/E,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QAC7D,CAAC;QACD,GAAG,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,UAAU,GAAoB,IAAI,eAAe,EAAE,CAAC;IACxD,IAAI,KAAgD,CAAC;IACrD,MAAM,OAAO,GAA6B,KAAK,IAAwB,EAAE;QACvE,MAAM,QAAQ,GAAa,MAAM,OAAO,CAAC,GAAG,EAAE;YAC5C,MAAM;YACN,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;gBACxC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;aACtE;YACD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACvC,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,KAAK,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,cAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACvD,CAAC;QACD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC;YACxD,KAAK,EAAE,cAAc;SACtB,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,OAAO,GAAuB,IAAI,OAAO,CAC7C,CAAC,OAAmC,EAAQ,EAAE;QAC5C,KAAK,GAAG,UAAU,CAAC,GAAS,EAAE;YAC5B,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CACF,CAAC;IACF,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;QACvF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,KAAK,SAAS;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAmB,EAAE,MAAc,EAAE,IAAyB;IAClF,OAAO,CAAC,WAAW,CAAC,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,WAAW,CACjB,IAAI,CAAC,SAAS,CAAC;QACb,aAAa,EAAE,yBAAyB;QACxC,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;KACpC,CAAC,GAAG,IAAI,CACV,CAAC;IACF,OAAO,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAuB,EACvB,OAA6B,EAC7B,OAAmB;IAEnB,MAAM,cAAc,GAAW,OAAO,CAAC,cAAc,IAAI,eAAe,CAAC;IACzE,IAAI,oBAAiF,CAAC;IACtF,IAAI,CAAC;QACH,oBAAoB,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,WAAW,CAAC,+BAA+B,cAAc,IAAI,CAAC,CAAC;QACvE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAC;YACnE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,UAAU,GACd,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,OAAO,GAA6C,EAAE,CAAC;QAC3D,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;gBAAE,SAAS;YAC1F,MAAM,QAAQ,GAAsB,MAAM,2BAA2B,CACnE,UAAU,EACV,KAAK,EACL,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,WAAW,CACpB,CAAC;YACF,IAAI,QAAQ,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAC;YACnE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,WAAW,CACjB,QAAQ,CACN,OAAO,CAAC,QAAQ,EAChB,cAAc,EACd,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACtD,OAAO,CACR,CACF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IAChG,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IACvF,MAAM,UAAU,GAAuD,oBAAoB,CAAC,GAAG,CAC7F,MAAM,CAAC,QAAQ,CAChB,CAAC;IACF,IACE,UAAU,KAAK,SAAS;QACxB,CAAC,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACnD,CAAC,uEAAuE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC9F,CAAC;QACD,OAAO,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACjF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAChF,OAAO,YAAY,CAAC,OAAO,EAAE,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAChF,OAAO,YAAY,CAAC,OAAO,EAAE,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,CAAC,WAAW,CACjB,UAAU,MAAM,CAAC,IAAI,eAAe,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,IAAI,CACtJ,CAAC;IAEF,IAAI,MAAiB,CAAC;IACtB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,cAAc,CACrB,MAAM,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE;YACxC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,OAAO,EAAE,OAAO;YAChB,KAAK;YACL,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;SAC3E,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAC9B,OAAO,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,QAAQ,GACZ,OAAO,CAAC,kBAAkB,CAAC;QAC7B,MAAM,OAAO,GACX,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;YAC/D,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;YAC1B,CAAC,CAAC,SAAS,CAAC;QAChB,IACE,OAAO,KAAK,SAAS;YACrB,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;YACjC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACjC,CAAC;YACD,OAAO,YAAY,CAAC,OAAO,EAAE,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,GAAG,MAAM,YAAY,CACzB,UAAU,EACV,KAAK,EACL,OAAO,EACP,MAAM,CAAC,SAAS,EAChB,OAAO,CAAC,OAAO,IAAI,KAAK,CACzB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAExF,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC;YACE,aAAa,EAAE,yBAAyB;YACxC,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;aACrE;YACD,MAAM;SACP;QACH,CAAC,CAAC,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;IAC1F,IAAI,kBAAsC,CAAC;IAC3C,IAAI,CAAC;QACH,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function assertNever(_value: never): never;
2
+ //# sourceMappingURL=assert-never.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-never.d.ts","sourceRoot":"","sources":["../../src/core/assert-never.ts"],"names":[],"mappings":"AACA,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAEhD"}
@@ -0,0 +1,5 @@
1
+ // Internal exhaustiveness helper. Not exported from any package entry point.
2
+ export function assertNever(_value) {
3
+ throw new Error('Unexpected union variant');
4
+ }
5
+ //# sourceMappingURL=assert-never.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-never.js","sourceRoot":"","sources":["../../src/core/assert-never.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,MAAa;IACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { CapabilityDefinition } from './contracts.js';
2
+ import type { BindingExecutionContext, CapabilityBinding } from './registry.js';
3
+ export type BindingRecord = {
4
+ readonly definition: CapabilityDefinition<unknown, unknown>;
5
+ readonly handler: (input: unknown, context: BindingExecutionContext) => Promise<unknown>;
6
+ };
7
+ export declare function setBindingRecord(binding: CapabilityBinding, record: BindingRecord): void;
8
+ export declare function getBindingRecord(binding: CapabilityBinding): BindingRecord | undefined;
9
+ export declare function invokeBindingHandler(binding: CapabilityBinding, input: unknown, context: BindingExecutionContext): Promise<unknown>;
10
+ //# sourceMappingURL=binding-internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-internal.d.ts","sourceRoot":"","sources":["../../src/core/binding-internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1F,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAExF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,GAAG,SAAS,CAEtF;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAMlB"}
@@ -0,0 +1,15 @@
1
+ let bindingRecords = new WeakMap();
2
+ export function setBindingRecord(binding, record) {
3
+ bindingRecords.set(binding, record);
4
+ }
5
+ export function getBindingRecord(binding) {
6
+ return bindingRecords.get(binding);
7
+ }
8
+ export async function invokeBindingHandler(binding, input, context) {
9
+ const record = bindingRecords.get(binding);
10
+ if (record === undefined) {
11
+ throw new TypeError('binding was not created by bindCapability');
12
+ }
13
+ return await record.handler(input, context);
14
+ }
15
+ //# sourceMappingURL=binding-internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-internal.js","sourceRoot":"","sources":["../../src/core/binding-internal.ts"],"names":[],"mappings":"AAQA,IAAI,cAAc,GAA8C,IAAI,OAAO,EAAE,CAAC;AAE9E,MAAM,UAAU,gBAAgB,CAAC,OAA0B,EAAE,MAAqB;IAChF,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA0B,EAC1B,KAAc,EACd,OAAgC;IAEhC,MAAM,MAAM,GAA8B,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"}