apps 0.0.1-beta.11 → 0.0.1-beta.110

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 (197) hide show
  1. package/README.md +60 -42
  2. package/framework-reference.json +1 -1
  3. package/js/chunk-2RGJMA7N.js +5186 -0
  4. package/js/chunk-3BI34I5S.js +449 -0
  5. package/js/chunk-3BOEMXAJ.js +713 -0
  6. package/js/{chunk-JU7VHODU.js → chunk-4PIQKACY.js} +65 -10
  7. package/js/{chunk-VFZKSM3T.js → chunk-4X2UI4R2.js} +3 -3
  8. package/js/{chunk-KUMBKVJD.js → chunk-62NVUKED.js} +2 -2
  9. package/js/chunk-74H25C4X.js +95 -0
  10. package/js/chunk-7HG422GB.js +90 -0
  11. package/js/{chunk-UK573G7W.js → chunk-ACQXVKVQ.js} +87 -51
  12. package/js/chunk-BKIQCV72.js +994 -0
  13. package/js/{chunk-IJX4CYZO.js → chunk-DILSCQPJ.js} +228 -264
  14. package/js/chunk-HLMJBE4T.js +49 -0
  15. package/js/{chunk-RELFXUOO.js → chunk-JCX2K2SI.js} +931 -289
  16. package/js/{chunk-M3B3DE4K.js → chunk-KLSEU35Y.js} +463 -218
  17. package/js/chunk-OD3KFKZD.js +1617 -0
  18. package/js/chunk-OIH73VFM.js +175 -0
  19. package/js/chunk-OWN3DP2W.js +88 -0
  20. package/js/{chunk-IPI4MFSN.js → chunk-PBGPES67.js} +2 -2
  21. package/js/{chunk-WVVV4TX2.js → chunk-RIV62DRM.js} +4 -3
  22. package/js/{chunk-RFVIONFX.js → chunk-SXQVVXJE.js} +123 -44
  23. package/js/chunk-UPTAFF6L.js +335 -0
  24. package/js/{chunk-ODEIDRGW.js → chunk-URKOTNDA.js} +795 -176
  25. package/js/{chunk-5T57N25Q.js → chunk-VAI3EVCS.js} +643 -69
  26. package/js/{chunk-57RKNWL2.js → chunk-YDW7DX3A.js} +4 -4
  27. package/js/{chunk-CDL5PM2Q.js → chunk-ZKDXML77.js} +19239 -18404
  28. package/js/{chunk-GPFVWWDZ.js → chunk-ZXG7RMCB.js} +113 -58
  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 +231 -188
  34. package/js/host.js +116 -78
  35. package/js/index.js +213 -98
  36. package/js/mcp/effect.js +21 -21
  37. package/js/mcp.js +91 -57
  38. package/js/openapi.js +4349 -1415
  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 +40 -2
  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 +6869 -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 +85 -6
  87. package/types/apps/src/contracts/router.d.ts +2 -1
  88. package/types/apps/src/contracts/schedules.d.ts +7 -1
  89. package/types/apps/src/contracts/schema.d.ts +21 -0
  90. package/types/apps/src/contracts/shared-catalog.d.ts +11 -0
  91. package/types/apps/src/contracts/skills.d.ts +50 -13
  92. package/types/apps/src/contracts/sql.d.ts +63 -0
  93. package/types/apps/src/contracts/ui.d.ts +70 -30
  94. package/types/apps/src/contracts/webhooks.d.ts +24 -7
  95. package/types/apps/src/contracts/workflows.d.ts +56 -34
  96. package/types/apps/src/facet.d.ts +4 -5
  97. package/types/apps/src/host.d.ts +5 -0
  98. package/types/apps/src/implementation/account-router.d.ts +4 -3
  99. package/types/apps/src/implementation/app.d.ts +41 -14
  100. package/types/apps/src/implementation/authoring.d.ts +25 -5
  101. package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
  102. package/types/apps/src/implementation/cache.d.ts +29 -2
  103. package/types/apps/src/implementation/catalog-cache.d.ts +35 -4
  104. package/types/apps/src/implementation/elicitation.d.ts +18 -15
  105. package/types/apps/src/implementation/events.d.ts +64 -0
  106. package/types/apps/src/implementation/failure-detail.d.ts +28 -5
  107. package/types/apps/src/implementation/graphql-catalog.d.ts +3 -3
  108. package/types/apps/src/implementation/graphql.d.ts +4 -3
  109. package/types/apps/src/implementation/input-problems.d.ts +6 -2
  110. package/types/apps/src/implementation/invocation-timing.d.ts +18 -0
  111. package/types/apps/src/implementation/live.d.ts +2 -2
  112. package/types/apps/src/implementation/mcp-call.d.ts +6 -5
  113. package/types/apps/src/implementation/mcp-catalog.d.ts +6 -4
  114. package/types/apps/src/implementation/mcp-client.d.ts +17 -9
  115. package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
  116. package/types/apps/src/implementation/mcp.d.ts +20 -9
  117. package/types/apps/src/implementation/network.d.ts +16 -0
  118. package/types/apps/src/implementation/openapi-compile.d.ts +38 -7
  119. package/types/apps/src/implementation/openapi-document.d.ts +50 -20
  120. package/types/apps/src/implementation/openapi-names.d.ts +9 -4
  121. package/types/apps/src/implementation/openapi-request.d.ts +10 -2
  122. package/types/apps/src/implementation/openapi-source.d.ts +23 -1
  123. package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
  124. package/types/apps/src/implementation/operations.d.ts +58 -7
  125. package/types/apps/src/implementation/optimistic.d.ts +1 -1
  126. package/types/apps/src/implementation/placement.d.ts +60 -0
  127. package/types/apps/src/implementation/protocol-operations.d.ts +3 -0
  128. package/types/apps/src/implementation/provider-error.d.ts +28 -1
  129. package/types/apps/src/implementation/provider.d.ts +19 -4
  130. package/types/apps/src/implementation/query-commit.d.ts +1 -1
  131. package/types/apps/src/implementation/router-catalog.d.ts +24 -18
  132. package/types/apps/src/implementation/router.d.ts +26 -6
  133. package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
  134. package/types/apps/src/implementation/schedules.d.ts +39 -8
  135. package/types/apps/src/implementation/schema.d.ts +108 -11
  136. package/types/apps/src/implementation/skills.d.ts +18 -24
  137. package/types/apps/src/implementation/sql.d.ts +71 -0
  138. package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
  139. package/types/apps/src/implementation/ui-auth.d.ts +1 -1
  140. package/types/apps/src/implementation/ui-client.d.ts +3 -3
  141. package/types/apps/src/implementation/ui-document.d.ts +5 -0
  142. package/types/apps/src/implementation/ui-errors.d.ts +1 -1
  143. package/types/apps/src/implementation/ui-serving.d.ts +28 -11
  144. package/types/apps/src/implementation/ui-watch.d.ts +1 -1
  145. package/types/apps/src/implementation/upstream-error.d.ts +17 -0
  146. package/types/apps/src/implementation/webhooks.d.ts +15 -6
  147. package/types/apps/src/implementation/workflow-context.d.ts +6 -2
  148. package/types/apps/src/implementation/workflows.d.ts +11 -4
  149. package/types/apps/src/index.d.ts +51 -16
  150. package/types/apps/src/mcp.d.ts +20 -1
  151. package/types/apps/src/openapi.d.ts +22 -1
  152. package/types/apps/src/react.d.ts +1 -1
  153. package/types/apps/src/skills.d.ts +10 -8
  154. package/types/apps/src/ui-serving.d.ts +1 -1
  155. package/types/telemetry/src/app-records.d.ts +42 -0
  156. package/types/telemetry/src/browser-operations.d.ts +2 -2
  157. package/types/telemetry/src/browser.d.ts +8 -3
  158. package/types/telemetry/src/config.d.ts +2 -2
  159. package/types/telemetry/src/index.d.ts +2 -1
  160. package/types/telemetry/src/layer.d.ts +10 -4
  161. package/types/telemetry/src/measurements.d.ts +1 -1
  162. package/types/telemetry/src/ownership.d.ts +60 -0
  163. package/types/telemetry/src/recorded-failure.d.ts +29 -0
  164. package/types/telemetry/src/relay.d.ts +16 -6
  165. package/types/telemetry/src/span-attributes.d.ts +17 -1
  166. package/types/telemetry/src/transport.d.ts +8 -1
  167. package/types/utils/src/api-error.d.ts +55 -0
  168. package/types/utils/src/connection-failure.d.ts +33 -0
  169. package/types/utils/src/legacy-keys.d.ts +20 -0
  170. package/types/utils/src/recorded-message.d.ts +18 -0
  171. package/types/utils/src/schema-definitions.d.ts +13 -0
  172. package/types/utils/src/user-facing-error.d.ts +83 -0
  173. package/js/chunk-27F7W2LG.js +0 -34
  174. package/js/chunk-EFAPIRVB.js +0 -299
  175. package/js/chunk-KRSCJDTW.js +0 -2668
  176. package/js/chunk-MKWZPDR6.js +0 -63
  177. package/js/chunk-N7YDVXYJ.js +0 -186
  178. package/js/chunk-NKLWZJLE.js +0 -172
  179. package/js/chunk-PJJ24GU7.js +0 -877
  180. package/js/chunk-PZB6T6KU.js +0 -19
  181. package/js/chunk-R3EV5FTO.js +0 -97
  182. package/js/chunk-TYVDBQSI.js +0 -242
  183. package/js/chunk-YBRC463S.js +0 -224
  184. package/js/chunk-Z2QY3YTF.js +0 -507
  185. package/js/chunk-ZQINWV4W.js +0 -630
  186. package/js/mcp/stdio.js +0 -128
  187. package/types/app-data/src/implementation/cursor.d.ts +0 -10
  188. package/types/app-data/src/implementation/index-key.d.ts +0 -7
  189. package/types/app-data/src/implementation/promise.d.ts +0 -68
  190. package/types/app-data/src/implementation/range.d.ts +0 -8
  191. package/types/app-data/src/implementation/schema.d.ts +0 -18
  192. package/types/app-data/src/implementation/sqlite.d.ts +0 -11
  193. package/types/app-data/src/index.d.ts +0 -4
  194. package/types/apps/src/contracts/storage.d.ts +0 -68
  195. package/types/apps/src/implementation/mcp-stdio.d.ts +0 -4
  196. package/types/apps/src/implementation/storage.d.ts +0 -15
  197. package/types/apps/src/mcp-stdio.d.ts +0 -5
@@ -1,19 +0,0 @@
1
- import {
2
- Schema_exports
3
- } from "./chunk-CDL5PM2Q.js";
4
-
5
- // src/contracts/storage.ts
6
- var StorageName = Schema_exports.NonEmptyString.check(Schema_exports.isMaxLength(200));
7
- var AppStorageUnavailable = class extends Schema_exports.TaggedError()(
8
- "AppStorageUnavailable",
9
- {}
10
- ) {
11
- };
12
- var AppStorageError = class extends Schema_exports.TaggedError()("AppStorageError", {}) {
13
- };
14
-
15
- export {
16
- StorageName,
17
- AppStorageUnavailable,
18
- AppStorageError
19
- };
@@ -1,97 +0,0 @@
1
- import {
2
- AccountId
3
- } from "./chunk-27F7W2LG.js";
4
- import {
5
- Schema_exports
6
- } from "./chunk-CDL5PM2Q.js";
7
-
8
- // src/contracts/provider-error.ts
9
- var ProviderError = class extends Schema_exports.TaggedError()("ProviderError", {
10
- reason: Schema_exports.Literals(["unauthorized", "forbidden", "rate_limited", "unavailable", "rejected"]),
11
- status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 }))),
12
- accountId: Schema_exports.optional(AccountId)
13
- }) {
14
- };
15
-
16
- // ../app-cache/src/contracts/cache.ts
17
- var CacheError = class extends Schema_exports.TaggedError()("CacheError", {
18
- reason: Schema_exports.Literals(["unavailable", "storage", "invalid", "capacity", "timeout"])
19
- }) {
20
- };
21
- var cacheLimits = {
22
- keyBytes: 8192,
23
- entryBytes: 2e6,
24
- batchBytes: 8e6,
25
- batchEntries: 128,
26
- totalBytes: 128e6,
27
- totalEntries: 1e5,
28
- retentionMs: 7 * 24 * 60 * 60 * 1e3,
29
- loadTimeoutMs: 9e4,
30
- /**
31
- * A loader's lease lapses this long after its host last renewed it. Hosts renew every
32
- * `renewMs` while the invocation that claimed it runs, so a stalled or lost holder frees the
33
- * key well inside an MCP execute budget.
34
- */
35
- leaseMs: 15e3,
36
- renewMs: 5e3,
37
- /** The longest a caller waits on another loader before loading for itself without publishing. */
38
- waitMs: 1e4,
39
- /** Bound for one command to a host store; a lost reply fails instead of holding its caller. */
40
- commandTimeoutMs: 1e4
41
- };
42
- var Key = Schema_exports.String.check(Schema_exports.isPattern(/^[a-f0-9]{64}$/));
43
- var Time = Schema_exports.Finite.check(Schema_exports.isGreaterThanOrEqualTo(0));
44
- var CacheEntry = Schema_exports.Struct({
45
- value: Schema_exports.Json,
46
- version: Schema_exports.String,
47
- freshUntil: Time,
48
- staleUntil: Time
49
- });
50
- var CacheAcquired = Schema_exports.Struct({
51
- entry: Schema_exports.NullOr(CacheEntry),
52
- lease: Schema_exports.NullOr(Schema_exports.String)
53
- });
54
- var CacheCommand = Schema_exports.Union([
55
- Schema_exports.Struct({ operation: Schema_exports.Literal("read"), keys: Schema_exports.Array(Key) }),
56
- Schema_exports.Struct({
57
- operation: Schema_exports.Literal("acquire"),
58
- key: Key,
59
- /** Claim even a fresh entry, as an explicit refresh does. */
60
- refresh: Schema_exports.Boolean,
61
- /** Claim only while the entry still has this version. Absent accepts the current one. */
62
- version: Schema_exports.optionalKey(Schema_exports.NullOr(Schema_exports.String))
63
- }),
64
- Schema_exports.Struct({
65
- operation: Schema_exports.Literal("claim"),
66
- key: Key,
67
- version: Schema_exports.NullOr(Schema_exports.String)
68
- }),
69
- Schema_exports.Struct({
70
- operation: Schema_exports.Literal("publish"),
71
- key: Key,
72
- lease: Schema_exports.String,
73
- entry: CacheEntry
74
- }),
75
- Schema_exports.Struct({ operation: Schema_exports.Literal("release"), key: Key, lease: Schema_exports.String }),
76
- /** Extend a lease its holder still owns. Replies false once the lease lapsed or was replaced. */
77
- Schema_exports.Struct({ operation: Schema_exports.Literal("renew"), key: Key, lease: Schema_exports.String }),
78
- Schema_exports.Struct({
79
- operation: Schema_exports.Literal("write"),
80
- entries: Schema_exports.Array(Schema_exports.Struct({ key: Key, entry: CacheEntry }))
81
- }),
82
- Schema_exports.Struct({ operation: Schema_exports.Literal("invalidate"), key: Key })
83
- ]);
84
- var CacheReply = Schema_exports.Union([
85
- Schema_exports.Struct({ ok: Schema_exports.Literal(true), value: Schema_exports.Json }),
86
- Schema_exports.Struct({ ok: Schema_exports.Literal(false), error: CacheError })
87
- ]);
88
-
89
- export {
90
- ProviderError,
91
- CacheError,
92
- cacheLimits,
93
- CacheEntry,
94
- CacheAcquired,
95
- CacheCommand,
96
- CacheReply
97
- };
@@ -1,242 +0,0 @@
1
- import {
2
- promiseTable
3
- } from "./chunk-ZQINWV4W.js";
4
- import {
5
- declaredOperations,
6
- fromPromise,
7
- nativeOperation,
8
- nativeRouter
9
- } from "./chunk-GPFVWWDZ.js";
10
- import {
11
- ScheduleTiming
12
- } from "./chunk-KRSCJDTW.js";
13
- import {
14
- DatabaseSchema
15
- } from "./chunk-N7YDVXYJ.js";
16
- import {
17
- decoderOf,
18
- isSchema,
19
- storageFieldOf
20
- } from "./chunk-5T57N25Q.js";
21
- import {
22
- AppStorageUnavailable
23
- } from "./chunk-PZB6T6KU.js";
24
- import {
25
- JsonValue
26
- } from "./chunk-27F7W2LG.js";
27
- import {
28
- Effect_exports,
29
- Schema_exports
30
- } from "./chunk-CDL5PM2Q.js";
31
-
32
- // src/contracts/http.ts
33
- var ResponseStatusError = class extends Schema_exports.TaggedError()(
34
- "ResponseStatusError",
35
- { status: Schema_exports.Number }
36
- ) {
37
- get message() {
38
- return `Request failed with status ${this.status}`;
39
- }
40
- };
41
- var ResponseDecodeError = class extends Schema_exports.TaggedError()(
42
- "ResponseDecodeError",
43
- {}
44
- ) {
45
- get message() {
46
- return "Response body did not match the expected schema";
47
- }
48
- };
49
-
50
- // src/implementation/workflows.ts
51
- var NativeWorkflow = /* @__PURE__ */ Symbol("apps.Workflow");
52
- var workflow = (options, run) => ({
53
- [NativeWorkflow]: {
54
- input: decoderOf(options.input),
55
- ...options.output === void 0 ? {} : { output: decoderOf(options.output) },
56
- ...options.description === void 0 ? {} : { description: options.description },
57
- run: (context, input) => Effect_exports.tryPromise({
58
- // SAFETY: defineApp checks required context; the host supplies the pinned run's capabilities.
59
- try: () => run(context, input),
60
- catch: (error) => error
61
- })
62
- }
63
- });
64
- var nativeWorkflow = (value) => {
65
- if (typeof value !== "object" || value === null || !(NativeWorkflow in value)) return void 0;
66
- return value[NativeWorkflow];
67
- };
68
-
69
- // src/implementation/app.ts
70
- var InternalApp = /* @__PURE__ */ Symbol("apps.App");
71
- var isApp = (value) => typeof value === "object" && value !== null && InternalApp in value;
72
- var toEffectApp = (app) => app[InternalApp];
73
- function rejectCatalogs(definition) {
74
- if ("queries" in definition || "mutations" in definition)
75
- throw new Error("Put queries and mutations in a router under tools");
76
- }
77
- function adaptDefinition(definition) {
78
- rejectCatalogs(definition);
79
- const webhooks = definition.webhooks === void 0 ? {} : {
80
- webhooks: Object.fromEntries(
81
- Object.entries(definition.webhooks).map(([name, webhook]) => [
82
- name,
83
- {
84
- ...webhook,
85
- ...webhook.register === void 0 ? {} : { register: fromPromise(webhook.register) },
86
- handle: fromPromise(webhook.handle),
87
- ...webhook.unregister === void 0 ? {} : { unregister: fromPromise(webhook.unregister) },
88
- ..."config" in webhook && isSchema(webhook.config) ? { config: decoderOf(webhook.config) } : {},
89
- ..."state" in webhook && isSchema(webhook.state) ? { state: decoderOf(webhook.state) } : {}
90
- }
91
- ])
92
- )
93
- };
94
- const workflows = definition.workflows === void 0 ? {} : {
95
- workflows: Object.fromEntries(
96
- Object.entries(definition.workflows).map(([name, value]) => {
97
- const declared2 = nativeWorkflow(value);
98
- if (declared2 === void 0) throw new Error("Invalid workflow declaration");
99
- return [name, declared2];
100
- })
101
- )
102
- };
103
- const root = definition.tools === void 0 ? void 0 : nativeRouter(definition.tools);
104
- if (definition.tools !== void 0 && root === void 0)
105
- throw new Error("tools must be a router");
106
- const data = root === void 0 ? {} : { tools: root };
107
- const declared = root?.kind === "router" ? declaredOperations(root) : [];
108
- const mutations = /* @__PURE__ */ new Set();
109
- for (const { operation } of declared) {
110
- if (operation.kind !== "mutation") continue;
111
- if (mutations.has(operation))
112
- throw new Error("A mutation can be mounted at only one path in tools");
113
- mutations.add(operation);
114
- }
115
- const schedules = definition.schedules === void 0 ? {} : {
116
- schedules: Object.fromEntries(
117
- Object.entries(definition.schedules).map(([name, schedule]) => {
118
- const target = nativeOperation(schedule.operation);
119
- const match = declared.find(
120
- ({ operation }) => operation === target && operation.kind === "mutation"
121
- );
122
- if (match === void 0)
123
- throw new Error("A schedule must reference a mutation in this app's tools");
124
- return [
125
- name,
126
- {
127
- timing: Schema_exports.decodeUnknownSync(ScheduleTiming)(schedule.timing),
128
- input: Schema_exports.decodeUnknownSync(JsonValue)(schedule.input),
129
- tool: match.name
130
- }
131
- ];
132
- })
133
- )
134
- };
135
- return {
136
- ...definition,
137
- ...webhooks,
138
- ...workflows,
139
- ...data,
140
- ...schedules
141
- };
142
- }
143
- var defineApp = (requirements, definition) => {
144
- if (typeof definition !== "function") rejectCatalogs(definition);
145
- const evaluate = typeof definition === "function" ? definition : async () => definition;
146
- const factory = fromPromise(evaluate);
147
- const native = {
148
- accounts: requirements.accounts,
149
- ...requirements.database === void 0 ? {} : { database: requirements.database },
150
- evaluate: (context) => factory(context).pipe(Effect_exports.map((value) => adaptDefinition(value)))
151
- };
152
- return {
153
- [InternalApp]: native,
154
- accounts: native.accounts,
155
- evaluate: (context) => Effect_exports.runPromise(factory(context))
156
- };
157
- };
158
-
159
- // src/implementation/storage.ts
160
- var table = (fields) => tableWithIndexes(fields, []);
161
- var tableWithIndexes = (fields, indexes) => ({
162
- fields,
163
- indexes,
164
- index: (name, fieldsInIndex) => tableWithIndexes(fields, [...indexes, { name, fields: fieldsInIndex }])
165
- });
166
- var serialize = (tables) => {
167
- const definitions = Object.fromEntries(
168
- Object.entries(tables).map(([name, table2]) => [
169
- name,
170
- {
171
- fields: Object.fromEntries(
172
- Object.entries(table2.fields).map(([fieldName, schema]) => {
173
- const field = storageFieldOf(schema);
174
- if (field === void 0) throw new Error("Database columns must use a scalar schema");
175
- return [fieldName, field];
176
- })
177
- ),
178
- indexes: table2.indexes
179
- }
180
- ])
181
- );
182
- return Schema_exports.decodeUnknownSync(DatabaseSchema)(definitions);
183
- };
184
- var authorDatabase = (tables, session, signal, writable) => {
185
- return Object.fromEntries(
186
- Object.entries(tables).map(([name, table2]) => {
187
- const api = promiseTable(session, name, signal);
188
- const parseFields = (input, partial) => {
189
- const values = Schema_exports.decodeUnknownSync(
190
- Schema_exports.Record(Schema_exports.String, Schema_exports.Unknown)
191
- )(input);
192
- const fields = {};
193
- for (const [key, value] of Object.entries(values)) {
194
- if (value === void 0) continue;
195
- const field = Object.hasOwn(table2.fields, key) ? table2.fields[key] : void 0;
196
- if (field === void 0) throw new Error("Unknown database column");
197
- const definition = storageFieldOf(field);
198
- fields[key] = value === null && definition?.optional ? null : field.parse(value);
199
- }
200
- if (!partial) {
201
- for (const [key, field] of Object.entries(table2.fields))
202
- if (!Object.hasOwn(fields, key)) {
203
- const value = field.parse(void 0);
204
- if (value !== void 0) fields[key] = value;
205
- }
206
- }
207
- return fields;
208
- };
209
- const read = { get: api.get, withIndex: api.withIndex };
210
- return [
211
- name,
212
- writable ? {
213
- ...read,
214
- insert: (value) => api.insert(parseFields(value, false)),
215
- update: (id, value) => api.update(id, parseFields(value, true)),
216
- delete: api.delete
217
- } : read
218
- ];
219
- })
220
- );
221
- };
222
- var defineDatabase = (tables) => ({
223
- schema: serialize(tables),
224
- tables
225
- });
226
- var unavailableStorage = {
227
- read: () => Effect_exports.fail(new AppStorageUnavailable()),
228
- mutate: () => Effect_exports.fail(new AppStorageUnavailable())
229
- };
230
-
231
- export {
232
- ResponseStatusError,
233
- ResponseDecodeError,
234
- workflow,
235
- isApp,
236
- toEffectApp,
237
- defineApp,
238
- table,
239
- authorDatabase,
240
- defineDatabase,
241
- unavailableStorage
242
- };
@@ -1,224 +0,0 @@
1
- import {
2
- adaptMcpTools,
3
- mcpClient,
4
- mcpJsonSchemaValidator
5
- } from "./chunk-EFAPIRVB.js";
6
- import {
7
- accountProviderError,
8
- httpProviderError
9
- } from "./chunk-MKWZPDR6.js";
10
- import {
11
- McpError,
12
- McpToolsOptions,
13
- defaultMcpClientLimits
14
- } from "./chunk-KRSCJDTW.js";
15
- import {
16
- ProviderError
17
- } from "./chunk-R3EV5FTO.js";
18
- import {
19
- captureTelemetry
20
- } from "./chunk-ODEIDRGW.js";
21
- import {
22
- FetchHttpClient_exports
23
- } from "./chunk-57RKNWL2.js";
24
- import {
25
- HttpClientRequest_exports,
26
- HttpClient_exports
27
- } from "./chunk-UK573G7W.js";
28
- import {
29
- Deferred_exports,
30
- Effect_exports,
31
- Redacted_exports,
32
- Schema_exports,
33
- Stream_exports
34
- } from "./chunk-CDL5PM2Q.js";
35
-
36
- // src/implementation/mcp.ts
37
- import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js";
38
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
39
- import {
40
- ErrorCode,
41
- McpError as ProtocolError,
42
- ToolListChangedNotificationSchema
43
- } from "@modelcontextprotocol/sdk/types.js";
44
- import { SSEClientTransport, SseError } from "@modelcontextprotocol/sdk/client/sse.js";
45
- import {
46
- StreamableHTTPClientTransport,
47
- StreamableHTTPError
48
- } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
49
- var failure = (phase, error) => {
50
- if (Schema_exports.is(ProviderError)(error) || Schema_exports.is(McpError)(error)) return error;
51
- const status = error instanceof UnauthorizedError ? 401 : error instanceof StreamableHTTPError || error instanceof SseError ? error.code : void 0;
52
- const provider = status === void 0 ? void 0 : httpProviderError(status);
53
- if (provider !== void 0) return provider;
54
- return new McpError({
55
- phase,
56
- reason: error instanceof ProtocolError && error.code === ErrorCode.RequestTimeout ? "timeout" : "request",
57
- ...status === void 0 ? {} : { status }
58
- });
59
- };
60
- var transportFetch = (connection, telemetry, rejected) => (url, init) => Effect_exports.runPromiseWith(telemetry.context)(
61
- Effect_exports.gen(function* () {
62
- const target = yield* Effect_exports.try({
63
- try: () => new URL(url),
64
- catch: () => new McpError({ phase: "transport", reason: "invalid_response" })
65
- });
66
- if (connection.url.username || connection.url.password)
67
- return yield* new McpError({ phase: "transport", reason: "invalid_input" });
68
- if (target.origin !== connection.url.origin || target.username || target.password)
69
- return yield* new McpError({ phase: "transport", reason: "invalid_response" });
70
- const headers = new Headers(Redacted_exports.value(connection.headers));
71
- new Headers(init?.headers).forEach((value, name) => headers.set(name, value));
72
- const request = yield* Effect_exports.try({
73
- try: () => HttpClientRequest_exports.fromWeb(new Request(target, { ...init, headers })),
74
- catch: () => failure("transport", void 0)
75
- });
76
- const client = yield* HttpClient_exports.HttpClient;
77
- const response = yield* client.execute(request);
78
- const provider = httpProviderError(response.status, response.headers);
79
- if (provider !== void 0) {
80
- yield* Deferred_exports.fail(rejected, provider);
81
- return yield* provider;
82
- }
83
- return new Response(
84
- [204, 205, 304].includes(response.status) ? null : Stream_exports.toReadableStream(response.stream),
85
- {
86
- status: response.status,
87
- headers: response.headers
88
- }
89
- );
90
- }).pipe(
91
- Effect_exports.provide(FetchHttpClient_exports.layer),
92
- Effect_exports.provideService(FetchHttpClient_exports.RequestInit, { redirect: "manual" }),
93
- Effect_exports.provideService(
94
- FetchHttpClient_exports.Fetch,
95
- (url2, options) => globalThis.fetch(url2, {
96
- ...options,
97
- signal: AbortSignal.any([
98
- ...options?.signal ? [options.signal] : [],
99
- ...init?.signal ? [init.signal] : []
100
- ])
101
- })
102
- ),
103
- Effect_exports.mapError((error) => failure("transport", error))
104
- ),
105
- init?.signal ? { signal: init.signal } : {}
106
- );
107
- function withClient(connection, mode, use, changed) {
108
- const attempt = (kind) => Effect_exports.scoped(
109
- Effect_exports.gen(function* () {
110
- const telemetry = yield* captureTelemetry;
111
- const rejected = yield* Deferred_exports.make();
112
- const pending = /* @__PURE__ */ new Set();
113
- const { client, transport } = yield* Effect_exports.acquireRelease(
114
- Effect_exports.sync(() => {
115
- const fetch = transportFetch(connection, telemetry, rejected);
116
- const client2 = new Client(
117
- { name: "executor-apps", version: "0.1.0" },
118
- {
119
- jsonSchemaValidator: mcpJsonSchemaValidator,
120
- capabilities: mode === "call" ? { elicitation: { form: {} } } : {}
121
- }
122
- );
123
- if (changed !== void 0) {
124
- client2.setNotificationHandler(ToolListChangedNotificationSchema, () => {
125
- const task = Effect_exports.runPromiseWith(telemetry.context)(
126
- changed.pipe(
127
- Effect_exports.timeout("5 seconds"),
128
- Effect_exports.catchCause(() => Effect_exports.logWarning("MCP catalog invalidation failed"))
129
- )
130
- );
131
- pending.add(task);
132
- return task.finally(() => pending.delete(task));
133
- });
134
- }
135
- return {
136
- client: client2,
137
- transport: kind === "http" ? new StreamableHTTPClientTransport(connection.url, {
138
- fetch,
139
- reconnectionOptions: {
140
- maxRetries: 0,
141
- initialReconnectionDelay: 1e3,
142
- maxReconnectionDelay: 1e3,
143
- reconnectionDelayGrowFactor: 1
144
- }
145
- }) : new SSEClientTransport(connection.url, { fetch })
146
- };
147
- }),
148
- ({ client: client2, transport: transport2 }) => Effect_exports.gen(function* () {
149
- client2.removeNotificationHandler("notifications/tools/list_changed");
150
- yield* Effect_exports.promise(async () => {
151
- await Promise.allSettled(pending);
152
- });
153
- if (transport2 instanceof StreamableHTTPClientTransport && transport2.sessionId !== void 0) {
154
- yield* Effect_exports.tryPromise(() => transport2.terminateSession()).pipe(
155
- Effect_exports.timeout(defaultMcpClientLimits.cleanupTimeoutMs),
156
- Effect_exports.ignore
157
- );
158
- }
159
- yield* Effect_exports.tryPromise(() => client2.close()).pipe(
160
- Effect_exports.timeout(defaultMcpClientLimits.cleanupTimeoutMs),
161
- Effect_exports.ignore
162
- );
163
- }).pipe(Effect_exports.withSpan("provider.mcp.close"))
164
- );
165
- const wire = transport;
166
- yield* Effect_exports.tryPromise({
167
- try: (signal) => client.connect(wire, { signal, timeout: connection.timeoutMs }),
168
- catch: (error) => failure("connect", error)
169
- }).pipe(
170
- Effect_exports.raceFirst(Deferred_exports.await(rejected)),
171
- Effect_exports.timeout(connection.timeoutMs),
172
- Effect_exports.withSpan("provider.mcp.connect")
173
- );
174
- return yield* use(client).pipe(Effect_exports.raceFirst(Deferred_exports.await(rejected)));
175
- })
176
- ).pipe(
177
- Effect_exports.withSpan("provider.mcp.session", {
178
- attributes: {
179
- "mcp.transport": kind,
180
- "mcp.operation": mode,
181
- "server.address": connection.url.hostname
182
- }
183
- })
184
- );
185
- return attempt("http").pipe(
186
- // Fallback is only for negotiation. Tool calls are never automatically replayed.
187
- Effect_exports.catch(
188
- (error) => Schema_exports.is(McpError)(error) && error.phase === "connect" && (error.status === 404 || error.status === 405) ? attempt("sse") : Effect_exports.fail(error)
189
- ),
190
- (operation) => mode === "discover" ? operation.pipe(Effect_exports.timeout(connection.timeoutMs)) : operation,
191
- Effect_exports.catchTag(
192
- "TimeoutError",
193
- () => Effect_exports.fail(new McpError({ phase: "transport", reason: "timeout" }))
194
- )
195
- );
196
- }
197
- var mcpClientEffect = (input, changed) => Effect_exports.gen(function* () {
198
- const options = yield* Schema_exports.decodeUnknownEffect(McpToolsOptions)(input).pipe(
199
- Effect_exports.mapError(() => new McpError({ phase: "connect", reason: "invalid_input" }))
200
- );
201
- const url = new URL(options.url);
202
- if (url.username || url.password || url.hash)
203
- return yield* new McpError({ phase: "connect", reason: "invalid_input" });
204
- const connection = {
205
- url,
206
- headers: Redacted_exports.make({ ...options.headers }),
207
- timeoutMs: options.timeoutMs ?? defaultMcpClientLimits.timeoutMs
208
- };
209
- return mcpClient(
210
- (mode, use) => withClient(connection, mode, use, changed).pipe(
211
- Effect_exports.mapError(
212
- (error) => options.accountId === void 0 ? error : accountProviderError(error, options.accountId)
213
- )
214
- ),
215
- connection.timeoutMs,
216
- failure
217
- );
218
- });
219
- var mcpToolsEffect = (input) => mcpClientEffect(input).pipe(Effect_exports.flatMap(adaptMcpTools));
220
-
221
- export {
222
- mcpClientEffect,
223
- mcpToolsEffect
224
- };