apps 0.0.1-beta.28 → 0.0.1-beta.30

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 (38) hide show
  1. package/framework-reference.json +1 -1
  2. package/js/{chunk-SDLIDQXG.js → chunk-2D2PKLGQ.js} +117 -196
  3. package/js/{chunk-MWCLJQRI.js → chunk-3SPRHIEE.js} +2 -2
  4. package/js/{chunk-TSLG2WPA.js → chunk-4N26L465.js} +1 -1
  5. package/js/chunk-5ZHHO4OM.js +92 -0
  6. package/js/{chunk-GLIAMV2R.js → chunk-6NK26ONC.js} +7 -7
  7. package/js/{chunk-GQ7GCZ4J.js → chunk-6VWYEQ4X.js} +1 -1
  8. package/js/{chunk-VIQQ52V7.js → chunk-AE4FWJQU.js} +3 -3
  9. package/js/{chunk-V2I3MMPM.js → chunk-BBTELEAN.js} +1 -1
  10. package/js/{chunk-TE2HPDZG.js → chunk-BSRU52RU.js} +1 -1
  11. package/js/{chunk-L76NWXM5.js → chunk-IMCEF6KE.js} +6 -6
  12. package/js/{chunk-NSBRV4FJ.js → chunk-MYCVMDWI.js} +44 -6
  13. package/js/{chunk-VF3X26ZO.js → chunk-OI5CKSBU.js} +2 -2
  14. package/js/{chunk-PTUZSCEV.js → chunk-P46HIAX6.js} +1 -1
  15. package/js/{chunk-JN3PEGMW.js → chunk-PUC24GZP.js} +32 -7
  16. package/js/{chunk-YXKXKGN6.js → chunk-WGBI5MVX.js} +2 -2
  17. package/js/client.js +9 -7
  18. package/js/contracts.js +4 -2
  19. package/js/effect.js +11 -10
  20. package/js/graphql.js +15 -14
  21. package/js/host.js +11 -10
  22. package/js/index.js +6 -4
  23. package/js/mcp/effect.js +13 -12
  24. package/js/mcp/stdio.js +13 -12
  25. package/js/mcp.js +14 -13
  26. package/js/openapi.js +184 -151
  27. package/js/skills/effect.js +4 -2
  28. package/js/skills.js +8 -7
  29. package/js/ui/auth.js +3 -3
  30. package/js/ui/contracts.js +3 -2
  31. package/js/ui/serving.js +7 -6
  32. package/package.json +1 -1
  33. package/runtime.json +1 -1
  34. package/types/apps/src/contracts/openapi.d.ts +22 -1
  35. package/types/apps/src/contracts/skills.d.ts +18 -5
  36. package/types/apps/src/implementation/openapi-compile.d.ts +7 -0
  37. package/types/utils/src/api-error.d.ts +48 -0
  38. package/js/{chunk-B5YJQU45.js → chunk-XGN5IFOZ.js} +2 -2
package/js/openapi.js CHANGED
@@ -8,12 +8,13 @@ import {
8
8
  import {
9
9
  protocolOperations,
10
10
  protocolRouter
11
- } from "./chunk-MWCLJQRI.js";
11
+ } from "./chunk-3SPRHIEE.js";
12
12
  import {
13
13
  OpenapiCompileError,
14
14
  OpenapiCompileErrorCode,
15
15
  OpenapiError,
16
16
  OpenapiErrorResponse,
17
+ OpenapiMediaType,
17
18
  OpenapiOperation,
18
19
  OpenapiParameter,
19
20
  OpenapiRequestBody,
@@ -27,14 +28,14 @@ import {
27
28
  isOpenapiTextMedia,
28
29
  openapiBinaryResultSchema,
29
30
  openapiMediaKind
30
- } from "./chunk-JN3PEGMW.js";
31
- import "./chunk-TSLG2WPA.js";
31
+ } from "./chunk-PUC24GZP.js";
32
+ import "./chunk-4N26L465.js";
32
33
  import {
33
34
  fromPromise,
34
35
  nativeOperation,
35
36
  routerDeclaration,
36
37
  toPromise
37
- } from "./chunk-GQ7GCZ4J.js";
38
+ } from "./chunk-6VWYEQ4X.js";
38
39
  import {
39
40
  accountProviderError,
40
41
  httpProviderError
@@ -46,21 +47,17 @@ import {
46
47
  OpenapiResponseError,
47
48
  RouterMeta,
48
49
  defaultOpenapiErrorLimits
49
- } from "./chunk-TE2HPDZG.js";
50
+ } from "./chunk-BSRU52RU.js";
50
51
  import "./chunk-M2KEEOIQ.js";
51
52
  import {
52
53
  ProviderError,
53
54
  cacheLimits
54
55
  } from "./chunk-BRGF7VFN.js";
55
- import "./chunk-NSBRV4FJ.js";
56
- import "./chunk-YXKXKGN6.js";
56
+ import "./chunk-MYCVMDWI.js";
57
+ import "./chunk-WGBI5MVX.js";
57
58
  import {
58
59
  FetchHttpClient_exports
59
- } from "./chunk-V2I3MMPM.js";
60
- import {
61
- HttpClientRequest_exports,
62
- HttpClient_exports
63
- } from "./chunk-B5YJQU45.js";
60
+ } from "./chunk-BBTELEAN.js";
64
61
  import {
65
62
  jsonSchema,
66
63
  lazyJsonSchemaDecoder,
@@ -71,6 +68,11 @@ import "./chunk-BTJMXW4I.js";
71
68
  import {
72
69
  JsonObject
73
70
  } from "./chunk-PWF2DRJ3.js";
71
+ import "./chunk-2D2PKLGQ.js";
72
+ import {
73
+ HttpClientRequest_exports,
74
+ HttpClient_exports
75
+ } from "./chunk-XGN5IFOZ.js";
74
76
  import {
75
77
  Deferred_exports,
76
78
  Duration_exports,
@@ -90,6 +92,19 @@ import "./chunk-CZ7CSFO4.js";
90
92
  var loadSwaggerClient = () => import("./es-DIULA3ZF.js").then((module) => module.default);
91
93
 
92
94
  // src/implementation/openapi-request.ts
95
+ var mediaType = Schema_exports.decodeUnknownOption(OpenapiMediaType);
96
+ var responseShape = (response) => {
97
+ const contentType = mediaType(
98
+ response.headers["content-type"]?.split(";")[0]?.trim().toLowerCase()
99
+ );
100
+ const length = response.headers["content-length"];
101
+ const bytes2 = length === void 0 || !/^\d{1,15}$/.test(length) ? void 0 : Number(length);
102
+ return {
103
+ status: response.status,
104
+ ...Option_exports.isSome(contentType) ? { contentType: contentType.value } : {},
105
+ ...bytes2 === void 0 ? {} : { bytes: bytes2 }
106
+ };
107
+ };
93
108
  var bodyRecovery = Schema_exports.decodeUnknownOption(Schema_exports.Struct({ recovery: ApiErrorRecovery }));
94
109
  function responseError(response, errors) {
95
110
  return Effect_exports.gen(function* () {
@@ -240,147 +255,160 @@ function createRequest(config) {
240
255
  const keys = security.length === 0 ? [] : security.map(Object.keys).find((keys2) => keys2.every((key) => Object.hasOwn(authorized, key)));
241
256
  return keys === void 0 ? void 0 : Object.fromEntries(keys.map((key) => [key, authorized[key]]));
242
257
  }
243
- const call = (op, input, account, errors) => Effect_exports.scoped(
244
- Effect_exports.gen(function* () {
245
- const swagger = yield* Effect_exports.promise(loadSwaggerClient);
246
- const prepared = yield* Effect_exports.try({
247
- try: () => {
248
- const args = object(input);
249
- const authorized = selectedCredentials(op, account);
250
- if (authorized === void 0)
251
- throw new Error("The selected account cannot call this tool");
252
- const parameters = {};
253
- let path = op.path;
254
- const querystrings = [];
255
- const swaggerParameters = op.request.parameters.filter((p) => {
256
- const group = args[p.in === "header" ? "headers" : p.in];
257
- const value = group === void 0 ? void 0 : object(group)[p.name];
258
- if (p.in === "path" && p.allowReserved === true && p.content === void 0) {
259
- if (value === void 0) throw new Error("A required path parameter is missing");
260
- path = path.replaceAll(`{${p.name}}`, reservedPathValue(value));
261
- return false;
262
- }
263
- if (p.in === "querystring") {
264
- if (value !== void 0) querystrings.push(querystringValue(p, value));
265
- else if (p.required === true)
266
- throw new Error("A required querystring parameter is missing");
267
- return false;
268
- }
269
- if (group !== void 0) parameters[`${p.in}.${p.name}`] = value;
270
- return true;
271
- });
272
- const content = op.request.requestBody?.content ?? {};
273
- const contentType2 = args.contentType === void 0 ? Object.keys(content)[0] : scalar(args.contentType);
274
- const media = contentType2 === void 0 ? void 0 : content[contentType2];
275
- let body = args.body;
276
- if (body !== void 0 && media !== void 0 && contentType2 !== void 0) {
277
- const kind = openapiMediaKind(contentType2);
278
- if (kind === "json") body = JSON.stringify(body);
279
- else if (kind === "binary") body = new Blob([bytes(body)]);
280
- else if (kind === "multipart") {
281
- const fields = { ...object(body) };
282
- for (const [name, property] of Object.entries(
283
- object(media.schema?.properties ?? {})
284
- )) {
285
- if (isOpenapiFileSchema(object(property)) && fields[name] !== void 0)
286
- fields[name] = new File([bytes(fields[name])], name);
258
+ const call = (op, input, account, errors) => {
259
+ const operation = { method: op.method, path: op.path };
260
+ return Effect_exports.scoped(
261
+ Effect_exports.gen(function* () {
262
+ const swagger = yield* Effect_exports.promise(loadSwaggerClient);
263
+ const prepared = yield* Effect_exports.try({
264
+ try: () => {
265
+ const args = object(input);
266
+ const authorized = selectedCredentials(op, account);
267
+ if (authorized === void 0)
268
+ throw new Error("The selected account cannot call this tool");
269
+ const parameters = {};
270
+ let path = op.path;
271
+ const querystrings = [];
272
+ const swaggerParameters = op.request.parameters.filter((p) => {
273
+ const group = args[p.in === "header" ? "headers" : p.in];
274
+ const value = group === void 0 ? void 0 : object(group)[p.name];
275
+ if (p.in === "path" && p.allowReserved === true && p.content === void 0) {
276
+ if (value === void 0) throw new Error("A required path parameter is missing");
277
+ path = path.replaceAll(`{${p.name}}`, reservedPathValue(value));
278
+ return false;
279
+ }
280
+ if (p.in === "querystring") {
281
+ if (value !== void 0) querystrings.push(querystringValue(p, value));
282
+ else if (p.required === true)
283
+ throw new Error("A required querystring parameter is missing");
284
+ return false;
285
+ }
286
+ if (group !== void 0) parameters[`${p.in}.${p.name}`] = value;
287
+ return true;
288
+ });
289
+ const content = op.request.requestBody?.content ?? {};
290
+ const contentType2 = args.contentType === void 0 ? Object.keys(content)[0] : scalar(args.contentType);
291
+ const media = contentType2 === void 0 ? void 0 : content[contentType2];
292
+ let body = args.body;
293
+ if (body !== void 0 && media !== void 0 && contentType2 !== void 0) {
294
+ const kind = openapiMediaKind(contentType2);
295
+ if (kind === "json") body = JSON.stringify(body);
296
+ else if (kind === "binary") body = new Blob([bytes(body)]);
297
+ else if (kind === "multipart") {
298
+ const fields = { ...object(body) };
299
+ for (const [name, property] of Object.entries(
300
+ object(media.schema?.properties ?? {})
301
+ )) {
302
+ if (isOpenapiFileSchema(object(property)) && fields[name] !== void 0)
303
+ fields[name] = new File([bytes(fields[name])], name);
304
+ }
305
+ body = fields;
287
306
  }
288
- body = fields;
289
307
  }
290
- }
291
- const prepared2 = swaggerRequest(
292
- swagger.buildRequest({
293
- spec: {
294
- openapi: op.openapi,
295
- servers: [{ url: op.baseUrl }],
296
- components: { securitySchemes: op.securitySchemes },
297
- paths: {
298
- [path]: {
299
- [op.method.toLowerCase()]: {
300
- ...op.request,
301
- parameters: swaggerParameters,
302
- operationId: op.name
308
+ const prepared2 = swaggerRequest(
309
+ swagger.buildRequest({
310
+ spec: {
311
+ openapi: op.openapi,
312
+ servers: [{ url: op.baseUrl }],
313
+ components: { securitySchemes: op.securitySchemes },
314
+ paths: {
315
+ [path]: {
316
+ [op.method.toLowerCase()]: {
317
+ ...op.request,
318
+ parameters: swaggerParameters,
319
+ operationId: op.name
320
+ }
303
321
  }
304
322
  }
305
- }
306
- },
307
- operationId: op.name,
308
- pathName: path,
309
- method: op.method.toLowerCase(),
310
- parameters,
311
- securities: { authorized },
312
- ...contentType2 === void 0 ? {} : { requestContentType: contentType2 },
313
- ...body === void 0 ? {} : { requestBody: body }
323
+ },
324
+ operationId: op.name,
325
+ pathName: path,
326
+ method: op.method.toLowerCase(),
327
+ parameters,
328
+ securities: { authorized },
329
+ ...contentType2 === void 0 ? {} : { requestContentType: contentType2 },
330
+ ...body === void 0 ? {} : { requestBody: body }
331
+ })
332
+ );
333
+ const pathname = prepared2.url.replace(/^[^:]+:\/\/[^/]*/, "").split(/[?#]/)[0] ?? "";
334
+ if (pathname.split("/").some((segment) => /^(?:\.|%2e){1,2}$/i.test(segment)))
335
+ throw new Error("This path value would change the request path");
336
+ const url = new URL(prepared2.url);
337
+ if (querystrings.length > 0)
338
+ url.search = [url.search.slice(1), ...querystrings].filter((part) => part !== "").join("&");
339
+ const origin = new URL(op.baseUrl).origin;
340
+ if (url.origin !== origin || !operationPath(op).test(url.pathname) || url.username || url.password)
341
+ throw new Error("The request escaped its API operation");
342
+ const headers = new Headers(prepared2.headers);
343
+ if (!headers.has("user-agent")) headers.set("user-agent", "Executor");
344
+ if (prepared2.body instanceof FormData) headers.delete("content-type");
345
+ return { ...prepared2, url, headers };
346
+ },
347
+ catch: () => new OpenapiError({ reason: "invalid_input", operation })
348
+ });
349
+ const client = yield* HttpClient_exports.HttpClient;
350
+ const request = yield* Effect_exports.try({
351
+ try: () => HttpClientRequest_exports.fromWeb(
352
+ new Request(prepared.url, {
353
+ method: prepared.method,
354
+ headers: prepared.headers,
355
+ ...prepared.body === void 0 ? {} : { body: prepared.body }
314
356
  })
315
- );
316
- const pathname = prepared2.url.replace(/^[^:]+:\/\/[^/]*/, "").split(/[?#]/)[0] ?? "";
317
- if (pathname.split("/").some((segment) => /^(?:\.|%2e){1,2}$/i.test(segment)))
318
- throw new Error("This path value would change the request path");
319
- const url = new URL(prepared2.url);
320
- if (querystrings.length > 0)
321
- url.search = [url.search.slice(1), ...querystrings].filter((part) => part !== "").join("&");
322
- const origin = new URL(op.baseUrl).origin;
323
- if (url.origin !== origin || !operationPath(op).test(url.pathname) || url.username || url.password)
324
- throw new Error("The request escaped its API operation");
325
- const headers = new Headers(prepared2.headers);
326
- if (!headers.has("user-agent")) headers.set("user-agent", "Executor");
327
- if (prepared2.body instanceof FormData) headers.delete("content-type");
328
- return { ...prepared2, url, headers };
329
- },
330
- catch: () => new OpenapiError({ reason: "invalid_input" })
331
- });
332
- const client = yield* HttpClient_exports.HttpClient;
333
- const request = yield* Effect_exports.try({
334
- try: () => HttpClientRequest_exports.fromWeb(
335
- new Request(prepared.url, {
336
- method: prepared.method,
337
- headers: prepared.headers,
338
- ...prepared.body === void 0 ? {} : { body: prepared.body }
339
- })
340
- ),
341
- catch: () => new OpenapiError({ reason: "invalid_input" })
342
- });
343
- const response = yield* HttpClient_exports.withScope(client).execute(request);
344
- yield* failOnNetworkRefusal(response);
345
- if (response.status < 200 || response.status >= 300) {
346
- const provider = httpProviderError(response.status, response.headers);
347
- if (provider !== void 0 && provider.reason !== "rejected") return yield* provider;
348
- const declared = yield* responseError(response, errors);
349
- return yield* declared ?? provider ?? new OpenapiError({ reason: "request", status: response.status });
350
- }
351
- if (response.status === 204 || prepared.method === "HEAD") return null;
352
- const contentType = response.headers["content-type"] ?? "text/plain";
353
- const chunks = yield* response.stream.pipe(
354
- Stream_exports.mapError(() => new OpenapiError({ reason: "request" })),
355
- Stream_exports.limitBytes(
356
- defaultOpenapiResponseLimits.maxBodyBytes,
357
- () => Stream_exports.fail(new OpenapiError({ reason: "request" }))
358
- ),
359
- Stream_exports.runCollect,
360
- Effect_exports.timeout(defaultOpenapiResponseLimits.readTimeoutMs),
361
- Effect_exports.withSpan("provider.http.response.read")
362
- );
363
- const data = new Uint8Array(chunks.reduce((size, chunk) => size + chunk.length, 0));
364
- let offset = 0;
365
- for (const chunk of chunks) {
366
- data.set(chunk, offset);
367
- offset += chunk.length;
368
- }
369
- if (!isOpenapiTextMedia(contentType))
370
- return { base64: Encoding_exports.encodeBase64(data), contentType };
371
- const text = new TextDecoder().decode(data);
372
- return contentType.includes("json") && !isOpenapiJsonSequence(contentType) ? yield* Schema_exports.decodeUnknownEffect(Schema_exports.fromJsonString(Schema_exports.Json))(text) : text;
373
- })
374
- ).pipe(
375
- Effect_exports.withSpan("provider.openapi.call", {
376
- attributes: { "executor.tool.name": op.name, "http.request.method": op.method }
377
- }),
378
- Effect_exports.provideService(FetchHttpClient_exports.RequestInit, { redirect: "manual" }),
379
- Effect_exports.provide(FetchHttpClient_exports.layer),
380
- Effect_exports.mapError(
381
- (error) => error instanceof ProviderError && account?.id !== void 0 ? accountProviderError(error, account.id) : error instanceof OpenapiError || error instanceof OpenapiResponseError || error instanceof ProviderError || error instanceof NetworkRefused ? error : new OpenapiError({ reason: "request" })
382
- )
383
- );
357
+ ),
358
+ catch: () => new OpenapiError({ reason: "invalid_input", operation })
359
+ });
360
+ const response = yield* HttpClient_exports.withScope(client).execute(request);
361
+ yield* failOnNetworkRefusal(response);
362
+ if (response.status < 200 || response.status >= 300) {
363
+ const provider = httpProviderError(response.status, response.headers);
364
+ if (provider !== void 0 && provider.reason !== "rejected") return yield* provider;
365
+ const declared = yield* responseError(response, errors);
366
+ return yield* declared ?? provider ?? new OpenapiError({ reason: "request", operation, ...responseShape(response) });
367
+ }
368
+ if (response.status === 204 || prepared.method === "HEAD") return null;
369
+ const unreadable = new OpenapiError({
370
+ reason: "request",
371
+ operation,
372
+ ...responseShape(response)
373
+ });
374
+ const contentType = response.headers["content-type"] ?? "text/plain";
375
+ const chunks = yield* response.stream.pipe(
376
+ Stream_exports.mapError(() => unreadable),
377
+ Stream_exports.limitBytes(
378
+ defaultOpenapiResponseLimits.maxBodyBytes,
379
+ () => Stream_exports.fail(unreadable)
380
+ ),
381
+ Stream_exports.runCollect,
382
+ Effect_exports.timeoutOrElse({
383
+ duration: defaultOpenapiResponseLimits.readTimeoutMs,
384
+ orElse: () => Effect_exports.fail(unreadable)
385
+ }),
386
+ Effect_exports.withSpan("provider.http.response.read")
387
+ );
388
+ const data = new Uint8Array(chunks.reduce((size, chunk) => size + chunk.length, 0));
389
+ let offset = 0;
390
+ for (const chunk of chunks) {
391
+ data.set(chunk, offset);
392
+ offset += chunk.length;
393
+ }
394
+ if (!isOpenapiTextMedia(contentType))
395
+ return { base64: Encoding_exports.encodeBase64(data), contentType };
396
+ const text = new TextDecoder().decode(data);
397
+ return contentType.includes("json") && !isOpenapiJsonSequence(contentType) ? yield* Schema_exports.decodeUnknownEffect(Schema_exports.fromJsonString(Schema_exports.Json))(text).pipe(
398
+ Effect_exports.mapError(() => unreadable)
399
+ ) : text;
400
+ })
401
+ ).pipe(
402
+ Effect_exports.withSpan("provider.openapi.call", {
403
+ attributes: { "executor.tool.name": op.name, "http.request.method": op.method }
404
+ }),
405
+ Effect_exports.provideService(FetchHttpClient_exports.RequestInit, { redirect: "manual" }),
406
+ Effect_exports.provide(FetchHttpClient_exports.layer),
407
+ Effect_exports.mapError(
408
+ (error) => error instanceof ProviderError && account?.id !== void 0 ? accountProviderError(error, account.id) : error instanceof OpenapiError || error instanceof OpenapiResponseError || error instanceof ProviderError || error instanceof NetworkRefused ? error : new OpenapiError({ reason: "request", operation })
409
+ )
410
+ );
411
+ };
384
412
  return {
385
413
  available: (op, account) => selectedCredentials(op, account) !== void 0,
386
414
  call
@@ -514,7 +542,12 @@ var openapiToolsEffect = (options, prepared) => Effect_exports.gen(function* ()
514
542
  run: (_context, value) => Schema_exports.decodeUnknownEffect(input)(
515
543
  fillParameterDefaults(op, config.parameterDefaults, value)
516
544
  ).pipe(
517
- Effect_exports.mapError(() => new OpenapiError({ reason: "invalid_input" })),
545
+ Effect_exports.mapError(
546
+ () => new OpenapiError({
547
+ reason: "invalid_input",
548
+ operation: { method: op.method, path: op.path }
549
+ })
550
+ ),
518
551
  Effect_exports.flatMap(
519
552
  (parsed) => request.call(op, parsed, config.account, errors).pipe(
520
553
  Effect_exports.provideService(
@@ -4755,9 +4788,9 @@ var compileOpenApiDocument = (entry, inputDocument, options = {}) => {
4755
4788
  for (const { parameter: p, at: parameterAt } of parameters.values()) {
4756
4789
  const key = p.in === "header" ? "headers" : p.in;
4757
4790
  const group = groups.get(key) ?? { properties: {}, required: [] };
4758
- const [mediaType, content] = p.content === void 0 ? [] : Object.entries(p.content)[0] ?? [];
4791
+ const [mediaType2, content] = p.content === void 0 ? [] : Object.entries(p.content)[0] ?? [];
4759
4792
  const schema2 = p.schema ?? (content === void 0 ? {} : record2(content).schema ?? {});
4760
- const schemaAt = p.schema !== void 0 || mediaType === void 0 ? `${parameterAt}/schema` : mediaSchemaAt(document, `${parameterAt}`, mediaType, content);
4793
+ const schemaAt = p.schema !== void 0 || mediaType2 === void 0 ? `${parameterAt}/schema` : mediaSchemaAt(document, `${parameterAt}`, mediaType2, content);
4761
4794
  group.properties[p.name] = parameterAt === void 0 ? () => schema2 : (api) => api(schema2, schemaAt);
4762
4795
  if (p.required || p.in === "path") group.required.push(p.name);
4763
4796
  groups.set(key, group);
@@ -1,8 +1,10 @@
1
1
  import {
2
2
  folderSkillsEffect,
3
3
  skillFromFiles
4
- } from "../chunk-TSLG2WPA.js";
5
- import "../chunk-NSBRV4FJ.js";
4
+ } from "../chunk-4N26L465.js";
5
+ import "../chunk-MYCVMDWI.js";
6
+ import "../chunk-2D2PKLGQ.js";
7
+ import "../chunk-XGN5IFOZ.js";
6
8
  import "../chunk-NXTXZ635.js";
7
9
  import "../chunk-CZ7CSFO4.js";
8
10
  export {
package/js/skills.js CHANGED
@@ -5,7 +5,7 @@ import "./chunk-VUVBMNKC.js";
5
5
  import {
6
6
  folderSkillsEffect,
7
7
  skillFromFiles
8
- } from "./chunk-TSLG2WPA.js";
8
+ } from "./chunk-4N26L465.js";
9
9
  import {
10
10
  httpProviderError
11
11
  } from "./chunk-KQCMHI3K.js";
@@ -19,18 +19,19 @@ import {
19
19
  SkillLoadFailed,
20
20
  SkillServiceName,
21
21
  skillLoadLimits
22
- } from "./chunk-NSBRV4FJ.js";
22
+ } from "./chunk-MYCVMDWI.js";
23
23
  import {
24
24
  FetchHttpClient_exports
25
- } from "./chunk-V2I3MMPM.js";
26
- import {
27
- HttpBody_exports,
28
- HttpClient_exports
29
- } from "./chunk-B5YJQU45.js";
25
+ } from "./chunk-BBTELEAN.js";
30
26
  import {
31
27
  wrap
32
28
  } from "./chunk-YML53Z7H.js";
33
29
  import "./chunk-PWF2DRJ3.js";
30
+ import "./chunk-2D2PKLGQ.js";
31
+ import {
32
+ HttpBody_exports,
33
+ HttpClient_exports
34
+ } from "./chunk-XGN5IFOZ.js";
34
35
  import {
35
36
  Effect_exports,
36
37
  Ref_exports,
package/js/ui/auth.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  appRedirect,
4
4
  appSignInCallback,
5
5
  appSignInFailed
6
- } from "../chunk-PTUZSCEV.js";
6
+ } from "../chunk-P46HIAX6.js";
7
7
  import {
8
8
  AppReturnPath,
9
9
  AppSignInCallback,
@@ -12,8 +12,8 @@ import {
12
12
  AppSignInId,
13
13
  appSignInCallbackPath
14
14
  } from "../chunk-WQ5MVBTP.js";
15
- import "../chunk-V2I3MMPM.js";
16
- import "../chunk-B5YJQU45.js";
15
+ import "../chunk-BBTELEAN.js";
16
+ import "../chunk-XGN5IFOZ.js";
17
17
  import "../chunk-NXTXZ635.js";
18
18
  import "../chunk-CZ7CSFO4.js";
19
19
  export {
@@ -7,9 +7,10 @@ import {
7
7
  UiOperation,
8
8
  UiSnapshot,
9
9
  UiUnauthorized
10
- } from "../chunk-SDLIDQXG.js";
11
- import "../chunk-B5YJQU45.js";
10
+ } from "../chunk-5ZHHO4OM.js";
12
11
  import "../chunk-PWF2DRJ3.js";
12
+ import "../chunk-2D2PKLGQ.js";
13
+ import "../chunk-XGN5IFOZ.js";
13
14
  import "../chunk-NXTXZ635.js";
14
15
  import "../chunk-CZ7CSFO4.js";
15
16
  export {
package/js/ui/serving.js CHANGED
@@ -1,19 +1,20 @@
1
1
  import {
2
2
  appPrivateHeaders
3
- } from "../chunk-PTUZSCEV.js";
3
+ } from "../chunk-P46HIAX6.js";
4
4
  import "../chunk-WQ5MVBTP.js";
5
5
  import {
6
6
  UiForbidden
7
- } from "../chunk-SDLIDQXG.js";
7
+ } from "../chunk-5ZHHO4OM.js";
8
8
  import {
9
9
  CurrentTelemetryConfig
10
- } from "../chunk-YXKXKGN6.js";
11
- import "../chunk-V2I3MMPM.js";
10
+ } from "../chunk-WGBI5MVX.js";
11
+ import "../chunk-BBTELEAN.js";
12
+ import "../chunk-PWF2DRJ3.js";
13
+ import "../chunk-2D2PKLGQ.js";
12
14
  import {
13
15
  HttpServerRequest_exports,
14
16
  HttpServerResponse_exports
15
- } from "../chunk-B5YJQU45.js";
16
- import "../chunk-PWF2DRJ3.js";
17
+ } from "../chunk-XGN5IFOZ.js";
17
18
  import {
18
19
  Effect_exports
19
20
  } from "../chunk-NXTXZ635.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apps",
3
- "version": "0.0.1-beta.28",
3
+ "version": "0.0.1-beta.30",
4
4
  "description": "TypeScript apps with typed tools, accounts, storage, and UI.",
5
5
  "type": "module",
6
6
  "sideEffects": false,