apps 0.0.1-beta.10 → 0.0.1-beta.100

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 (195) hide show
  1. package/README.md +60 -42
  2. package/framework-reference.json +1 -1
  3. package/js/{chunk-Z5M2LQOZ.js → chunk-2CURR5Y7.js} +113 -58
  4. package/js/{chunk-72JNVHPK.js → chunk-2LSGC7XY.js} +4 -3
  5. package/js/{chunk-JU7VHODU.js → chunk-4PIQKACY.js} +65 -10
  6. package/js/chunk-4UPC36ZL.js +5185 -0
  7. package/js/{chunk-VFZKSM3T.js → chunk-4X2UI4R2.js} +3 -3
  8. package/js/chunk-5C6RAGAS.js +335 -0
  9. package/js/{chunk-KUMBKVJD.js → chunk-62NVUKED.js} +2 -2
  10. package/js/chunk-74H25C4X.js +95 -0
  11. package/js/chunk-7HG422GB.js +90 -0
  12. package/js/chunk-7STIP5CS.js +171 -0
  13. package/js/{chunk-UK573G7W.js → chunk-ACQXVKVQ.js} +87 -51
  14. package/js/{chunk-IJX4CYZO.js → chunk-DILSCQPJ.js} +228 -264
  15. package/js/chunk-ILYCJ3HV.js +449 -0
  16. package/js/chunk-K6TSCYAO.js +712 -0
  17. package/js/{chunk-M3B3DE4K.js → chunk-KLSEU35Y.js} +463 -218
  18. package/js/chunk-OD3KFKZD.js +1617 -0
  19. package/js/chunk-OWN3DP2W.js +88 -0
  20. package/js/{chunk-IPI4MFSN.js → chunk-PBGPES67.js} +2 -2
  21. package/js/{chunk-FL2QR3XW.js → chunk-QI66R4FP.js} +355 -76
  22. package/js/{chunk-V5KNQVCT.js → chunk-RN4YB4JT.js} +931 -289
  23. package/js/{chunk-ODEIDRGW.js → chunk-URKOTNDA.js} +795 -176
  24. package/js/{chunk-5T57N25Q.js → chunk-VAI3EVCS.js} +643 -69
  25. package/js/chunk-VCYWAA4N.js +49 -0
  26. package/js/{chunk-57RKNWL2.js → chunk-YDW7DX3A.js} +4 -4
  27. package/js/{chunk-RFVIONFX.js → chunk-YWVISRZD.js} +123 -44
  28. package/js/{chunk-CDL5PM2Q.js → chunk-ZKDXML77.js} +19239 -18404
  29. package/js/client.js +148 -84
  30. package/js/contracts.js +150 -21
  31. package/js/effect.js +18 -19
  32. package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
  33. package/js/graphql.js +49 -40
  34. package/js/host.js +85 -62
  35. package/js/index.js +212 -98
  36. package/js/mcp/effect.js +21 -21
  37. package/js/mcp.js +84 -57
  38. package/js/openapi.js +4189 -1411
  39. package/js/react.js +2 -3
  40. package/js/skills/effect.js +6 -3
  41. package/js/skills.js +208 -81
  42. package/js/storage/facet.js +1 -540
  43. package/js/ui/auth/contracts.js +2 -2
  44. package/js/ui/auth.js +5 -5
  45. package/js/ui/contracts.js +9 -8
  46. package/js/ui/serving.js +8609 -228
  47. package/package.json +3 -8
  48. package/runtime.json +1 -1
  49. package/types/app-cache/src/contracts/cache.d.ts +18 -0
  50. package/types/app-cache/src/index.d.ts +34 -2
  51. package/types/apps/src/contracts/api-response-error.d.ts +4 -0
  52. package/types/apps/src/contracts/app.d.ts +56 -11
  53. package/types/apps/src/contracts/cache.d.ts +20 -0
  54. package/types/apps/src/contracts/context.d.ts +60 -17
  55. package/types/apps/src/contracts/elicitation.d.ts +23 -7
  56. package/types/apps/src/contracts/events.d.ts +94 -0
  57. package/types/apps/src/contracts/failure.d.ts +30 -1
  58. package/types/apps/src/contracts/graphql.d.ts +2 -1
  59. package/types/apps/src/contracts/host.d.ts +1456 -20
  60. package/types/apps/src/contracts/icons.d.ts +28 -0
  61. package/types/apps/src/contracts/live.d.ts +2 -0
  62. package/types/apps/src/contracts/mcp.d.ts +81 -20
  63. package/types/apps/src/contracts/network.d.ts +120 -0
  64. package/types/apps/src/contracts/openapi-compile.d.ts +82 -3
  65. package/types/apps/src/contracts/openapi-document.d.ts +1 -1
  66. package/types/apps/src/contracts/openapi.d.ts +41 -9
  67. package/types/apps/src/contracts/operations.d.ts +14 -7
  68. package/types/apps/src/contracts/placement.d.ts +102 -0
  69. package/types/apps/src/contracts/protocol-version.d.ts +2 -2
  70. package/types/apps/src/contracts/protocols/1.d.ts +733 -81
  71. package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
  72. package/types/apps/src/contracts/protocols/11.d.ts +1149 -0
  73. package/types/apps/src/contracts/protocols/12.d.ts +3310 -0
  74. package/types/apps/src/contracts/protocols/2.d.ts +69 -26
  75. package/types/apps/src/contracts/protocols/3.d.ts +133 -33
  76. package/types/apps/src/contracts/protocols/4.d.ts +122 -45
  77. package/types/apps/src/contracts/protocols/5.d.ts +157 -47
  78. package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
  79. package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
  80. package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
  81. package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
  82. package/types/apps/src/contracts/protocols/current.d.ts +6857 -0
  83. package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
  84. package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
  85. package/types/apps/src/contracts/provider-error.d.ts +9 -0
  86. package/types/apps/src/contracts/provider.d.ts +90 -6
  87. package/types/apps/src/contracts/schedules.d.ts +7 -1
  88. package/types/apps/src/contracts/schema.d.ts +21 -0
  89. package/types/apps/src/contracts/shared-catalog.d.ts +11 -0
  90. package/types/apps/src/contracts/skills.d.ts +50 -13
  91. package/types/apps/src/contracts/sql.d.ts +63 -0
  92. package/types/apps/src/contracts/ui.d.ts +70 -30
  93. package/types/apps/src/contracts/webhooks.d.ts +24 -7
  94. package/types/apps/src/contracts/workflows.d.ts +56 -34
  95. package/types/apps/src/facet.d.ts +4 -5
  96. package/types/apps/src/host.d.ts +5 -0
  97. package/types/apps/src/implementation/account-router.d.ts +4 -3
  98. package/types/apps/src/implementation/app.d.ts +41 -14
  99. package/types/apps/src/implementation/authoring.d.ts +25 -5
  100. package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
  101. package/types/apps/src/implementation/cache.d.ts +29 -2
  102. package/types/apps/src/implementation/catalog-cache.d.ts +35 -4
  103. package/types/apps/src/implementation/elicitation.d.ts +18 -15
  104. package/types/apps/src/implementation/events.d.ts +64 -0
  105. package/types/apps/src/implementation/failure-detail.d.ts +28 -5
  106. package/types/apps/src/implementation/graphql-catalog.d.ts +3 -3
  107. package/types/apps/src/implementation/graphql.d.ts +4 -3
  108. package/types/apps/src/implementation/input-problems.d.ts +6 -2
  109. package/types/apps/src/implementation/invocation-timing.d.ts +18 -0
  110. package/types/apps/src/implementation/live.d.ts +2 -2
  111. package/types/apps/src/implementation/mcp-call.d.ts +6 -5
  112. package/types/apps/src/implementation/mcp-catalog.d.ts +6 -4
  113. package/types/apps/src/implementation/mcp-client.d.ts +17 -9
  114. package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
  115. package/types/apps/src/implementation/mcp.d.ts +20 -9
  116. package/types/apps/src/implementation/network.d.ts +16 -0
  117. package/types/apps/src/implementation/openapi-compile.d.ts +28 -7
  118. package/types/apps/src/implementation/openapi-document.d.ts +46 -19
  119. package/types/apps/src/implementation/openapi-names.d.ts +9 -4
  120. package/types/apps/src/implementation/openapi-request.d.ts +10 -2
  121. package/types/apps/src/implementation/openapi-source.d.ts +23 -1
  122. package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
  123. package/types/apps/src/implementation/operations.d.ts +58 -7
  124. package/types/apps/src/implementation/optimistic.d.ts +1 -1
  125. package/types/apps/src/implementation/placement.d.ts +60 -0
  126. package/types/apps/src/implementation/protocol-operations.d.ts +3 -0
  127. package/types/apps/src/implementation/provider-error.d.ts +28 -1
  128. package/types/apps/src/implementation/provider.d.ts +19 -4
  129. package/types/apps/src/implementation/query-commit.d.ts +1 -1
  130. package/types/apps/src/implementation/router-catalog.d.ts +20 -18
  131. package/types/apps/src/implementation/router.d.ts +24 -5
  132. package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
  133. package/types/apps/src/implementation/schedules.d.ts +39 -8
  134. package/types/apps/src/implementation/schema.d.ts +108 -11
  135. package/types/apps/src/implementation/skills.d.ts +18 -24
  136. package/types/apps/src/implementation/sql.d.ts +71 -0
  137. package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
  138. package/types/apps/src/implementation/ui-auth.d.ts +1 -1
  139. package/types/apps/src/implementation/ui-client.d.ts +3 -3
  140. package/types/apps/src/implementation/ui-document.d.ts +5 -0
  141. package/types/apps/src/implementation/ui-errors.d.ts +1 -1
  142. package/types/apps/src/implementation/ui-serving.d.ts +28 -11
  143. package/types/apps/src/implementation/ui-watch.d.ts +1 -1
  144. package/types/apps/src/implementation/upstream-error.d.ts +7 -0
  145. package/types/apps/src/implementation/webhooks.d.ts +15 -6
  146. package/types/apps/src/implementation/workflow-context.d.ts +6 -2
  147. package/types/apps/src/implementation/workflows.d.ts +11 -4
  148. package/types/apps/src/index.d.ts +68 -19
  149. package/types/apps/src/mcp.d.ts +20 -1
  150. package/types/apps/src/openapi.d.ts +6 -1
  151. package/types/apps/src/react.d.ts +1 -1
  152. package/types/apps/src/skills.d.ts +10 -8
  153. package/types/apps/src/ui-serving.d.ts +1 -1
  154. package/types/telemetry/src/app-records.d.ts +42 -0
  155. package/types/telemetry/src/browser-operations.d.ts +2 -2
  156. package/types/telemetry/src/browser.d.ts +8 -3
  157. package/types/telemetry/src/config.d.ts +2 -2
  158. package/types/telemetry/src/index.d.ts +2 -1
  159. package/types/telemetry/src/layer.d.ts +10 -4
  160. package/types/telemetry/src/measurements.d.ts +1 -1
  161. package/types/telemetry/src/ownership.d.ts +60 -0
  162. package/types/telemetry/src/recorded-failure.d.ts +29 -0
  163. package/types/telemetry/src/relay.d.ts +16 -6
  164. package/types/telemetry/src/span-attributes.d.ts +17 -1
  165. package/types/telemetry/src/transport.d.ts +8 -1
  166. package/types/utils/src/api-error.d.ts +55 -0
  167. package/types/utils/src/connection-failure.d.ts +33 -0
  168. package/types/utils/src/legacy-keys.d.ts +20 -0
  169. package/types/utils/src/recorded-message.d.ts +18 -0
  170. package/types/utils/src/schema-definitions.d.ts +13 -0
  171. package/types/utils/src/user-facing-error.d.ts +83 -0
  172. package/js/chunk-27F7W2LG.js +0 -34
  173. package/js/chunk-CRDWFA74.js +0 -299
  174. package/js/chunk-EPT3ZP52.js +0 -224
  175. package/js/chunk-MKWZPDR6.js +0 -63
  176. package/js/chunk-N7YDVXYJ.js +0 -186
  177. package/js/chunk-NKLWZJLE.js +0 -172
  178. package/js/chunk-PJJ24GU7.js +0 -877
  179. package/js/chunk-PZB6T6KU.js +0 -19
  180. package/js/chunk-R3EV5FTO.js +0 -97
  181. package/js/chunk-WLE7WX2U.js +0 -2645
  182. package/js/chunk-YXQHV65J.js +0 -242
  183. package/js/chunk-ZQINWV4W.js +0 -630
  184. package/js/mcp/stdio.js +0 -128
  185. package/types/app-data/src/implementation/cursor.d.ts +0 -10
  186. package/types/app-data/src/implementation/index-key.d.ts +0 -7
  187. package/types/app-data/src/implementation/promise.d.ts +0 -68
  188. package/types/app-data/src/implementation/range.d.ts +0 -8
  189. package/types/app-data/src/implementation/schema.d.ts +0 -18
  190. package/types/app-data/src/implementation/sqlite.d.ts +0 -11
  191. package/types/app-data/src/index.d.ts +0 -4
  192. package/types/apps/src/contracts/storage.d.ts +0 -68
  193. package/types/apps/src/implementation/mcp-stdio.d.ts +0 -4
  194. package/types/apps/src/implementation/storage.d.ts +0 -15
  195. package/types/apps/src/mcp-stdio.d.ts +0 -5
@@ -1,48 +1,20 @@
1
+ import {
2
+ fromPromise
3
+ } from "./chunk-7STIP5CS.js";
1
4
  import {
2
5
  HostedTool,
3
6
  RouterKey,
4
7
  RouterMeta,
5
8
  reservedRouterKeys
6
- } from "./chunk-WLE7WX2U.js";
9
+ } from "./chunk-4UPC36ZL.js";
7
10
  import {
8
- decoderOf
9
- } from "./chunk-5T57N25Q.js";
11
+ decoderOf,
12
+ schemaArgument
13
+ } from "./chunk-VAI3EVCS.js";
10
14
  import {
11
15
  Effect_exports,
12
16
  Schema_exports
13
- } from "./chunk-CDL5PM2Q.js";
14
-
15
- // src/implementation/authoring.ts
16
- var NativeCallback = /* @__PURE__ */ Symbol("apps.NativeCallback");
17
- var fromPromise = (callback) => (...args) => {
18
- if (NativeCallback in callback) {
19
- const native = callback[NativeCallback];
20
- return native(...args);
21
- }
22
- return Effect_exports.tryPromise({ try: () => callback(...args), catch: (error) => error });
23
- };
24
- var toPromise = (operation, signal) => {
25
- const native = (...args) => Effect_exports.suspend(() => {
26
- if (signal === void 0) return operation(...args);
27
- if (signal.aborted) return Effect_exports.interrupt;
28
- const cancelled = Effect_exports.callback((resume) => {
29
- if (signal.aborted) {
30
- resume(Effect_exports.interrupt);
31
- return;
32
- }
33
- const abort = () => resume(Effect_exports.interrupt);
34
- signal.addEventListener("abort", abort, { once: true });
35
- return Effect_exports.sync(() => signal.removeEventListener("abort", abort));
36
- });
37
- return Effect_exports.raceFirst(
38
- cancelled,
39
- Effect_exports.suspend(() => operation(...args))
40
- );
41
- });
42
- return Object.assign((...args) => Effect_exports.runPromise(native(...args)), {
43
- [NativeCallback]: native
44
- });
45
- };
17
+ } from "./chunk-ZKDXML77.js";
46
18
 
47
19
  // src/implementation/operations.ts
48
20
  var NativeOperation = /* @__PURE__ */ Symbol("apps.Operation");
@@ -64,31 +36,38 @@ var operationOptions = (options) => {
64
36
  ...options._meta === void 0 ? {} : { _meta: options._meta },
65
37
  input: decoderOf(options.input),
66
38
  ...approval === void 0 ? {} : {
67
- approval: (context) => Effect_exports.tryPromise({ try: async () => approval(context), catch: (error) => error })
39
+ approval: (context) => fromPromise(async () => approval(context), "approval")()
68
40
  }
69
41
  };
70
42
  };
71
- var withApproval = (operation, approval) => ({
72
- ...operation,
73
- [NativeOperation]: {
74
- ...operation[NativeOperation],
75
- approval: (context) => Effect_exports.tryPromise({ try: async () => approval(context), catch: (error) => error })
43
+ var approvedOperation = (operation, approval) => {
44
+ const copy = Object.defineProperties({}, Object.getOwnPropertyDescriptors(operation));
45
+ return Object.defineProperty(copy, "approval", {
46
+ enumerable: true,
47
+ value: (context) => fromPromise(async () => approval(context), "approval")()
48
+ });
49
+ };
50
+ var withApproval = (operation, approval) => (
51
+ // SAFETY: `Approved` is a type-only mark; the native operation now carries the approval.
52
+ {
53
+ ...operation,
54
+ [NativeOperation]: approvedOperation(operation[NativeOperation], approval)
76
55
  }
77
- });
56
+ );
57
+ var toolAnnotations = (operation) => nativeOperation(operation)?.annotations;
78
58
  var make = (kind, options, run) => operationDeclaration({
79
- ...operationOptions(options),
59
+ ...operationOptions({ ...options, input: schemaArgument(options.input, `The ${kind} input`) }),
80
60
  kind,
81
61
  // The host always validates JSON serialization, even without a stronger output declaration.
82
- ...options.output === void 0 ? {} : { output: decoderOf(options.output) },
83
- run: (context, input) => Effect_exports.tryPromise({
84
- // SAFETY: defineApp checks the handler context against its requirements.
85
- // The host validates account bindings and creates the matching storage facade.
86
- try: () => run(context, input),
87
- catch: (error) => error
88
- })
62
+ ...options.output === void 0 ? {} : { output: decoderOf(schemaArgument(options.output, `The ${kind} output`)) },
63
+ // SAFETY: defineApp checks the handler context against its requirements.
64
+ // The host validates account bindings and creates the matching storage facade.
65
+ run: (context, input) => fromPromise(run, "handler")(context, input)
89
66
  });
90
67
  var query = (options, run) => make("query", options, run);
91
- var mutation = (options, run) => make("mutation", options, run);
68
+ function mutation(options, run) {
69
+ return make("mutation", options, run);
70
+ }
92
71
 
93
72
  // src/implementation/router.ts
94
73
  var routerDeclaration = (node) => ({
@@ -133,14 +112,14 @@ var dynamicRouter = (source) => {
133
112
  return routerDeclaration({
134
113
  kind: "dynamic",
135
114
  ...meta === void 0 ? {} : {
136
- meta: () => fromPromise(async () => meta())().pipe(
115
+ meta: () => fromPromise(async () => meta(), "router")().pipe(
137
116
  Effect_exports.flatMap((options) => Schema_exports.decodeUnknownEffect(RouterMeta)(options))
138
117
  )
139
118
  },
140
- list: () => fromPromise(async () => source.list())().pipe(
119
+ list: () => fromPromise(async () => source.list(), "router")().pipe(
141
120
  Effect_exports.flatMap(Schema_exports.decodeUnknownEffect(Schema_exports.Array(HostedTool)))
142
121
  ),
143
- resolve: (name) => fromPromise(async () => source.resolve(name))().pipe(
122
+ resolve: (name) => fromPromise(async () => source.resolve(name), "router")().pipe(
144
123
  Effect_exports.map((value) => {
145
124
  if (value === void 0) return void 0;
146
125
  const operation = nativeOperation(value);
@@ -189,13 +168,87 @@ var declaredOperations = (root, path = "") => Object.entries(root?.children ?? {
189
168
  return [];
190
169
  }
191
170
  });
171
+ var withApprovals = (source, policy) => {
172
+ const native = nativeRouter(source);
173
+ if (native === void 0) throw new Error("withApprovals expects a router");
174
+ const operation = (node, name) => {
175
+ const approval = policy(operationDeclaration(node), name);
176
+ return approval === void 0 ? node : approvedOperation(node, approval);
177
+ };
178
+ const child = (node, name) => {
179
+ switch (node.kind) {
180
+ case "query":
181
+ case "mutation":
182
+ return operation(node, name);
183
+ case "router":
184
+ case "dynamic":
185
+ return walk(node, name);
186
+ }
187
+ };
188
+ const walk = (node, path) => node.kind === "dynamic" ? {
189
+ ...node,
190
+ resolve: (name) => node.resolve(name).pipe(
191
+ Effect_exports.flatMap(
192
+ (resolved) => resolved === void 0 ? Effect_exports.succeed(void 0) : Effect_exports.try({
193
+ try: () => operation(resolved, joinPath(path, name)),
194
+ catch: (error) => error
195
+ })
196
+ )
197
+ )
198
+ } : {
199
+ ...node,
200
+ children: Object.fromEntries(
201
+ Object.entries(node.children).map(([key, value]) => [
202
+ key,
203
+ child(value, joinPath(path, key))
204
+ ])
205
+ )
206
+ };
207
+ return routerDeclaration(walk(native, ""));
208
+ };
209
+ var renameTools = (source, rename) => {
210
+ const native = nativeRouter(source);
211
+ if (native?.kind !== "dynamic") throw new Error("renameTools expects a protocol router");
212
+ const exposed = (tools) => {
213
+ const seen = /* @__PURE__ */ new Set();
214
+ return tools.flatMap((tool) => {
215
+ const name = rename(tool.name);
216
+ if (name === void 0 || seen.has(name)) return [];
217
+ seen.add(name);
218
+ return [{ ...tool, name, source: tool.name }];
219
+ });
220
+ };
221
+ const listed = native.summaries ?? native.list;
222
+ const original = (name) => listed().pipe(Effect_exports.map((tools) => exposed(tools).find((tool) => tool.name === name)?.source));
223
+ const strip = ({
224
+ source: _source,
225
+ ...tool
226
+ }) => tool;
227
+ return routerDeclaration({
228
+ ...native,
229
+ list: () => native.list().pipe(Effect_exports.map((tools) => exposed(tools).map(strip))),
230
+ ...native.summaries === void 0 ? {} : {
231
+ summaries: () => listed().pipe(Effect_exports.map((tools) => exposed(tools).map(strip)))
232
+ },
233
+ describe: (name) => original(name).pipe(
234
+ Effect_exports.flatMap(
235
+ (found) => found === void 0 ? Effect_exports.succeed(void 0) : native.describe?.(found) ?? native.list().pipe(Effect_exports.map((tools) => tools.find((tool) => tool.name === found)))
236
+ ),
237
+ Effect_exports.map((tool) => tool === void 0 ? void 0 : { ...tool, name })
238
+ ),
239
+ resolve: (name) => original(name).pipe(
240
+ Effect_exports.flatMap(
241
+ (found) => found === void 0 ? Effect_exports.succeed(void 0) : native.resolve(found)
242
+ )
243
+ )
244
+ });
245
+ };
192
246
 
193
247
  export {
194
- fromPromise,
195
- toPromise,
196
248
  operationDeclaration,
197
249
  nativeOperation,
198
250
  withApproval,
251
+ toolAnnotations,
199
252
  query,
200
253
  mutation,
201
254
  routerDeclaration,
@@ -205,5 +258,7 @@ export {
205
258
  dynamicRouter,
206
259
  joinPath,
207
260
  locate,
208
- declaredOperations
261
+ declaredOperations,
262
+ withApprovals,
263
+ renameTools
209
264
  };
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  fixedRouter
3
- } from "./chunk-FL2QR3XW.js";
3
+ } from "./chunk-QI66R4FP.js";
4
4
  import {
5
5
  nativeOperation,
6
6
  operationDeclaration,
7
7
  routerDeclaration
8
- } from "./chunk-Z5M2LQOZ.js";
8
+ } from "./chunk-2CURR5Y7.js";
9
9
 
10
10
  // src/implementation/protocol-operations.ts
11
11
  var protocolOperations = (operations, kinds = {}) => {
@@ -18,10 +18,11 @@ var protocolOperations = (operations, kinds = {}) => {
18
18
  ...operation.annotations === void 0 ? {} : { annotations: operation.annotations },
19
19
  ...operation._meta === void 0 ? {} : { _meta: operation._meta },
20
20
  input: operation.input,
21
+ ...operation.output === void 0 ? {} : { output: operation.output },
21
22
  run: operation.run
22
23
  };
23
24
  const output = Object.getOwnPropertyDescriptor(operation, "outputSchema");
24
- const withOutput = (target) => output === void 0 || output.get === void 0 && output.value === void 0 ? target : Object.defineProperty(target, "outputSchema", { ...output, enumerable: true });
25
+ const withOutput = (target) => operation.output !== void 0 || output === void 0 || output.get === void 0 && output.value === void 0 ? target : Object.defineProperty(target, "outputSchema", { ...output, enumerable: true });
25
26
  declared[name] = operationDeclaration(withOutput({ ...native, kind }));
26
27
  }
27
28
  return declared;
@@ -1,6 +1,49 @@
1
1
  import {
2
+ RecordedMessage
3
+ } from "./chunk-OWN3DP2W.js";
4
+ import {
5
+ SchemaGetter_exports,
2
6
  Schema_exports
3
- } from "./chunk-CDL5PM2Q.js";
7
+ } from "./chunk-ZKDXML77.js";
8
+
9
+ // ../utils/src/api-error.ts
10
+ var MessageField = Schema_exports.String.pipe(
11
+ Schema_exports.decodeTo(Schema_exports.optionalKey(Schema_exports.String), {
12
+ decode: SchemaGetter_exports.omit(),
13
+ encode: SchemaGetter_exports.passthrough()
14
+ })
15
+ );
16
+ function withFields(definition) {
17
+ const fields = definition.fields;
18
+ const message = definition.message;
19
+ const documentation = typeof message === "string" ? { description: message } : {};
20
+ const DefinedError = Schema_exports.Error(definition.tag)(
21
+ Schema_exports.TaggedStruct(definition.tag, { ...fields, message: MessageField }).annotate(
22
+ documentation
23
+ ),
24
+ { httpApiStatus: definition.status, ...documentation }
25
+ );
26
+ const recorded = definition.recorded ?? (typeof message === "string" ? () => message : void 0);
27
+ Object.defineProperties(DefinedError.prototype, {
28
+ message: {
29
+ get() {
30
+ return typeof message === "string" ? message : message(this);
31
+ }
32
+ },
33
+ ...recorded === void 0 ? {} : {
34
+ [RecordedMessage]: {
35
+ get() {
36
+ return recorded(this);
37
+ }
38
+ }
39
+ }
40
+ });
41
+ return DefinedError;
42
+ }
43
+ function define(definition) {
44
+ return "fields" in definition ? withFields(definition) : withFields({ ...definition, fields: {} });
45
+ }
46
+ var ApiError = { define };
4
47
 
5
48
  // src/contracts/skills.ts
6
49
  var SkillFilePath = Schema_exports.NonEmptyString.check(
@@ -45,9 +88,18 @@ var AppSkillSource = Schema_exports.Struct({
45
88
  )
46
89
  )
47
90
  });
48
- var SkillDefinitionInvalid = class extends Schema_exports.TaggedError()(
49
- "SkillDefinitionInvalid",
50
- {
91
+ var skillDefinitionFailures = {
92
+ files: (file) => `The skill files of \u201C${file}\u201D are invalid: each needs a unique relative path, text content and a SKILL.md document.`,
93
+ directory: (file) => `\u201C${file}\u201D is not a valid skill directory. Skill directory names use lowercase letters and digits separated by single hyphens.`,
94
+ "missing-document": (file) => `\u201C${file}\u201D is missing.`,
95
+ frontmatter: (file) => `\u201C${file}\u201D must start with valid YAML frontmatter between --- lines.`,
96
+ metadata: (file) => `The frontmatter of \u201C${file}\u201D needs a valid name and description within the Agent Skills limits.`,
97
+ "name-mismatch": (file) => `The name in \u201C${file}\u201D does not match its skill directory.`
98
+ };
99
+ var SkillDefinitionInvalid = ApiError.define({
100
+ tag: "SkillDefinitionInvalid",
101
+ status: 400,
102
+ fields: {
51
103
  file: SkillFilePath,
52
104
  reason: Schema_exports.Literals([
53
105
  "files",
@@ -58,14 +110,14 @@ var SkillDefinitionInvalid = class extends Schema_exports.TaggedError()(
58
110
  "name-mismatch"
59
111
  ])
60
112
  },
61
- { httpApiStatus: 400 }
62
- ) {
63
- };
113
+ message: ({ file, reason }) => skillDefinitionFailures[reason](file),
114
+ recorded: ({ reason }) => `The app's skill definition is invalid (${reason})`
115
+ });
64
116
  var AppSkills = Schema_exports.Array(AppSkillSource).check(
65
117
  Schema_exports.makeFilter((skills) => new Set(skills.map((skill) => skill.name)).size === skills.length)
66
118
  );
67
119
  var SkillServiceName = Schema_exports.String.check(
68
- Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/)
120
+ Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/u)
69
121
  );
70
122
  var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFailed", {
71
123
  reason: Schema_exports.Literals([
@@ -79,14 +131,17 @@ var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFaile
79
131
  ]),
80
132
  // Error instances read an omitted message as "", so an empty message means none was given.
81
133
  message: Schema_exports.optional(Schema_exports.String.check(Schema_exports.isMaxLength(500))),
82
- status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 })))
134
+ status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 }))),
135
+ missing: Schema_exports.optional(Schema_exports.Literals(["repository", "ref"]))
83
136
  }) {
84
137
  };
85
138
  var skillLoadLimits = {
86
139
  files: 1e3,
87
140
  fileBytes: 2e6,
88
141
  totalBytes: 2e7,
89
- concurrency: 8
142
+ concurrency: 8,
143
+ /** The request that checks whether a kept catalog's publication changed. */
144
+ checkMillis: 5e3
90
145
  };
91
146
 
92
147
  export {